package cours.compilation; import java.io.*; parser code {: /* Inclus dans la classe "parser" */ String name; parser(String name) { this(); this.name = name; } public void report_error(String msg, Object info) { /*...*/ } :} action code {: /* Inclus dans la classe "action" = classe interne de "parser" */ void WARNING(String msg) { /* ... */ } ; :}; init with {: System.out.println("Exemple"); /* Action initiale */ :} terminal TOK1, TOK2, TOK3 ; terminal int[][] TOK4 ; nonterminal vide, sym1 ; non terminal Integer sym2, sym3; precedence left TOK1, TOK3; precedence right TOK2 ; precedence nonassoc TOK4; start with sym2; sym1 ::= sym1 TOK2 {: /* ... */ :} | TOK1 sym3 ; sym2 ::= /* mot vide */ {: /* Action 0 */ :} | TOK1 {: /* Action 1.1 */ :} sym1 TOK3 {: /* Action 1.2 */ :} ; vide ::= /* rien, c'est deja beaucoup ! */ ; sym3 ::= vide {: RESULT=0; :} ; sym3 ::= TOK4:t sym2:v {: RESULT=t[0][0] + v; :} ;