inf: List): Byte;
Var j: Byte;
Ex: Boolean;
Begin
If l <> Nil Then
Begin
j: = 1;
While (L <> Nil) and (n <> j) Do
Begin
If l ^. Name = # 0 Then inc (j);
l: = l ^. Next;
End;
Ex: = False;
While (L <> nil) and (l ^. Name <> inf.Name) and Not Ex Do
Begin
inc (j);
If l ^. Name = # 0 Then Ex: = True;
l: = l ^. next;
End;
End;
If (l = Nil) or Ex Then SearchInBlock: = 0
Else SearchInBlock: = j;
End;
Procedure InsListInBlock (n: Byte; l: NotTerm; x, d: List);
Var q: NotTerm;
j: Byte;
Begin
If l = Nil Then WriteLN ('Увага! Внутрішня помилка 03')
Else
Begin
j: = 1;
While (L <> Nil) and (n <> j) Do
Begin
If l ^. Name = # 0 Then inc (j);
l: = l ^. Next;
End;
While (L <> Nil) and (l ^. Name <> x.Name) Do
l: = l ^. Next;
If l <> Nil Then
Begin
new (q);
q ^. Name: = d.Name;
q ^. Next: = l ^. Next;
l ^. Next: = q;
End;
End;
End;
Procedure Add_ (ListLR: NotTerm);
Var tmp, p: NotTerm;
tmp2: NotTerm;
tmpName: Str10;
y, j: Byte;
inf: List;
inf2: List;
Begin
y: = 1;
tmp: = ListLR; {список з роздільниками}
p: = tmp;
Repeat
{шукаємо нетермінал (у лівих чи правих)}
tmp: = p;
tmp2: = NotTerminalL;
While (Tmp <> Nil) and (Pos ('<', tmp ^. Name) <> 1) Do
Begin
If tmp ^. Name = # 0 Then inc (y);
tmp: = tmp ^. Next;
End;
If tmp = Nil Then p: = Nil
Else If tmp ^. Next <> Nil Then
p: = tmp ^. Next {зберігаємо позицію покажчик на наступний}
Else p: = Nil;
tmpName: = tmp ^. Name;
i: = 1;
{шукаємо tmpName в правих чи лівих}
If tmp <> Nil Then Seek (tmpName, ListLR, tmp);
{tmp вказує на елемент з якого потрібно почати додавати}
inf2.Name: = tmpName;
While (Tmp <> Nil) and (tmp ^. Name <> # 0) Do
Begin
inf.Name: = tmp ^. Name; {! потрібно перевірити на повторювані!}
If SearchInBlock (y, ListLR, inf) = 0 Then
InsListInBlock (y, ListLR, inf2, inf);
tmp: = tmp ^. Next;
End;
Until p = Nil;
End;
Var tmp: List;
term: String;
Label More, Next;
Begin
{припускаємо що граматика не містить помилок}
{аналіз граматики без відслідковування помилок}
y: = 1;
i: = 1;
Repeat
PosStr (y, s);
Blank;
i: = Pos ("=", S) +1; {i ставимо після: =}
More: Blank;
If s [i] = '<' Then
Begin
inc (i...