git @ Cat's Eye Technologies Exanoke / 615bb08
More. catseye 12 years ago
1 changed file(s) with 55 addition(s) and 3 deletion(s). Raw diff Collapse all Expand all
115115 self.scanner.expect('(')
116116 self.scanner.expect('#')
117117 while self.scanner.consume(','):
118 args.push(self.ident())
118 args.append(self.ident())
119119 self.scanner.expect(')')
120120 expr = self.expr()
121121 return AST('FunDef', [expr] + args, value=name)
127127 self.scanner.expect(",")
128128 e2 = self.expr()
129129 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()