tree grammar LolSharpGen; options { language=CSharp; output=template; tokenVocab=LolSharp; ASTLabelType=CommonTree; } program : ^(PROGRAM ^(USINGDECLS (imports+=using_decl)*) (blocks+=block)+) -> program(import={$imports}, statement={$blocks}) ; block : (stmts+=statement)+ -> echo_string(str={$stmts}) ; statement : print_statement -> {$print_statement.st} | var_decl -> {$var_decl.st} | assignment -> {$assignment.st} ; var_decl: ^(VARIABLE_DECLARATION ID expression?) -> declare_variable(id={$ID}, type={"object"}) ; assignment : ^(ASSIGN lh_expression expression) -> assignment(left={$lh_expression.st}, right={$expression.st}) ; expression : literal_expression -> {$literal_expression.st} | ^(VARIABLE_REFERENCE ID) -> echo_string(str={$ID.text}) ; lh_expression : ^(VARIABLE_REFERENCE ID) -> echo_string(str={$ID.text}) ; literal_expression : literal_string -> {$literal_string.st} | literal_int -> {$literal_int.st} | literal_float | literal_boolean ; using_decl : ^(USING ID) -> using(id={$ID}) ; print_statement : ^(PRINT expression) -> print(txt={$expression.st}) ; literal_string : ^(LITERAL_STRING RAW_QUOTED_STRING) -> echo_string(str={$RAW_QUOTED_STRING.text}) ; literal_int : ^(LITERAL_INT s='-'? DIGITS) -> echo_string(str={($s == null?"":"-") + $DIGITS.ToString()}) ; literal_float : ^(LITERAL_FLOAT s='-'? lit=LITERAL_FLOAT_SEQ) -> echo_string(str={$s.ToString() + $lit.ToString()}) ; literal_boolean : LITERAL_FALSE -> echo_string(str={"false"}) | LITERAL_TRUE -> echo_string(str={"true"}) ;