init with {: System.out.println("calculette vectorielle :"); :} terminal NEWLINE, PARIN, PAROUT, VECTIN, VECTOUT, VECTSEP, DIM; terminal PLUS, MULT, DOT; terminal Integer ENTIER; nonterminal lignes, ligne; nonterminal Integer sexp; nonterminal java.util.List vexp, vconst, vconst1; precedence left PLUS; precedence left MULT; precedence nonassoc DOT; lignes ::= /* vide */ | lignes ligne NEWLINE ; ligne ::= /* vide */ | sexp:a {: System.out.println(" = " + a); :} | vexp:a {: System.out.println(" = " + a); :} | error {: System.out.println(" = ????"); :} ; sexp ::= ENTIER:a {: RESULT=a; :} | sexp:a PLUS sexp:b {: RESULT = a + b; :} | sexp:a MULT sexp:b {: RESULT = a * b; :} | vexp:a DOT vexp:b {: if (a.size() != b.size()) { System.out.println("Erreur Semantique"); RESULT=null; } else { RESULT = 0; for (int i=0; i< a.size(); i++) RESULT += a.get(i) * b.get(i); } :} | PARIN sexp:a PAROUT {: RESULT = a; :} | DIM PARIN vexp:a PAROUT {: RESULT = a.size(); :} ; vexp ::= vconst:a {: RESULT = a; :} | vexp:a PLUS vexp:b {: if (a.size() != b.size()) { System.out.println("Erreur Semantique"); RESULT=null; } else { RESULT = new java.util.ArrayList<>(); for (int i=0; i< a.size(); i++) RESULT.add(a.get(i) + b.get(i)); } :} | sexp:a MULT vexp:b {: RESULT = new java.util.ArrayList<>(); for (int i=0; i< b.size(); i++) RESULT.add(a * b.get(i)); :} | vexp:a MULT sexp:b {: RESULT = new java.util.ArrayList<>(); for (int i=0; i< a.size(); i++) RESULT.add(a.get(i) * b); :} | PARIN vexp:a PAROUT {: RESULT = a; :} ; vconst ::= VECTIN VECTOUT {: RESULT = new java.util.ArrayList<>(); :} | VECTIN vconst1:a VECTOUT {: RESULT = a; :} ; vconst1 ::= sexp:a {: RESULT = new java.util.ArrayList<>(); RESULT.add(a); :} | vconst1:a VECTSEP sexp:b {: RESULT = a; RESULT.add(b); :} ;