summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--tp2-files/Calculatrice-final.jj40
-rw-r--r--tp2.tex92
2 files changed, 66 insertions, 66 deletions
diff --git a/tp2-files/Calculatrice-final.jj b/tp2-files/Calculatrice-final.jj
index 9a03f39..a7ea9f0 100644
--- a/tp2-files/Calculatrice-final.jj
+++ b/tp2-files/Calculatrice-final.jj
@@ -37,47 +37,47 @@ void boucle():
}
// Expression (axiome de la grammaire de la calculatrice)
-// expression → terme ( "+" terme | "-" terme )*
+// expression → term ( "+" term | "-" term )*
double expression():
{ double a,b; }
{
- a=terme()
+ a=term()
(
- "+" b=terme() { a += b; }
- | "-" b=terme() { a -= b; }
+ "+" b=term() { a += b; }
+ | "-" b=term() { a -= b; }
)* { return a; }
}
-// Terme d'une somme ou différence
-// terme → unaire ( "*" unaire | "/" unaire )*
-double terme():
+// Term d'une somme ou différence
+// term → factor ( "*" factor | "/" factor )*
+double term():
{ double a,b; }
{
- a=unaire()
+ a=factor()
(
- "*" b=unaire() { a *= b; }
- | "/" b=unaire() { a /= b; }
+ "*" b=factor() { a *= b; }
+ | "/" b=factor() { a /= b; }
)* { return a; }
}
-// Gestion du "+" et "−" unaires
-// unaire → puissance | "+" puissance | "-" puissance
-double unaire():
+// Gestion du "+" et "−" factors
+// factor → power | "+" power | "-" power
+double factor():
{ double a; }
{
- a=puissance() { return a; }
-| "+" a=puissance() { return a; }
-| "-" a=puissance() { return -a; }
+ a=power() { return a; }
+| "+" a=power() { return a; }
+| "-" a=power() { return -a; }
}
-// Opération puissance (associative à droite)
-// puissance → element ( "^" unaire )?
-double puissance():
+// Opération power (associative à droite)
+// power → element ( "^" factor )?
+double power():
{ double a,b; }
{
a=element()
(
- "^" b=unaire() { a = Math.pow(a,b); }
+ "^" b=factor() { a = Math.pow(a,b); }
)? { return a; }
}
diff --git a/tp2.tex b/tp2.tex
index 7ae17dd..b37af69 100644
--- a/tp2.tex
+++ b/tp2.tex
@@ -169,7 +169,7 @@ Modifier la grammaire pour avoir une priorité correcte des opérations
(\texttt{*} et \texttt{/} doivent être prioritaires sur \texttt{+} et
\texttt{-}, et en particulier \texttt{3+4*5} doit
renvoyer \texttt{23.0}). Pour cela, on peut par exemple introduire un
-nouveau nonterminal $\mathit{terme}$ représentant un terme d'une somme
+nouveau nonterminal $\mathit{term}$ représentant un terme d'une somme
ou différence, et qui est lui-même formé de produits ou quotients.
Tester la calculatrice ainsi modifiée.
@@ -185,17 +185,17 @@ Pour corriger ce problème, on va modifier la grammaire de la manière
suivante :
\[
\begin{aligned}
-\mathit{expression} & \rightarrow \mathit{terme} \;
-( \ldquote\hbox{\texttt{+}}\rdquote \mathit{terme}
-\,|\, \ldquote\hbox{\texttt{-}}\rdquote \mathit{terme}){*}\\
-\mathit{terme} & \rightarrow \mathit{element} \;
+\mathit{expression} & \rightarrow \mathit{term} \;
+( \ldquote\hbox{\texttt{+}}\rdquote \mathit{term}
+\,|\, \ldquote\hbox{\texttt{-}}\rdquote \mathit{term}){*}\\
+\mathit{term} & \rightarrow \mathit{element} \;
(\ldquote\hbox{\texttt{*}}\rdquote \mathit{element}
\,|\, \ldquote\hbox{\texttt{/}}\rdquote \mathit{element}
){*}\\
\end{aligned}
\]
(le reste est inchangé) : ceci forcera l'arbre d'analyse de
-\texttt{3+4*5} à comporter deux $\mathit{terme}$, en l'occurrence
+\texttt{3+4*5} à comporter deux $\mathit{term}$, en l'occurrence
\texttt{3} et \texttt{4*5}, qui s'évalueront dans les bonnes valeurs.
Voici à quoi peut ressembler le code JavaCC modifié pour refléter la
@@ -204,14 +204,14 @@ grammaire en question :
double expression():
{ double a,b; }
{
- a=terme()
+ a=term()
(
- "+" b=terme() { a += b; }
- | "-" b=terme() { a -= b; }
+ "+" b=term() { a += b; }
+ | "-" b=term() { a -= b; }
)* { return a; }
}
-double terme():
+double term():
{ double a,b; }
{
a=element()
@@ -264,35 +264,35 @@ renvoyer \texttt{-3.0}. Vérifier que le moins unaire marche aussi
devant les parenthèses : par exemple, \texttt{-(2+3)} doit
renvoyer \texttt{-5.0}. On pourra aussi ajouter le $+$ unaire (qui ne
change pas le nombre). Pour cela, on pourra introduire un nouveau
-nonterminal $\mathit{unaire}$ représentant un élément éventuellement
+nonterminal $\mathit{factor}$ représentant un élément éventuellement
précédé d'un $-$ (ou d'un $+$) unaire.
\begin{corrige}
On modifie la grammaire comme suit :
\[
\begin{aligned}
-\mathit{terme} & \rightarrow \mathit{unaire} \;
-(\ldquote\hbox{\texttt{*}}\rdquote \mathit{unaire}
-\,|\, \ldquote\hbox{\texttt{/}}\rdquote \mathit{unaire}
+\mathit{term} & \rightarrow \mathit{factor} \;
+(\ldquote\hbox{\texttt{*}}\rdquote \mathit{factor}
+\,|\, \ldquote\hbox{\texttt{/}}\rdquote \mathit{factor}
){*}\\
-\mathit{unaire} & \rightarrow \mathit{element} \;
+\mathit{factor} & \rightarrow \mathit{element} \;
\,|\, \ldquote\hbox{\texttt{+}}\rdquote \mathit{element}
\,|\, \ldquote\hbox{\texttt{-}}\rdquote \mathit{element}\\
\end{aligned}
\]
et le code JavaCC correspondant pourrait être :
\begin{verbatim}
-double terme():
+double term():
{ double a,b; }
{
- a=unaire()
+ a=factor()
(
- "*" b=unaire() { a *= b; }
- | "/" b=unaire() { a /= b; }
+ "*" b=factor() { a *= b; }
+ | "/" b=factor() { a /= b; }
)* { return a; }
}
-double unaire():
+double factor():
{ double a; }
{
a=element() { return a; }
@@ -302,7 +302,7 @@ double unaire():
\end{verbatim}
(Plusieurs variations sont possibles : par exemple, si on fait suivre
-le \texttt{-} unaire d'un $\mathit{unaire}$ au lieu d'un
+le \texttt{-} unaire d'un $\mathit{factor}$ au lieu d'un
$\mathit{element}$, cela permet d'autoriser \texttt{-{}-3} comme façon
d'écrire \texttt{+3}.)
\end{corrige}
@@ -329,37 +329,37 @@ $\hbox{\texttt{2*3\char"5E\relax 2*3}} \rightsquigarrow \texttt{54.0}$.
\begin{corrige}
Pour obtenir l'associativité \emph{à droite}, on va définir un
-nonterminal $\mathit{puissance}$ pour lequel on va définir une
-production faisant qu'une $\mathit{puissance}$ peut s'analyser comme
+nonterminal $\mathit{power}$ pour lequel on va définir une
+production faisant qu'une $\mathit{power}$ peut s'analyser comme
un $\mathit{element}$ suivi d'un ``$\texttt{\char"5E}$'' suivi
-facultativement d'une nouvelle $\mathit{puissance}$, c'est-à-dire
+facultativement d'une nouvelle $\mathit{power}$, c'est-à-dire
qu'on modifie la grammaire ainsi :
\[
\begin{aligned}
-\mathit{unaire} & \rightarrow \mathit{puissance} \;
-\,|\, \ldquote\hbox{\texttt{+}}\rdquote \mathit{puissance}
-\,|\, \ldquote\hbox{\texttt{-}}\rdquote \mathit{puissance}\\
-\mathit{puissance} & \rightarrow \mathit{element}
-( \ldquote\hbox{\texttt{\char"5E}}\rdquote \mathit{unaire}
+\mathit{factor} & \rightarrow \mathit{power} \;
+\,|\, \ldquote\hbox{\texttt{+}}\rdquote \mathit{power}
+\,|\, \ldquote\hbox{\texttt{-}}\rdquote \mathit{power}\\
+\mathit{power} & \rightarrow \mathit{element}
+( \ldquote\hbox{\texttt{\char"5E}}\rdquote \mathit{factor}
){?}\\
\end{aligned}
\]
avec le code JavaCC suivant :
\begin{verbatim}
-double unaire():
+double factor():
{ double a; }
{
- a=puissance() { return a; }
-| "+" a=puissance() { return a; }
-| "-" a=puissance() { return -a; }
+ a=power() { return a; }
+| "+" a=power() { return a; }
+| "-" a=power() { return -a; }
}
-double puissance():
+double power():
{ double a,b; }
{
a=element()
(
- "^" b=unaire() { a = Math.pow(a,b); }
+ "^" b=factor() { a = Math.pow(a,b); }
)? { return a; }
}
\end{verbatim}
@@ -367,18 +367,18 @@ double puissance():
Voici la grammaire finale :
\[
\begin{aligned}
-\mathit{expression} & \rightarrow \mathit{terme} \;
-( \ldquote\hbox{\texttt{+}}\rdquote \mathit{terme}
-\,|\, \ldquote\hbox{\texttt{-}}\rdquote \mathit{terme}){*}\\
-\mathit{terme} & \rightarrow \mathit{unaire} \;
-(\ldquote\hbox{\texttt{*}}\rdquote \mathit{unaire}
-\,|\, \ldquote\hbox{\texttt{/}}\rdquote \mathit{unaire}
+\mathit{expression} & \rightarrow \mathit{term} \;
+( \ldquote\hbox{\texttt{+}}\rdquote \mathit{term}
+\,|\, \ldquote\hbox{\texttt{-}}\rdquote \mathit{term}){*}\\
+\mathit{term} & \rightarrow \mathit{factor} \;
+(\ldquote\hbox{\texttt{*}}\rdquote \mathit{factor}
+\,|\, \ldquote\hbox{\texttt{/}}\rdquote \mathit{factor}
){*}\\
-\mathit{unaire} & \rightarrow \mathit{puissance} \;
-\,|\, \ldquote\hbox{\texttt{+}}\rdquote \mathit{puissance}
-\,|\, \ldquote\hbox{\texttt{-}}\rdquote \mathit{puissance}\\
-\mathit{puissance} & \rightarrow \mathit{element}
-( \ldquote\hbox{\texttt{\char"5E}}\rdquote \mathit{unaire}
+\mathit{factor} & \rightarrow \mathit{power} \;
+\,|\, \ldquote\hbox{\texttt{+}}\rdquote \mathit{power}
+\,|\, \ldquote\hbox{\texttt{-}}\rdquote \mathit{power}\\
+\mathit{power} & \rightarrow \mathit{element}
+( \ldquote\hbox{\texttt{\char"5E}}\rdquote \mathit{factor}
){?}\\
\mathit{element} &\rightarrow \mathit{Number}
\,|\, \ldquote\hbox{\texttt{(}}\rdquote \mathit{expression} \ldquote\hbox{\texttt{)}}\rdquote\\