%{ {* DESBIENDRAS Anne et BULTELLE Cedric , groupe 3 *} var code : integer ; function rechercher ( s : string ; var place : integer ) : boolean ; {*fonction qui recherche la chaine de caractere s dans la table*} var i : integer ; res : boolean ; begin i := 0 ; res := false ; while i <= longueur do begin if s = table [i].nom then begin res := true; place := i; end; i := i + 1 ; end; rechercher := res ; end; function ranger ( s : string ) : boolean ; {*fonction qui range la chaine de caractere s dans la table*} var i : integer ; begin if rechercher ( s , i ) then ranger := false else begin longueur := longueur + 1; table [longueur].nom := s ; ranger := true ; end; end; %} %% [ \t\n] ; programme return ( programme ); variables return ( variables ); entier return ( entier ); tableau return ( tableau ); si return ( si ); alors return ( alors ); sinon return ( sinon ); tantque return ( tantque ); faire return ( faire ); ecrire return ( ecrire ); lire return ( lire ); retourne return ( retourne ); fin return ( fin ); ou begin yylval.yyinteger := OU ; return ( opadd ); end; et begin yylval.yyinteger := ET ;return ( opmult );end; non begin yylval.yyinteger := LNEG ;return ( non );end; "+" begin yylval.yyinteger := ADD ; return ( opadd ); end; "*" begin yylval.yyinteger := MUL ;return ( opmult );end; "=" begin yylval.yyinteger := EQU ;return ( oprel );end; "<=" begin yylval.yyinteger := LEQ ;return ( oprel );end; ">=" begin yylval.yyinteger := GEQ ;return ( oprel );end; "<" begin yylval.yyinteger := LES ;return ( oprel );end; ">" begin yylval.yyinteger := GRT ;return ( oprel );end; "<>" begin yylval.yyinteger := NEQ ;return ( oprel );end; [+-]?[0-9]+ begin val ( yytext , yylval.yyinteger , code ); if code = 0 then return ( nb ) else begin writeln(yytext,' : erreur ,ceci n est pas un entier ( ligne n ',yylineno, ' )');halt end; end; [A-Za-z][A-Za-z0-9]* begin if recherche then begin if rechercher ( yytext , yylval.yyinteger ) then return ( id ) else begin writeln( yytext ,' : Identificateur inconnu (ligne : ' , yylineno ,' )');halt end; end else begin if ranger ( yytext ) then begin yylval.yyinteger := longueur ; return ( id ); end else begin writeln(yytext,' : Identificateur duplique ( ligne n ', yylineno,' )');halt end; end; end; ":=" return( affect ); "-"|"("|")"|"["|"]"|":"|";" returnc ( yytext[1] ); . begin writeln(' Fin de fichier inattendue ( ligne n ',yylineno,' )');halt end; %%