Last change
on this file since 1 was
1,
checked in by lnalod, 15 years ago
|
Initial import of YAO sources
|
File size:
2.1 KB
|
Line | |
---|
1 | // This file is part of PyANTLR. See LICENSE.txt for license |
---|
2 | // details..........Copyright (C) Wolfgang Haefelinger, 2004. |
---|
3 | // |
---|
4 | // $Id$ |
---|
5 | |
---|
6 | options { |
---|
7 | language=Python; |
---|
8 | } |
---|
9 | |
---|
10 | class treewalk_p extends Parser; |
---|
11 | |
---|
12 | options { |
---|
13 | codeGenMakeSwitchThreshold = 3; |
---|
14 | codeGenBitsetTestThreshold = 4; |
---|
15 | buildAST=true; |
---|
16 | } |
---|
17 | |
---|
18 | block |
---|
19 | : LCURLY^ ( statement )* RCURLY! |
---|
20 | ; |
---|
21 | |
---|
22 | statement |
---|
23 | : expr SEMI! |
---|
24 | | "if"^ LPAREN! expr RPAREN! statement |
---|
25 | ( "else"! statement )? |
---|
26 | | "while"^ LPAREN! expr RPAREN! statement |
---|
27 | |! b:block { statement_AST = b_AST; } |
---|
28 | // do some manual tree returning |
---|
29 | ; |
---|
30 | |
---|
31 | expr: assignExpr |
---|
32 | ; |
---|
33 | |
---|
34 | assignExpr |
---|
35 | : aexpr (ASSIGN^ assignExpr)? |
---|
36 | ; |
---|
37 | |
---|
38 | aexpr |
---|
39 | : mexpr (PLUS^ mexpr)* |
---|
40 | ; |
---|
41 | |
---|
42 | mexpr |
---|
43 | : atom (STAR^ atom)* |
---|
44 | ; |
---|
45 | |
---|
46 | atom: ID |
---|
47 | | INT |
---|
48 | ; |
---|
49 | |
---|
50 | class treewalk_w extends TreeParser; |
---|
51 | |
---|
52 | block |
---|
53 | : #( LCURLY ( stat )+ ) |
---|
54 | ; |
---|
55 | |
---|
56 | stat: #("if" expr stat (stat)?) |
---|
57 | | #("while" expr stat) |
---|
58 | | expr |
---|
59 | | block |
---|
60 | ; |
---|
61 | |
---|
62 | expr: #(ASSIGN expr expr) {print "found assign" } |
---|
63 | | #(PLUS expr expr) {print "found +" } |
---|
64 | | #(STAR expr expr) {print "found *" } |
---|
65 | | a:ID {print "found ID " ,a.getText() } |
---|
66 | | b:INT {print "found INT ",b.getText() } |
---|
67 | ; |
---|
68 | |
---|
69 | class treewalk_l extends Lexer; |
---|
70 | |
---|
71 | WS : (' ' |
---|
72 | | '\t' |
---|
73 | | '\n' |
---|
74 | | '\r') |
---|
75 | { _ttype = SKIP; } |
---|
76 | ; |
---|
77 | |
---|
78 | LPAREN: '(' |
---|
79 | ; |
---|
80 | |
---|
81 | RPAREN: ')' |
---|
82 | ; |
---|
83 | |
---|
84 | LCURLY: '{' |
---|
85 | ; |
---|
86 | |
---|
87 | RCURLY: '}' |
---|
88 | ; |
---|
89 | |
---|
90 | STAR: '*' |
---|
91 | ; |
---|
92 | |
---|
93 | PLUS: '+' |
---|
94 | ; |
---|
95 | |
---|
96 | ASSIGN |
---|
97 | : '=' |
---|
98 | ; |
---|
99 | |
---|
100 | SEMI: ';' |
---|
101 | ; |
---|
102 | |
---|
103 | COMMA |
---|
104 | : ',' |
---|
105 | ; |
---|
106 | |
---|
107 | protected |
---|
108 | ESC : '\\' |
---|
109 | ( 'n' |
---|
110 | | 'r' |
---|
111 | | 't' |
---|
112 | | 'b' |
---|
113 | | 'f' |
---|
114 | | '"' |
---|
115 | | '\'' |
---|
116 | | '\\' |
---|
117 | | ('0'..'3') ( DIGIT (DIGIT)? )? |
---|
118 | | ('4'..'7') (DIGIT)? |
---|
119 | ) |
---|
120 | ; |
---|
121 | |
---|
122 | protected |
---|
123 | DIGIT |
---|
124 | : '0'..'9' |
---|
125 | ; |
---|
126 | |
---|
127 | INT : (DIGIT)+ |
---|
128 | ; |
---|
129 | |
---|
130 | ID : ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'_'|'0'..'9')* |
---|
131 | { |
---|
132 | try: |
---|
133 | i = literals[self.getText()] |
---|
134 | _ttype = i; |
---|
135 | except: |
---|
136 | pass |
---|
137 | } |
---|
138 | ; |
---|
Note: See
TracBrowser
for help on using the repository browser.