Untitled
By: a guest | Mar 19th, 2010 | Syntax:
Java | Size: 1.22 KB | Hits: 63 | Expires: Never
Expression Expression():
{
Expression e1, e2, e3;
List<Expression> args = new ArrayList<Expression>();
Token t;
}
{
(
t=<IntegerLiteral> { e2 = new IntegerLiteral(Integer.parseInt(t.image)); }
| <TRUE> { e2 = new True(); }
| <FALSE> { e2 = new False(); }
| t=<Identifier> { e2 = new Identifier(t.image); }
| <THIS> { e2 = new This(); }
| LOOKAHEAD(2) <NEW> <INT> "[" e1=Expression() "]" { e2 = new NewArray(e1); }
| LOOKAHEAD(2) <NEW> t=<Identifier> "(" ")" { e2 = new Object(new Identifier(t.image)); }
| "!" e1=Expression() { e2 = new Not(e1); }
| "(" e1=Expression() ")" { e2 = e1; }
)
[
LOOKAHEAD(2) (
"&&" e1=Expression() { return new And(e2, e1); }
| "<" e1=Expression() { return new LessThan(e2, e1); }
| "+" e1=Expression() { return new Plus(e2, e1); }
| "-" e1=Expression() { return new Minus(e2, e1); }
| "*" e1=Expression() { return new Times(e2, e1); }
| "[" e1=Expression() "]" { return new ArrayLookup(e2, e1); }
| LOOKAHEAD(2) "." "length" { return new ArrayLength(e2); }
| LOOKAHEAD(2) "." t=<Identifier> "(" [e1=Expression() ("," e3=Expression() { args.add(e3); })*] ")" { return new Call(e1, new Identifier(t.image), args); }
)
] { return e2; }
}