Created
July 18, 2013 00:56
-
-
Save aamedina/6025901 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| translation-unit: | |
| external-declaration+ | |
| external-declaration: | |
| <ws> function-definition <ws> | | |
| <ws> declaration <ws> | |
| function-definition: | |
| declaration-specifiers <ws> declarator <ws> declaration-list? <ws> compound-statement | |
| declaration-list: | |
| (<ws> declaration)+ <ws> | |
| ws: | |
| #'\s*' | |
| identifier: | |
| <ws> #'[a-zA-Z_][a-zA-Z_0-9]*' <ws> | |
| identifier-nondigit: | |
| <ws> nondigit <ws> | | |
| <ws> universal-character-name <ws> | |
| nondigit: | |
| #'[A-Za-z_]' | |
| digit: | |
| #'[\d]' | |
| universal-character-name: | |
| '\\u' <ws> hex-quad <ws> | | |
| '\\U' <ws> hex-quad <ws> <ws> hex-quad <ws> | |
| hex-quad: | |
| hexadecimal-digit hexadecimal-digit hexadecimal-digit hexadecimal-digit | |
| constant: | |
| integer-constant | | |
| floating-constant | | |
| enumeration-constant | | |
| character-constant | |
| integer-constant: | |
| decimal-constant integer-suffix? | | |
| octal-constant integer-suffix? | | |
| hexadecimal-constant integer-suffix? | |
| decimal-constant: | |
| nonzero-digit | | |
| decimal-constant digit | |
| octal-constant: | |
| '0' | | |
| octal-constant octal-digit | |
| hexadecimal-constant: | |
| hexadecimal-prefix hexadecimal-digit | | |
| hexadecimal-constant hexadecimal-digit | |
| hexadecimal-prefix: | |
| '0x' | '0X' | |
| nonzero-digit: | |
| #'[1-9]' | |
| octal-digit: | |
| #'[0-7]' | |
| hexadecimal-digit: | |
| #'[0-9a-fA-F]' | |
| integer-suffix: | |
| unsigned-suffix long-suffix? | | |
| unsigned-suffix long-long-suffix | | |
| long-suffix unsigned-suffix? | | |
| long-long-suffix unsigned-suffix? | |
| unsigned-suffix: | |
| 'u' | 'U' | |
| long-suffix: | |
| 'l' | 'L' | |
| long-long-suffix: | |
| 'll' | 'LL' | |
| floating-constant: | |
| decimal-floating-constant | | |
| hexadecimal-floating-constant | |
| decimal-floating-constant: | |
| fractional-constant exponent-part? floating-suffix? | | |
| digit-sequence exponent-part floating-suffix? | |
| hexadecimal-floating-constant: | |
| hexadecimal-prefix hexadecimal-fractional-constant binary-exponent-part | |
| floating-suffix? | | |
| hexadecimal-prefix hexadecimal-digit-sequence binary-exponent-part | |
| floating-suffix? | |
| fractional-constant: | |
| digit-sequence? '.' digit-sequence | | |
| digit-sequence '.' | |
| exponent-part: | |
| 'e' sign? digit-sequence | | |
| 'E' sign? digit-sequence | |
| sign: | |
| #'[+-]' | |
| digit-sequence: | |
| digit | | |
| digit-sequence digit | |
| hexadecimal-fractional-constant: | |
| hexadecimal-digit-sequence? "." hexadecimal-digit-sequence | | |
| hexadecimal-digit-sequence "." | |
| binary-exponent-part: | |
| 'p' sign? digit-sequence | | |
| 'P' sign? digit-sequence | |
| hexadecimal-digit-sequence: | |
| hexadecimal-digit | | |
| hexadecimal-digit-sequence hexadecimal-digit | |
| floating-suffix: | |
| #'[flFL]' | |
| enumeration-constant: | |
| <ws> identifier <ws> | |
| character-constant: | |
| "'" c-char "'" | | |
| "L'" c-char "'" | |
| c-char-sequence: | |
| c-char | | |
| c-char-sequence c-char | |
| c-char: | |
| #'[^\'\n\\]' | | |
| escape-sequence | |
| escape-sequence: | |
| simple-escape-sequence | | |
| octal-escape-sequence | | |
| hexadecimal-escape-sequence | | |
| universal-character-name | |
| simple-escape-sequence: | |
| #'\\[\'\"?abfnrtv]' | |
| octal-escape-sequence: | |
| '\\' octal-digit | | |
| '\\' octal-digit octal-digit | | |
| '\\' octal-digit octal-digit octal-digit | |
| hexadecimal-escape-sequence: | |
| '\\x' hexadecimal-digit | | |
| hexadecimal-escape-sequence hexadecimal-digit | |
| string-literal: | |
| '\"' s-char-sequence? '\"' | | |
| 'L\"' s-char-sequence? '\"' | |
| s-char-sequence: | |
| #'([^\"\n\\]|\\[\'\"?abfnrtv])+' | |
| s-char: | |
| #'([^\"\n\\]|[\'\"?abfnrtv])*' | | |
| escape-sequence | |
| header-name: | |
| '<' h-char-sequence '>' | | |
| '\"' q-char-sequence '\"' | |
| h-char-sequence: | |
| h-char | | |
| h-char-sequence h-char | |
| h-char: | |
| #'[^\n>]' | |
| q-char-sequence: | |
| q-char | | |
| q-char-sequence q-char | |
| q-char: | |
| #'[^\n\"]' | |
| primary-expression: | |
| <ws> identifier <ws> | | |
| <ws> constant <ws> | | |
| <ws> string-literal <ws> | | |
| <ws> "(" <ws> expression <ws> ")" <ws> | |
| postfix-expression: | |
| <ws> primary-expression <ws> | | |
| <ws> postfix-expression <ws> "[" <ws> expression <ws> "]" | | |
| <ws> postfix-expression <ws> "(" <ws> argument-expression-list? <ws> ")" | | |
| <ws> postfix-expression <ws> "." <ws> identifier <ws> | | |
| <ws> postfix-expression <ws> "->" <ws> identifier <ws> | | |
| <ws> postfix-expression <ws> "++" | | |
| <ws> postfix-expression <ws> "--" | | |
| "(" <ws> type-name <ws> ")" "{" <ws> initializer-list <ws> "}" | | |
| "(" <ws> type-name <ws> ")" "{" <ws> initializer-list <ws> "," "}" | |
| argument-expression-list: | |
| <ws> assignment-expression ( <ws> "," <ws> assignment-expression )* <ws> | |
| unary-expression: | |
| <ws> postfix-expression <ws> | | |
| "++" <ws> unary-expression <ws> | | |
| "--" <ws> unary-expression <ws> | | |
| <ws> unary-operator <ws> <ws> cast-expression <ws> | | |
| "sizeof" <ws> unary-expression <ws> | | |
| "sizeof" "(" <ws> type-name <ws> ")" | |
| unary-operator: | |
| <ws> ('&' | '*' | '+' | '-' | '~' | '!') <ws> | |
| cast-expression: | |
| <ws> unary-expression <ws> | | |
| "(" <ws> type-name <ws> ")" <ws> cast-expression <ws> | |
| multiplicative-expression: | |
| <ws> cast-expression <ws> | | |
| <ws> multiplicative-expression <ws> "*" <ws> cast-expression <ws> | | |
| <ws> multiplicative-expression <ws> "/" <ws> cast-expression <ws> | | |
| <ws> multiplicative-expression <ws> "%" <ws> cast-expression <ws> | |
| additive-expression: | |
| <ws> multiplicative-expression <ws> | | |
| <ws> additive-expression <ws> "+" <ws> multiplicative-expression <ws> | | |
| <ws> additive-expression <ws> "-" <ws> multiplicative-expression <ws> | |
| shift-expression: | |
| <ws> additive-expression <ws> | | |
| <ws> shift-expression <ws> "<<" <ws> additive-expression <ws> | | |
| <ws> shift-expression <ws> ">>" <ws> additive-expression <ws> | |
| relational-expression: | |
| <ws> shift-expression <ws> | | |
| <ws> relational-expression <ws> "<" <ws> shift-expression <ws> | | |
| <ws> relational-expression <ws> ">" <ws> shift-expression <ws> | | |
| <ws> relational-expression <ws> "<=" <ws> shift-expression <ws> | | |
| <ws> relational-expression <ws> ">=" <ws> shift-expression <ws> | |
| equality-expression: | |
| <ws> relational-expression <ws> | | |
| <ws> equality-expression <ws> "==" <ws> relational-expression <ws> | | |
| <ws> equality-expression <ws> "!=" <ws> relational-expression <ws> | |
| AND-expression: | |
| <ws> equality-expression <ws> | | |
| <ws> AND-expression <ws> "&" <ws> equality-expression <ws> | |
| exclusive-OR-expression: | |
| <ws> AND-expression <ws> | | |
| <ws> exclusive-OR-expression <ws> "^" <ws> AND-expression <ws> | |
| inclusive-OR-expression: | |
| <ws> exclusive-OR-expression <ws> | | |
| <ws> inclusive-OR-expression <ws> "|" <ws> exclusive-OR-expression <ws> | |
| logical-AND-expression: | |
| <ws> inclusive-OR-expression <ws> | | |
| <ws> logical-AND-expression <ws> "&&" <ws> inclusive-OR-expression <ws> | |
| logical-OR-expression: | |
| <ws> logical-AND-expression <ws> | | |
| <ws> logical-OR-expression <ws> "||" <ws> logical-AND-expression <ws> | |
| conditional-expression: | |
| <ws> logical-OR-expression <ws> | | |
| <ws> logical-OR-expression <ws> "?" <ws> expression <ws> ":" <ws> conditional-expression <ws> | |
| assignment-expression: | |
| <ws> conditional-expression <ws> | | |
| <ws> unary-expression <ws> assignment-operator <ws> assignment-expression <ws> | |
| assignment-operator: | |
| <ws> '=' <ws> | | |
| <ws> '*=' <ws> | | |
| <ws> '/=' <ws> | | |
| <ws> '%=' <ws> | | |
| <ws> '+=' <ws> | | |
| <ws> '-=' <ws> | | |
| <ws> '<<=' <ws> | | |
| <ws> '>>=' <ws> | | |
| <ws> '&=' <ws> | | |
| <ws> '^=' <ws> | | |
| <ws> '|=' <ws> | |
| expression: | |
| <ws> assignment-expression ( <ws> ',' <ws> assignment-expression )* <ws> | |
| constant-expression: | |
| <ws> conditional-expression <ws> | |
| declaration: | |
| <ws> declaration-specifiers <ws> init-declarator-list? <ws> ';' <ws> | |
| declaration-specifiers: | |
| (<ws> storage-class-specifier / <ws> type-specifier / <ws> type-qualifier / <ws> function-specifier)+ <ws> | |
| init-declarator-list: | |
| <ws> init-declarator ( <ws> ',' <ws> init-declarator )* <ws> | |
| init-declarator: | |
| <ws> declarator <ws> | | |
| <ws> declarator <ws> '=' <ws> initializer <ws> | |
| storage-class-specifier: | |
| 'typedef' | 'extern' | 'static' | 'auto' | 'register' | |
| type-specifier: | |
| ( | |
| 'void' | 'char' | 'uchar' | 'short' | 'ushort' | 'int' | 'int2' | 'int4' | | |
| 'uint' | 'long' | 'char2' | 'char4' | 'float2' | 'float4' | 'long2' | 'long4' | | |
| 'ulong'| 'float' | 'double' |'half' | 'signed' | 'unsigned' | '_Bool' | 'bool' | | |
| '_Complex' | '_Imaginary' | 'size_t' | 'ptrdiff_t' | 'intptr_t' | 'uintptr_t' | | |
| 'image2d_t' | 'image3d_t' | 'image2d_array_t' | 'image1d_t' | 'event_t' | | |
| 'image1d_buffer_t' | 'image1d_array_t' | 'sampler_t' | |
| ) / | |
| (<ws> struct-or-union-specifier <ws> | | |
| <ws> enum-specifier <ws> | | |
| <ws> typedef-name <ws>) | |
| struct-or-union-specifier: | |
| <ws> struct-or-union <ws> identifier? <ws> '{' <ws> struct-declaration-list <ws> '}' <ws> | | |
| <ws> struct-or-union <ws> identifier <ws> | |
| struct-or-union: | |
| <ws> (<ws> 'struct' <ws> | <ws> 'union' <ws>) <ws> | |
| struct-declaration-list: | |
| (<ws> struct-declaration)+ <ws> | |
| struct-declaration: | |
| <ws> specifier-qualifier-list <ws> struct-declarator-list <ws> ';' <ws> | |
| specifier-qualifier-list: | |
| <ws> type-specifier <ws> specifier-qualifier-list? <ws> | | |
| <ws> type-qualifier <ws> specifier-qualifier-list? <ws> | |
| struct-declarator-list: | |
| <ws> struct-declarator <ws> | | |
| <ws> struct-declarator-list <ws> "," <ws> struct-declarator <ws> | |
| struct-declarator: | |
| <ws> declarator <ws> | | |
| <ws> declarator? <ws> ':' <ws> constant-expression <ws> | |
| enum-specifier: | |
| <ws> 'enum' <ws> identifier? <ws> '{' <ws> enumerator-list <ws> '}' | | |
| <ws> 'enum' <ws> identifier? <ws> '{' <ws> enumerator-list <ws> ',' '}' | | |
| <ws> 'enum' <ws> identifier <ws> | |
| enumerator-list: | |
| <ws> enumerator <ws> | | |
| <ws> enumerator-list <ws> ',' <ws> enumerator <ws> | |
| enumerator: | |
| <ws> enumeration-constant <ws> | | |
| <ws> enumeration-constant <ws> '=' <ws> constant-expression <ws> | |
| type-qualifier: | |
| 'const' | 'restrict' | 'volatile' | 'constant' | 'local' | '__global' | | |
| 'global' | '__local' | 'local' | '__constant' | '__private' | 'private' | | |
| '__read_only' | 'read_only' | 'write_only' | '__write_only' | '__read_write' | | |
| 'read_write' | |
| function-specifier: | |
| 'inline' | '__kernel' | 'kernel' | |
| declarator: | |
| <ws> pointer? <ws> <direct-declarator> <ws> | |
| direct-declarator: | |
| <ws> identifier <ws> | | |
| "(" <ws> declarator <ws> ")" | | |
| <ws> direct-declarator <ws> "[" <ws> type-qualifier-list? <ws> assignment-expression? <ws> "]" | | |
| <ws> direct-declarator <ws> "[" "static" <ws> type-qualifier-list? <ws> assignment-expression <ws> "]" <ws> | | |
| <ws> direct-declarator <ws> "[" <ws> type-qualifier-list <ws> "static" <ws> assignment-expression <ws> "]" | | |
| <ws> direct-declarator <ws> "[" <ws> type-qualifier-list? <ws> "*" "]" | | |
| <ws> direct-declarator <ws> "(" <ws> parameter-type-list <ws> ")" | | |
| <ws> direct-declarator <ws> "(" <ws> identifier-list? <ws> ")" | |
| pointer: | |
| '*' <ws> type-qualifier-list? <ws> | | |
| '*' <ws> type-qualifier-list? <ws> pointer <ws> | |
| type-qualifier-list: | |
| <ws> type-qualifier <ws> | | |
| <ws> type-qualifier-list <ws> type-qualifier <ws> | |
| parameter-type-list: | |
| <ws> parameter-list <ws> | | |
| <ws> parameter-list <ws> ',' <ws> '...' <ws> | |
| parameter-list: | |
| <ws> parameter-declaration <ws> | | |
| <ws> parameter-list <ws> "," <ws> parameter-declaration <ws> | |
| parameter-declaration: | |
| <ws> declaration-specifiers <ws> declarator <ws> | | |
| <ws> declaration-specifiers <ws> abstract-declarator? <ws> | |
| identifier-list: | |
| <ws> identifier <ws> | | |
| <ws> identifier-list <ws> "," <ws> identifier <ws> | |
| type-name: | |
| <ws> specifier-qualifier-list <ws> abstract-declarator? <ws> | |
| abstract-declarator: | |
| <ws> pointer <ws> | | |
| <ws> pointer? <ws> direct-abstract-declarator <ws> | |
| direct-abstract-declarator: | |
| <ws> "(" <ws> abstract-declarator <ws> ")" <ws> | | |
| <ws> direct-abstract-declarator? <ws> "[" <ws> assignment-expression? <ws> "]" <ws> | | |
| <ws> direct-abstract-declarator? <ws> "[" <ws> "*" <ws> "]" <ws> | | |
| <ws> direct-abstract-declarator? <ws> "(" <ws> parameter-type-list? <ws> ")" <ws> | |
| typedef-name: | |
| <ws> identifier <ws> | |
| initializer: | |
| <ws> assignment-expression <ws> | | |
| "{" <ws> initializer-list <ws> "}" <ws> | | |
| "{" <ws> initializer-list <ws> "," <ws> "}" <ws> | |
| initializer-list: | |
| <ws> designation? <ws> initializer <ws> | | |
| <ws> initializer-list <ws> "," <ws> designation? <ws> initializer <ws> | |
| designation: | |
| <ws> designator-list <ws> "=" <ws> | |
| designator-list: | |
| <ws> designator <ws> | | |
| <ws> designator-list <ws> designator <ws> | |
| designator: | |
| <ws> "[" <ws> constant-expression <ws> "]" <ws> | | |
| <ws> "." <ws> identifier <ws> | |
| statement: | |
| <ws> labeled-statement <ws> | | |
| <ws> compound-statement <ws> | | |
| <ws> expression-statement <ws> | | |
| <ws> selection-statement <ws> | | |
| <ws> iteration-statement <ws> | | |
| <ws> jump-statement <ws> | |
| labeled-statement: | |
| <ws> identifier <ws> ":" <ws> statement <ws> | | |
| <ws> "case" <ws> constant-expression <ws> ":" <ws> statement <ws> | | |
| <ws> "default" <ws> ":" <ws> statement <ws> | |
| compound-statement: | |
| <ws> "{" <ws> block-item-list? <ws> "}" <ws> | |
| block-item-list: | |
| (<ws> block-item)+ <ws> | |
| block-item: | |
| <ws> declaration <ws> | | |
| <ws> statement <ws> | |
| expression-statement: | |
| <ws> expression? <ws> ";" <ws> | |
| selection-statement: | |
| "if" "(" <ws> expression <ws> ")" <ws> statement <ws> | | |
| "if" "(" <ws> expression <ws> ")" <ws> statement <ws> "else" <ws> statement <ws> | | |
| "switch" "(" <ws> expression <ws> ")" <ws> statement <ws> | |
| iteration-statement: | |
| "while" "(" <ws> expression <ws> ")" <ws> statement <ws> | | |
| "do" <ws> statement <ws> "while" "(" <ws> expression <ws> ")" ";" | | |
| "for" "(" <ws> expression? <ws> ";" <ws> expression? <ws> ";" <ws> expression? <ws>")" <ws> statement <ws> | | |
| "for" "(" <ws> declaration <ws> expression? <ws> ";" <ws> expression? <ws> ")" <ws> statement <ws> | |
| jump-statement: | |
| "goto" <ws> identifier <ws> ";" | | |
| "continue" ";" | | |
| "break" ";" | | |
| "return" <ws> expression? <ws> ";" <ws> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment