Bonjour, après un mois ou plus passé , j'ai pus avancé ( juste un tout petit peu ) , j'ai pus compiler et exécuter lex avec glyd (generé .pas) et turbo pascal enfin on m'a aidé .
cet exemple :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| %{
uses lexlib,crt;
%}
lettre [a-zA-Z]
chiffre [0-9]
%%
{chiffre} writeln('chiffre');
{lettre} writeln('lettre');
%%
begin
clrscr;
writeln('Analyseur lexicale');
writeln(' ENTRER L''EXPRESSION QUE VOUS VOULEZ ANALYSER S''IL VOUS PLAIT ');
writeln;
yylex;
end. |
maintenant pour le yacc je voulais faire la même manipulation sur cet exemple que j'ai trouvé
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
| %{
uses YaccLib, LexLib, crt;
var x : array [1..30] of Real;
%}
%token <Real> NUM
%token <Integer> ID
%type <Real> expr
%left '+' '-'
%left '*' '/'
%right UMINUS
%token ILLEGAL
%%
input :'\n' { yyaccept; }
|expr '\n' { writeln('Analyse synthaxiqument correct'); writeln; writeln('Le resultat est de :',$1:10:2); yyaccept; }
|ID '=' expr '\n' { writeln('Analyse synthaxiqument correct'); writeln; x[$1] := $3; yyaccept; writeln($3:10:2); }
|NUM '=' expr '\n' { writeln('Analyse synthaxiqument correct'); writeln; $1 := $3; yyaccept; writeln($3:10:2); }
| error '\n' { yyerrok; exit; }
;
expr : expr '+' expr { $$ := $1 + $3; }
| expr '-' expr { $$ := $1 - $3; }
| expr '*' expr { $$ := $1 * $3; }
| expr '/' expr { $$ := $1 / $3; }
| '(' expr ')' { $$ := $2; }
| '-' expr { $$ := -$2; }
| NUM { $$ := $1; }
| ID { $$ := x[$1]; }
;
%%
{$I tp1}
var i : Integer;
begin
clrscr;
writeln;
writeln('Analyseur Syntaxique');
writeln(' ENTREz L''EXPRESSION QUE VOUS VOULEZ ANALYSER S''IL VOUS PLAIT ');
writeln;
for i := 1 to 30 do x[i] := 0.0;
if yyparse=0 then {done};
repeat until KeyPressed;
end. |
mais arrivé a turbo pascal ça me donne cette erreur
erreur 15: file not found sysutils.TPU.
.
1. j'ai quelques questions est ce que l'exemple de yacc est juste?
2. %right UMINUS , %token ILLEGAL , writeln($3:10:2); ça veut dire quoi?
3. c'est pourquoi faire
1 2 3 4
| for i := 1 to 30 do x[i] := 0.0;
if yyparse=0 then {done};
repeat until KeyPressed; |
3. comment corrigé l'erreur file note found ?
je vous remercie
Partager