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)
source- and taget-independent format
control-flow graph containing three-address code instructions
© 2019 EPFL, all rights reserved