Line | |
---|
1 | class CalcParser extends Parser;
|
---|
2 | options {
|
---|
3 | buildAST = true; // uses CommonAST by default
|
---|
4 | }
|
---|
5 |
|
---|
6 | expr
|
---|
7 | : mexpr (PLUS^ mexpr)* SEMI!
|
---|
8 | ;
|
---|
9 |
|
---|
10 | mexpr
|
---|
11 | : atom (STAR^ atom)*
|
---|
12 | ;
|
---|
13 |
|
---|
14 | atom: INT
|
---|
15 | ;
|
---|
16 |
|
---|
17 | class CalcLexer extends Lexer;
|
---|
18 |
|
---|
19 | WS : (' '
|
---|
20 | | '\t'
|
---|
21 | | '\n'
|
---|
22 | | '\r')
|
---|
23 | { _ttype = Token.SKIP; }
|
---|
24 | ;
|
---|
25 |
|
---|
26 | LPAREN: '('
|
---|
27 | ;
|
---|
28 |
|
---|
29 | RPAREN: ')'
|
---|
30 | ;
|
---|
31 |
|
---|
32 | STAR: '*'
|
---|
33 | ;
|
---|
34 |
|
---|
35 | PLUS: '+'
|
---|
36 | ;
|
---|
37 |
|
---|
38 | SEMI: ';'
|
---|
39 | ;
|
---|
40 |
|
---|
41 | protected
|
---|
42 | DIGIT
|
---|
43 | : '0'..'9'
|
---|
44 | ;
|
---|
45 |
|
---|
46 | INT : (DIGIT)+
|
---|
47 | ;
|
---|
48 |
|
---|
49 | class CalcTreeWalker extends TreeParser;
|
---|
50 |
|
---|
51 | expr returns [float r]
|
---|
52 | {
|
---|
53 | float a,b;
|
---|
54 | r=0;
|
---|
55 | }
|
---|
56 | : #(PLUS a=expr b=expr) {r = a+b;}
|
---|
57 | | #(STAR a=expr b=expr) {r = a*b;}
|
---|
58 | | i:INT {r = (float)Integer.parseInt(i.getText());}
|
---|
59 | ;
|
---|
60 |
|
---|
Note:
See
TracBrowser
for help on using the repository browser.