Translate a modest selection of easy binops.

This commit is contained in:
Graydon Hoare 2010-09-28 14:01:21 -07:00
parent 11e72fd4e0
commit 5a4cb3ef36
3 changed files with 176 additions and 37 deletions

View file

@ -250,11 +250,13 @@ state fn parse_prefix_expr(parser p) -> @ast.expr {
alt (p.peek()) {
case (token.NOT) {
p.bump();
auto e = parse_prefix_expr(p);
ret @ast.expr_unary(ast.not, e);
}
case (token.TILDE) {
p.bump();
auto e = parse_prefix_expr(p);
ret @ast.expr_unary(ast.bitnot, e);
}
@ -263,11 +265,13 @@ state fn parse_prefix_expr(parser p) -> @ast.expr {
alt (b) {
case (token.MINUS) {
p.bump();
auto e = parse_prefix_expr(p);
ret @ast.expr_unary(ast.neg, e);
}
case (token.STAR) {
p.bump();
auto e = parse_prefix_expr(p);
ret @ast.expr_unary(ast.deref, e);
}
@ -298,19 +302,16 @@ state fn parse_binops(parser p,
auto more = true;
while (more) {
more = false;
auto t = p.peek();
alt (t) {
case (token.BINOP(?op)) {
for (tup(token.binop, ast.binop) pair in ops) {
for (tup(token.binop, ast.binop) pair in ops) {
alt (p.peek()) {
case (token.BINOP(?op)) {
if (pair._0 == op) {
p.bump();
e = @ast.expr_binary(pair._1, e, sub(p));
more = true;
t = p.peek();
}
}
}
case (_) {
}
}
}
ret e;
@ -324,12 +325,11 @@ state fn parse_binary_exprs(parser p,
auto more = true;
while (more) {
more = false;
auto t = p.peek();
for (tup(token.token, ast.binop) pair in ops) {
if (pair._0 == t) {
if (pair._0 == p.peek()) {
p.bump();
e = @ast.expr_binary(pair._1, e, sub(p));
more = true;
t = p.peek();
}
}
}