int i = 0; /* some comment */
int j = 0;
while (i < 10) {
System.out.println(j);
i = i + 1;
j = j + 2*i+1;
}
INT, Identifier("i"), EQUAL, IntNumeral(0), SEMICOLON, INT, Identifier("j"), EQUAL, ...
WHILE, OPENPAREN, Identifier("i"), LESSTHAN, IntNumeral(10), CLOSEDPAREN, OPENBRACE,
Identifier("System"), DOT, Identifier("out"), ...
Declaration(INT, Identifier("i"), EQUAL, InitialExpression(IntConst(IntNumeral(0)),
Declaration(INT, Identifier("j"), EQUAL, InitialExpression(IntConst(IntNumeral(0)),
WhileStatememt(WHILE, OPENPAREN, LessThanExpr(Identifier("i"),LESSTHAN,IntNumeral(10)),
CLOSEDPAREN,
StatementBlock(OPENBRACE,
Statement(MethodCall(DotExpr(Identifier("System"),DOT,Identifier("out")),DOT,
Identifier("println"),
OPENPAREN,ArgumentList(Identifier("j")),CLOSEDPAREN),
SEMICOLON,
...
)
)
)
)
Declaration("i",IntType,Some(IntConst(0)),
Declaration("j",IntType,Some(IntConst(0)),
WhileStatememt(LessThan(Ident("i"),IntConst(10)),
StatementBlock(
MethodCall(DotExpr(Ident("System"),"out"),
"println",
List(Ident("j"))),
Assignment("i", Plus(Ident("i"),IntConst(1))),
Assignment("j", Plus(Ident("j"),
Times(IntConst(2),Ident("i"),
IntConst(1))
)
)
)
)
resolved tree and symbol table
Declaration("i",IntType,Some(IntConst(0)),
Declaration("j",IntType,Some(IntConst(0)),
WhileStatememt(LessThan(Ident("i"),IntConst(10)),
StatementBlock(
MethodCall(DotExpr(Ident("System"),"out"),
"println",
List(Ident("j"))),
Assignment("i", TYPE(Plus(TYPE(Ident("i"),INT),IntConst(1))),INT),
Assignment("j", TYPE(Plus(TYPE(Ident("j"),INT),
TYPE(Times(IntConst(2),TYPE(Ident("i"),INT),INT),
TYPE(IntConst(1),INT)),INT)
)
)
)
)
i -> (LocalVar,INT) j -> (LocalVar,INT)
© 2019 EPFL, all rights reserved