Analyse syntaxique

 

 

       Fragment de l'analyseur syntaxique   

 

  Voici un fragment de la procédure de l'analyseur syntaxique

  correspondant aux instructions :

 

          BEGIN  

            IF Syn =1  THEN GOTO Et1;   { Identificateur }

            IF Syn = 15  THEN GOTO Et2; { Tantque }

            IF Syn = 17  THEN GOTO Et3; { Si }

            IF Syn = 26 THEN GOTO Et4;  { Allouer, liberer, fermer }

            IF Syn = 20 THEN GOTO Et5;  { Lire }

            IF Syn = 19 THEN GOTO Et6;  { Ecriture }

            IF Syn = 35 THEN GOTO Et7;  { Creer_mcar }

            IF Syn = 31 THEN GOTO Et8;  { Aff_element }

            IF Syn = 39 THEN GOTO Et9;  { Creer_liste, Init_vect, Init_struct}

            IF Syn = 47 THEN GOTO Et10; { Pour }

            IF Syn = 50 THEN GOTO Et11; { Aff_adr, Aff_val }

            IF Syn = 51 THEN GOTO Et12; { Appel }

            IF Syn = 28 THEN GOTO Et13; { Lirecar, Lirenombre, lireseq, ecrireseq, rajouter}

            IF Syn = 30 THEN GOTO Et14; { Aff_struct, Aff_entete, Liredir, Ecriredir }

            IF Syn = 56 THEN GOTO Et15; { Ouvrir }

 

            Et1:   Check (1, 0); { Affectation }

            IF Syn <> 13

            THEN P2(8)

            ELSE

              BEGIN

                Check (13, 0);

                Expr;

               END;

            GOTO Fin;

 

            Et2: Check(15, 0);  { Tantque }

            Expr;

            IF Syn = 10 THEN Check(10, 0); { ':' Facultatif }

            Lis;

            Check (16, 4);

            GOTO Fin;

 

            Et3 : Check(17, 0);  { Si }

            Expr;

            IF Syn = 10 THEN Check(10, 0);

            Lis;

            IF Syn = 21

            THEN

              BEGIN

                Check(21, 0);

                Lis;

              END;

            Check(24, 5);

            GOTO Fin;

 

            Et4 : Check(26, 0); { Liberer, Allouer, fermer }

            Check(7, 1);

            Expr;

            Check(8, 3);

            GOTO Fin;

 

          Et5 :

            Check(20, 0) ; { Lire }

            Check(7, 1);

            Check(1, 7);

            WHILE Syn = 9 DO

              BEGIN

                Check(9, 0);

                Check(1, 0);

              END;

            Check(8, 3);

            GOTO Fin;

 

          Et6 :

            Check(19, 0) ; { Ecrire }

            Check(7, 1);

            Expr;

            WHILE Syn = 9 DO

              BEGIN

                Check(9, 0);

                Expr;

              END;

 

            Check(8, 3);

            GOTO Fin;

 

          Et7 :

            Check(35, 0); { Creer_mcar }

            Check(7, 1);

            Check(1, 7);

            Check(9, 6);

            Check(37, 17);

            Check(25, 13);

            Check (38, 18);

            Check(8, 3);

            GOTO Fin;

 

          Et8 :

            Check(31, 0);  { Aff_element ( Exp [ Listexp ], Exp   ) }

            Check(7, 1);

            Expr;

            Check(37, 17);

            Expr;

            WHILE Syn = 9 DO

              BEGIN

                Check(9, 0);

                Expr;

              END;

            Check (38, 18);

            Check(9, 6);

            Expr;

            Check(8, 3);

            GOTO Fin;

 

          Et9 .....

 

 

          Fin :

        END

 

      END;