Master 1 – Compilation
Correction facture
Fichier jflex
import java_cup.runtime.*;
%%
%unicode
%line
%cup
%eof{
System.out.println("\nTerminé ");
%eof}
chiffre = [0-9]
entier = {chiffre}+
bl = [ \t]
lettre = [a-z]
lib = {lettre}+
%%
{bl} { ; }
\n { ; }
\, { return new Symbol(sym.VIRG); }
\. { return new Symbol (sym.PT); }
FACTURE { return new Symbol(sym.FACTURE); }
TOTAL { return new Symbol(sym.TOTAL); }
NO{chiffre}{3} { return new Symbol(sym.NO); }
{lib} { return new Symbol(sym.LIB); }
{entier} { return new Symbol(sym.ENTIER, new Integer(yytext())); }
. { return new Symbol(sym.error); }
fichier cup
// section 1: setup et code utilisateur
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
;
1 / 3 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !