import java_cup.runtime.*;
action code {:
int somme = 0;
int quantite, prix;
:}
// section 2: terminaux et non terminaux
// les terminaux sont fournis par jflex
terminal FACTURE, NO, LIB, ENTIER, TOTAL, VIRG, PT;
non terminal facture, lignes, ligne;
start with facture;
// règles de précédences
// section4 : les règles
facture ::= FACTURE
{: System.out.println("Lecture d'une facture"); :}
NO lignes TOTAL ENTIER:n
{:
int total = ((Integer) n).intValue();
System.out.println("Facture terminée");
System.out.println("Somme calculée : " + somme + "\ttotal annoncé : " + total);
if (total == somme)
System.out.println("facture correcte");
else
System.out.println("facture incorrecte");
:}
PT
;
lignes ::= ligne
|
ligne lignes ;
ligne ::= LIB ENTIER:k
{:
quantite = ((Integer)k).intValue();
System.out.print("quantite " + quantite + "\t");
:}
ENTIER:n
{:
prix = ((Integer) n).intValue();
System.out.print("\tprix" + " " + prix + " ");
somme += prix*quantite;
System.out.println("\t" + somme);
:}
VIRG
;