diff options
Diffstat (limited to 'runtime/ObjC/Framework/examples/simplecTreeParser/SimpleCTP.g')
-rw-r--r-- | runtime/ObjC/Framework/examples/simplecTreeParser/SimpleCTP.g | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/runtime/ObjC/Framework/examples/simplecTreeParser/SimpleCTP.g b/runtime/ObjC/Framework/examples/simplecTreeParser/SimpleCTP.g new file mode 100644 index 0000000..c1f89b8 --- /dev/null +++ b/runtime/ObjC/Framework/examples/simplecTreeParser/SimpleCTP.g @@ -0,0 +1,69 @@ +tree grammar SimpleCTP; +options { + tokenVocab = SimpleC; + language = ObjC; + ASTLabelType = ANTLRCommonTree; +} + +scope Symbols +{ +ANTLRCommonTree *tree; +} + +program + : declaration+ + ; + +declaration + : variable + | ^(FUNC_DECL functionHeader) + | ^(FUNC_DEF functionHeader block) + ; + +variable + : ^(VAR_DEF type declarator) + ; + +declarator + : K_ID + ; + +functionHeader + : ^(FUNC_HDR type K_ID formalParameter+) + ; + +formalParameter + : ^(ARG_DEF type declarator) + ; + +type + : K_INT_TYPE + | K_CHAR + | K_VOID + | K_ID + ; + +block + : ^(BLOCK variable* stat*) + ; + +stat: forStat + | expr + | block + ; + +forStat + : ^(K_FOR expr expr expr block) + ; + +expr: ^(K_EQEQ expr expr) + | ^(K_LT expr expr) + | ^(K_PLUS expr expr) + | ^(K_EQ K_ID e=expr) { NSLog(@"assigning \%@ to variable \%@", $e.text, $K_ID.text); } + | atom + ; + +atom + : K_ID + | K_INT + ; |