# Parses a superset of C1 top-level declarations @lexer lexer @include "./expression.ne" @include "./statement.ne" Program -> _ (GlobalDecl _):* GlobalDecl -> %pragma | "struct" _ (Identifier | %type_identifier) _ ";" | "struct" _ (Identifier | %type_identifier) _ "{" _ (Tp _ Identifier _ ";" _):* "}" _ ";" | Tp _ Identifier _ "(" _ (Tp _ Identifier _ ("," _ Tp _ Identifier _):*):? ")" _ Annos (";" | StatementBlock) | "typedef" _ Tp _ Identifier _ # Omits trailing semicolon