Blank;
Goto OrS; {може бути знак АБО}
End
Else
Begin
Error (2); {немає>}
Goto New;
End
End
Else
Begin
Error (4); {немає нетермінала, але <є}
Goto New;
End
End
Else {термінал}
If Terminal (term) Then {записуємо термінал}
Begin
NotT.Name: = term;
If Search (Trm_NotTrm, NotT) = 0 Then
Begin
Complete (Trm_NotTrm, NotT); {в загальний список теміналі & нетерміналов}
inc (CTrmNotTrm);
End;
Blank;
Goto OrS;
End
Else
Begin
Error (8); {немає нетермінала або терміналу}
Goto New;
End;
OrS: If i> Len Then Goto Gluk; {обходимо глюк}
If s [i] = '|' Then {знак АБО}
Begin
inc (i);
Goto notTerminalOrTerminal
End
Else {знака АБО немає}
Begin
Blank;
If i> Len Then {кінець рядка?} p> Gluk: If y
Begin
{Следующ. стр}
inc (y);
posStr (y, s);
If s ='' Then Goto EndS;
i: = 1;
Goto LineS;
End
Else {кінець файлу}
Goto EndS
Else Goto notTerminalOrTerminal; {знака АБО немає}
End;
End;
End;
End;
End;
EndS:
{перевірка нетерміналов}
tmp: = NotTerminalL ^. Next; {пропускаємо перший}
exist: = True;
y: = 2;
While (Tmp <> Nil) and Exist Do
Begin
NotT: = tmp ^;
Exist: = Search (NotTerminalS, NotT)> 0;
tmp: = tmp ^. Next;
inc (y);
End;
dec (y);
i: = 1;
While (i <= y) Do
Begin {позіціаніруем на потрібний рядок}
{в s рядок з помилкою}
posStr (y, s);
inc (i);
End;
If not Exist Then {закинутий нетермінал}
Begin
i: = 1;
Error (7);
Goto New;
End;
{----------------}
tmp: = NotTerminalS;
exist: = True;
While (Tmp <> Nil) and Exist Do
Begin
NotT: = tmp ^;
Exist: = Search (NotTerminalL, NotT)> 0;
tmp: = tmp ^. Next;
End;
If not Exist Then {невизначений нетермінал}
Begin
i: = 1;
y: = 0;
Ex: = False;
While not Ex Do
Begin {позіціаніруем на потрібний рядок}
inc (y);
PosStr (y, s); {в s рядок з помилкою}
i: = Pos (NotT.name, s);
Ex: = i> 0;
End;
Error (6);
Goto New;
End;
Window (5,21,59,25);
TextColor (15);
TextBackGround (1);
WriteLN (Errors [0]);
readkey;
End;
Procedure SearchLR;
Function SearchInBlock (n: Byte; l: NotTerm; ...