Методические указания к лабораторным работам по курсу "Теория вычислительных процессов и структур". Домашова Д.В - 14 стр.

UptoLike

Синтаксический анализатор для этой грамматики
Procedure S;
Begin A; {распознать А}
B; {распознать B}
If CH <> `` then ER
End;
Procedure A;
Begin if CH=`a` then GC else
If CH=`c` then begin GC; A end else ER
Procedure B;
Begin
If CH=`b` then begin GC; A end else ER
End;
End;
3.2 Синтаксический анализатор для языкa MPL
П е р е м е н н а я:
LEX лексема.
П р о ц е д у р ы:
GL считывание очередной лексемы в переменную LEX;
ERR(rule) обнаружение синтаксической ошибки.
Логические ф у н к ц и и:
ID LEX - идентификатор?
NUM. LEX -число?
EQ(S) LEX - лексема для S?
Процедуры, проверяющие выполнение правил, описывающих язык
MPL и составляющие синтаксический анализатор:
1) Р:: program D ; В.
procedure Р;
begin if EQ(`program`) then GL else ERR (rpl);
D1;
if EQ(`.`) then GL else ERR (rp2);
B;
if not EQ(`.`) then ERR (rp3);
end;
2) D`::=var D{,D}
procedure D1;
begin if EQ(`var`) then GL else ERR (rdl)
D;
While EQ(`.`)do begin GL; D end
17
     Синтаксический анализатор для этой грамматики
     Procedure S;
      Begin A; {распознать А}
            B; {распознать B}
            If CH <> `⊥` then ER
      End;
     Procedure A;
      Begin if CH=`a` then GC else
            If CH=`c` then begin GC; A end else ER

     Procedure B;
      Begin
            If CH=`b` then begin GC; A end else ER
      End;
      End;

3.2 Синтаксический анализатор для языкa MPL

     П е р е м е н н а я:
     LEX лексема.
     П р о ц е д у р ы:
     GL считывание очередной лексемы в переменную LEX;
     ERR(rule) обнаружение синтаксической ошибки.
     Логические ф у н к ц и и:
     ID LEX - идентификатор?
     NUM. LEX -число?
     EQ(S) LEX - лексема для S?
     Процедуры, проверяющие выполнение правил, описывающих   язык
MPL и составляющие синтаксический анализатор:
    1) Р:: program D ; В.
        procedure Р;
        begin if EQ(`program`) then GL else ERR (rpl);
        D1;
        if EQ(`.`) then GL else ERR (rp2);
        B;
        if not EQ(`.`) then ERR (rp3);
        end;
    2) D`::=var D{,D}
        procedure D1;
        begin if EQ(`var`) then GL else ERR (rdl)
        D;
        While EQ(`.`)do begin GL; D end

                                                                    17