init with {: System.out.println("Mon compilo C"); :} action code {: void DEBUG(String s) {System.out.println(s);} :} terminal TYPE, IDENT, SEMI, UNK; nonterminal programme, declaration; terminal LPAR, RPAR, LBRACE, RBRACE; terminal LITTERAL, AFFECT, OPBIN; terminal WHILE; nonterminal bloc, list_instr, instr; nonterminal instr_while, expr; terminal COMMA, INCREMENT, IF, ELSE, FOR; nonterminal list_var, var_dec, formal, params; nonterminal instr_if, instr_for; precedence left OPBIN; precedence nonassoc ELSE; programme ::= /* vide */ | programme declaration {: :} ; declaration ::= TYPE list_var SEMI {: DEBUG("variables"); :} | TYPE IDENT LPAR formal RPAR bloc {: DEBUG("fonction"); :} | TYPE IDENT LPAR RPAR bloc {: DEBUG("fonction0"); :} ; list_var ::= var_dec | list_var COMMA var_dec ; var_dec ::= IDENT | IDENT AFFECT expr ; formal ::= TYPE IDENT | formal COMMA TYPE IDENT ; bloc ::= LBRACE list_instr RBRACE {: DEBUG("bloc"); :} ; list_instr ::= /* vide */ | list_instr instr {: DEBUG("instruction"); :} ; instr ::= bloc | SEMI | expr SEMI | instr_while | instr_if | instr_for ; expr ::= LITTERAL | IDENT | expr OPBIN expr | LPAR expr RPAR | IDENT AFFECT expr | IDENT LPAR params RPAR | IDENT LPAR RPAR | IDENT INCREMENT ; params ::= expr | params COMMA expr ; instr_while ::= WHILE LPAR expr RPAR instr {: DEBUG("while"); :} ; instr_if ::= IF LPAR expr RPAR instr {: DEBUG("if"); :} | IF LPAR expr RPAR instr ELSE instr {: DEBUG("ifelse"); :} ; instr_for ::= FOR LPAR expr SEMI expr SEMI expr RPAR instr {: DEBUG("for"); :} ;