• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1tree grammar SimpleCWalker;
2options {
3    tokenVocab = SimpleC;
4	language = ObjC;
5	ASTLabelType = CommonTree;
6}
7
8scope Symbols
9{
10CommonTree *tree;
11}
12
13program
14    :   declaration+
15    ;
16
17declaration
18    :   variable
19    |   ^(FUNC_DECL functionHeader)
20    |   ^(FUNC_DEF functionHeader block)
21    ;
22
23variable
24    :   ^(VAR_DEF type declarator)
25    ;
26
27declarator
28    :   K_ID
29    ;
30
31functionHeader
32    :   ^(FUNC_HDR type K_ID formalParameter+)
33    ;
34
35formalParameter
36    :   ^(ARG_DEF type declarator)
37    ;
38
39type
40    :   K_INT_TYPE
41    |   K_CHAR
42    |   K_VOID
43    |   K_ID
44    ;
45
46block
47    :   ^(BLOCK variable* stat*)
48    ;
49
50stat: forStat
51    | expr
52    | block
53    ;
54
55forStat
56    :   ^(K_FOR expr expr expr block)
57    ;
58
59expr:   ^(K_EQEQ expr expr)
60    |   ^(K_LT expr expr)
61    |   ^(K_PLUS expr expr)
62    |   ^(K_EQ K_ID e=expr) { NSLog(@"assigning \%@ to variable \%@", $e.text, $K_ID.text); }
63    |   atom
64    ;
65
66atom
67    : K_ID
68    | K_INT
69    ;
70