TP de compilation : une solution de l'exercice 1 du TP 5
1.2.
– Modification de l'analyseur de l'exercice 2 / question 3 du TP4
fichier-lex :
%{
#include "y.tab.h"
%}
%%
a return(lettrea);
b return(lettreb);
\n return(finligne);
.
{ printf("%s: caractère inconnu\n",yytext); exit (-1); }
fichier-yacc:
%token lettrea lettreb finligne
%%
MOT : S finligne
{ printf("mot accepté\n"); return 0; }
| error finligne
{ printf("mot refusé\n"); return 1; }
;
S : lettreb T
| lettrea W
;
T : lettrea U
| lettreb S
|
;
U : lettrea T
| lettreb W
;
W : lettrea S
| lettreb U
;
%%
yyerror() {;}
main() {while (yyparse()>=0);}
– Modification des analyseurs de l'exercice 3 du TP4 :
1°)
fichier-lex:
%{
#include "y.tab.h"
%}
%%
a return(lettrea);
b return(lettreb);
"(" return(ouvrante);
")" return(fermante);
\n return(finligne);
.
{ printf("%s: caractère inconnu\n",yytext); exit(-1); }
fichier-yac:
%token lettrea lettreb
%token ouvrante fermante
%token finligne
%left lettrea lettreb
%left ouvrante fermante
%%
LIGNE : T finligne
{ printf("accepté\n"); return 0; }
| error finligne
{ printf("refusé\n"); return 1; }
;
T : lettrea T
| lettreb T
| T ouvrante T fermante T
|
;
%%
yyerror() {;}
main() {while (yyparse()>=0);}
2°)
fichier-lex:
%{
#include "y.tab.h"
%}
%%
a return(lettrea);
b return(lettreb);
c return(lettrec);
d return(lettred);
\n return(finligne);
. { printf("%s: caractère inconnu\n",yytext); exit(-1); }
fichier-yacc:
%token lettrea lettreb lettrec lettred
%token finligne
%left lettrea lettreb
%%
LIGNE : S finligne { printf("accepté\n");
return 0; }
| error finligne
{ printf("refusé\n"); return 0; }
;
S : A B
;
A : lettrea
| lettrea T lettrea
;
B : lettreb
| lettreb T lettreb
;
T : lettrec
| lettred
| S
;
%%
yyerror(){;}
main(){while (yyparse()>=0);}
© 2000, 2017 – A. Sigayret