More.
catseye
12 years ago
115 | 115 | self.scanner.expect('(') |
116 | 116 | self.scanner.expect('#') |
117 | 117 | while self.scanner.consume(','): |
118 | args.push(self.ident()) | |
118 | args.append(self.ident()) | |
119 | 119 | self.scanner.expect(')') |
120 | 120 | expr = self.expr() |
121 | 121 | return AST('FunDef', [expr] + args, value=name) |
127 | 127 | self.scanner.expect(",") |
128 | 128 | e2 = self.expr() |
129 | 129 | self.scanner.expect(")") |
130 | return AST('Cons', e1, e2) | |
131 | # ... and so forth | |
130 | return AST('Cons', [e1, e2]) | |
131 | elif self.scanner.consume("if"): | |
132 | e1 = self.expr() | |
133 | self.scanner.expect("then") | |
134 | e2 = self.expr() | |
135 | self.scanner.expect("else") | |
136 | e3 = self.expr() | |
137 | return AST('If', [e1, e2, e3]) | |
138 | elif self.scanner.consume("self"): | |
139 | args = [] | |
140 | self.scanner.expect("(") | |
141 | e1 = self.smaller() | |
142 | args.append(e1) | |
143 | while self.scanner.consume(','): | |
144 | args.append(self.expr()) | |
145 | return AST('Self', args) | |
146 | elif self.scanner.consume("eq?"): | |
147 | self.scanner.expect("(") | |
148 | e1 = self.expr() | |
149 | self.scanner.expect(",") | |
150 | e2 = self.expr() | |
151 | self.scanner.expect(")") | |
152 | return AST('Eq?', [e1, e2]) | |
153 | elif self.scanner.consume("cons?"): | |
154 | self.scanner.expect("(") | |
155 | e1 = self.expr() | |
156 | self.scanner.expect(")") | |
157 | return AST('Cons?', [e1]) | |
158 | # and so forth | |
159 | else: | |
160 | raise SyntaxError | |
161 | ||
162 | def smaller(self): | |
163 | if self.scanner.consume("<head"): | |
164 | e1 = self.smallerterm() | |
165 | return AST('Head', [e1]) | |
166 | elif self.scanner.consume("<tail"): | |
167 | e1 = self.smallerterm() | |
168 | return AST('Tail', [e1]) | |
169 | elif self.scanner.consume("<if"): | |
170 | e1 = self.expr() | |
171 | self.scanner.expect("then") | |
172 | e2 = self.smallerterm() | |
173 | self.scanner.expect("else") | |
174 | e3 = self.smallerterm() | |
175 | return AST('If', [e1, e2, e3]) | |
176 | else: | |
177 | raise SyntaxError | |
178 | ||
179 | def smallerterm(self): | |
180 | if self.scanner.consume("#"): | |
181 | return AST('ArgRef', value=0) | |
182 | else: | |
183 | return self.smaller() |