if x < 0 then z := x else z := x
becomes
KW_IF, IDENTIFIER("x"), LESS, NUMBER(0), KW_THEN, IDENTIFIER("z"), ASSIGN, MINUS, IDENTIFIER("x"), KW_ELSE, IDENTIFIER("z"), ASSIGN, IDENTIFIER("x")
Statement
IfStatement
KW_IF
Condition
Exp
Term
Factor
LValue
IDENTIFIER("x")
RelOp
LESS
Exp
Term
Factor
NUMBER(0)
KW_THEN
Statement
Assignment
LValue
IDENTIFIER("z")
ASSIGN
Condition
EXP
MINUS
Term
Factor
LValue
IDENTIFIER("x")
KW_ELSE
Statement
Assignment
LValue
IDENTIFIER("z")
ASSIGN
Condition
Exp
Term
Factor
LValue
IDENTIFIER("x")
IfNode
OperatorNode :: bool
LESS_OP
ArgumentsNode
[]
IdentifierNode
"x"
ConstNode :: int
0
AssignmentNode
IdentifierNode
"z"
OperatorNode
UMINUS_OP
IdentifierNode("x")
AssignmentNode
IdentifierNode
"z"
IdentifierNode
"x"
where