/* =========================================================================== */ /* programme principal */ /* =========================================================================== */ PARSER_BEGIN(Expressions1) public class Expressions1 { public static void main(String args[]) throws ParseException { Expressions1 parser = new Expressions1(System.in); int val = parser.Expressions1(); System.out.println() ; System.out.println("syntaxe correcte !") ; System.out.println() ; System.out.println("la valeur de l'expresssion est : " + val) ; } } PARSER_END(Expressions1) /* =========================================================================== */ /* definition des lexèmes */ /* =========================================================================== */ SKIP : // les séparateurs de lexème { " " | "\t" | "\n" } TOKEN : // les lexèmes { < plus: "+" > | < mult: "*" > | < parg: "(" > | < pard: ")" > | < idf: (["0"-"9"] | )* > | < entier: ["1"-"9"] (["0"-"9"])* > | < lettre: ["A"-"Z"] | ["a"-"z"] > } /* =========================================================================== */ /* definition de la grammaire */ /* =========================================================================== */ // Expressions -> E int Expressions1() : { int val; } { val = E() {return val;} } // E -> T X // X -> + T X | epsilon int E() : { int val; int i; } { i = T() val = X(i) {return val;} } int X(int i) : { int val; int j; } { j = T() val = X(i+j) {return val;} | {return i;} } // T -> F Y // Y -> * F Y | epsilon int T() : { int val; int i; } { i=F() val=Y(i) {return val;} } int Y(int i) : { int val; int j; } { j = F() val = Y(i*j) {return val;} | {return i;} } // F -> idf | entier | (E) int F() : { Token t; int val; } { t= {return Integer.parseInt(t.image);} | val=E() {return val;} }