init with {: System.out.println("Calculatrice non ambiguë"); prompt(); :} parser code {: static void prompt() { System.out.print("> "); } static int eval( Integer e1, Character op, Integer e2) { switch (op) { case '+' : return e1 + e2; case '-' : return e1 - e2; case '*' : return e1 * e2; case '/' : return e1 / e2; case '%' : return e1 % e2; default : System.out.println("Operateur inconnu :" +op); return 0; } } :} terminal NL, LPAR, RPAR, COMMA, FMIN, FMAX; terminal Integer ENTIER; terminal Character OPBIN; nonterminal lignes, ligne; nonterminal Integer expr, args; lignes ::= /* vide */ {: :} | lignes ligne {: prompt(); :} NL ; ligne ::= expr:e {: System.out.println(" = " + e); :} | /* vide */ {: :} | error {: /* msg ? */ :} ; expr ::= ENTIER:e {: RESULT = e; :} | LPAR expr:e RPAR {: RESULT = e; :} | LPAR expr:e1 OPBIN:op expr:e2 RPAR {: RESULT = eval(e1, op, e2); :} | FMIN LPAR expr:e1 COMMA expr:e2 RPAR {: RESULT = (e1>e2)?e2:e1; :} | FMAX LPAR args:e RPAR {: RESULT = e; :} ; args ::= expr:e {: RESULT = e; :} | args:e1 COMMA expr:e2 {: RESULT = (e1>e2)?e1:e2; :} ;