
statement ::= prepcomline | declaration
prepcomline ::= '#define' identifier constant
constant ::= identifier | unsigned_integer
declaration ::= decspec declist ';'
decspec ::= storclspec | typespec | decspec storclspec |
decspec typespec
storclspec ::= 'external' | 'static' | 'auto' | 'typedef' | empty
typespec ::= inttysp | flptysp | chartysp | dcmltysp |
strutysp | identifier | 'const' | 'volatile'
inttysp ::= 'short' | 'long' | 'int' | 'unsigned'
chartysp ::= 'char' | 'VARCHAR' | 'varchar'
flptysp ::= 'float' | 'long' | 'double'
dcmltysp ::= dcmldef | dcmlref
strutysp ::= strudef | struref
strudef ::= 'struct' structag '{' fieldlist '}'
struref ::= 'struct' identifier
dcmldef ::= 'DECIMAL' dcmltag '{' dcmlscale '}'
dcmlref ::= 'DECIMAL' identifier
structag ::= identifier | empty
fieldlist ::= typespec declist ';' |
fieldlist typespec declist ';'
dcmltag ::= identifier | empty
dcmlscale ::= dcmldigits | dcmldigits ',' dcmlfract | empty
declist ::= possinitdec | declist ',' possinitdec
dcmldigits ::= identifier | unsigned_integer
dcmlfract ::= identifier | unsigned_integer
possinitdec ::= declarator | declarator '=' initializer
declarator ::= identifier | '*' identifier | declarator
'[' arrdim ']'
arrdim ::= identifier | unsigned_integer
initializer ::= expression | '{' initlist '}'
initlist ::= initializer | initlist ',' initializer
expression ::= basexpr | basexpr ( expression ) basexpr
empty ::=
