Формальные языки, грамматики и основы построения трансляторов. Кревский И.Г - 100 стр.

UptoLike

100
стека, должна быть выполнена первой. Следовательно, она извлекается из
стека и помещается в выходную строку, а текущий рассматриваемый символ
сравнивается со следующим элементом, занимающим теперь вершину стека,
и т. д. Помещая во входную строку скобки, можно изменить
последовательность вычислений. Так, при обнаружении левой скобки она
записывается в стек. При обнаружении соответствующей
ей правой скобки
все операции между этими скобками помещаются в выходную строку,
поскольку они выполняются прежде любых других операций,
расположенных за этими скобками.
Постфиксная запись операторов (IF и др.)
Ясно, что постфиксная запись для выражений формируется достаточно
просто. Для операторов этот процесс выполняется сложнее. Рассмотрим его
на примере оператора IF, синтаксис
которого задан следующей
конструкцией:
<IF_STMT> ::= IF <ВЫРАЖЕНИЕ> THEN
<СПИСОК ПРЕДЛОЖЕНИЙ>
{ELSE <СПИСОК ПРЕДЛОЖЕНИЙ>}
END
Фигурные скобки здесь являются метасимволами, обозначающими
необязательность конструкции. Чтобы выполнить это предложение,
необходимо оценить выражение и, если его значение ложно, передать
управление группе операторов, следующих за словом ELSE (если оно есть),
или в конец предложения, отмеченный словом END. Однако ключевые слова
ELSE
или END еще не прочитаны на данном этапе анализа, и поэтому мы не
располагаем точным указанием места, куда следует передать управление.
Эту трудность можно преодолеть, если определить точку передачи
управления. Мы отметим эту точку так называемой системной меткой и на
текущем этапе разбора поместим имя этой метки в постфиксную запись
непосредственно за
выражением. Когда в тексте программы встретится
                                                                               100
стека, должна быть выполнена первой. Следовательно, она извлекается из
стека и помещается в выходную строку, а текущий рассматриваемый символ
сравнивается со следующим элементом, занимающим теперь вершину стека,
и    т.    д.   Помещая   во   входную    строку    скобки,    можно     изменить
последовательность вычислений. Так, при обнаружении левой скобки она
записывается в стек. При обнаружении соответствующей ей правой скобки
все операции между этими скобками помещаются в выходную строку,
поскольку       они    выполняются     прежде      любых      других     операций,
расположенных за этими скобками.


                   Постфиксная запись операторов (IF и др.)


          Ясно, что постфиксная запись для выражений формируется достаточно
просто. Для операторов этот процесс выполняется сложнее. Рассмотрим его
на    примере      оператора   IF,   синтаксис    которого    задан     следующей
конструкцией:
                  ::= IF <ВЫРАЖЕНИЕ> THEN
                 <СПИСОК ПРЕДЛОЖЕНИЙ>
                 {ELSE <СПИСОК ПРЕДЛОЖЕНИЙ>}
                 END
          Фигурные скобки здесь являются метасимволами, обозначающими
необязательность      конструкции.    Чтобы      выполнить    это     предложение,
необходимо оценить выражение и, если его значение ложно, передать
управление группе операторов, следующих за словом ELSE (если оно есть),
или в конец предложения, отмеченный словом END. Однако ключевые слова
ELSE или END еще не прочитаны на данном этапе анализа, и поэтому мы не
располагаем точным указанием места, куда следует передать управление.
          Эту трудность можно преодолеть, если определить точку передачи
управления. Мы отметим эту точку так называемой системной меткой и на
текущем этапе разбора поместим имя этой метки в постфиксную запись
непосредственно за выражением. Когда в тексте программы встретится