И группы из трех символов
( <выр> )
В грамматике есть также несколько правил с одной левой частью и с правыми частями разного рода, например <оствыр> ‑> + <выр> <оствыр> ‑>
Эти ограничения не являются принципиальными. Так, правило типа
K -> L M №
можно было бы заменить на два правила K -> LQ и Q -> MN, терминальные символы в правой части —на нетерминалы (с едиственным правилом замены на соответствующие терминалы). Несколько правил с одной левой частью и разнородными правыми также можно свести к уже разобранному случаю: например,
K -> L M №
K -> P Q
K ->
Можно заменить на правила
K ‑> K1
K ‑> K2
K ‑> K3
K1 -> L M №
K2 -> P Q
K3 ->
Но мы не будем этого делать —а сразу же запишем то, что получится, если подставить описания процедур для новых терминальных символов в места их использования. Например, для правила
K -> L M №
Это дает процедуру
Procedure ReadK;
Begin
| ReadL;
| if b then begin ReadM; end;
| if b then begin ReadN; end;
End;
Для ее корректности надо, чтобы Посл(L) не пересекалось с Нач(MN) (которое равно Нач(M), если из M не выводится пустое слово, и равно объединению Нач(M) и Нач(N), если выводится), а также чтобы Посл(M) не пересекалось с Нач(N).
Аналогичным образом правила
K -> L M №
K -> P Q
K ->
Приводят к процедуре
Procedure ReadK;
Begin
| if (Next принадлежит Нач(LMN)) then begin
| | ReadB;
| | if b then begin ReadM; end;
| | if b then begin ReadN; end;
| end else if (Next принадлежит Нач(PQ)) then begin
| | ReadP;
| | if b then begin ReadQ; end;
| end else begin
| | b := true;
| end;
End;
Читая приведенную далее программу, полезно иметь в виду соответствие между русскими и английскими словами:
Дата добавления: 2015-10-05; просмотров: 666;