diff options
Diffstat (limited to 'antlr-3.4/runtime/Python/tests/t017parser.g')
-rw-r--r-- | antlr-3.4/runtime/Python/tests/t017parser.g | 91 |
1 files changed, 91 insertions, 0 deletions
diff --git a/antlr-3.4/runtime/Python/tests/t017parser.g b/antlr-3.4/runtime/Python/tests/t017parser.g new file mode 100644 index 0000000..84c6b03 --- /dev/null +++ b/antlr-3.4/runtime/Python/tests/t017parser.g @@ -0,0 +1,91 @@ +grammar t017parser; + +options { + language = Python; +} + +program + : declaration+ + ; + +declaration + : variable + | functionHeader ';' + | functionHeader block + ; + +variable + : type declarator ';' + ; + +declarator + : ID + ; + +functionHeader + : type ID '(' ( formalParameter ( ',' formalParameter )* )? ')' + ; + +formalParameter + : type declarator + ; + +type + : 'int' + | 'char' + | 'void' + | ID + ; + +block + : '{' + variable* + stat* + '}' + ; + +stat: forStat + | expr ';' + | block + | assignStat ';' + | ';' + ; + +forStat + : 'for' '(' assignStat ';' expr ';' assignStat ')' block + ; + +assignStat + : ID '=' expr + ; + +expr: condExpr + ; + +condExpr + : aexpr ( ('==' | '<') aexpr )? + ; + +aexpr + : atom ( '+' atom )* + ; + +atom + : ID + | INT + | '(' expr ')' + ; + +ID : ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'0'..'9'|'_')* + ; + +INT : ('0'..'9')+ + ; + +WS : ( ' ' + | '\t' + | '\r' + | '\n' + )+ + {$channel=HIDDEN} + ; |