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

UptoLike

94
В результате вычислений значение выражения оказывается
единственным элементом стека.
Такой алгоритм, выполняющий операции над стеком, лежит
практически в основе любого компилятора. Обычно блок синтаксического
анализа преобразует программу в постфиксную форму, после чего генератор
кода строит объектную программу, просматривая выражения
вышеописанным методом.
Очевидно, что вычисление постфиксной записи выражения не
представляет трудности, преобразование
же инфиксной записи в
постфиксную заметно сложнее. Предположим, что продукция языка имеет
вид
A
B и C
где A, B и C являются нетерминалами, а "и" – терминал. Будем считать,
что знаки операций являются терминалами. Тогда эта продукция означает,
что нетерминал A является инфиксной записью, в которой участвуют
операнды B и C вместе с оператором "и". Следовательно, постфиксная форма
выражения образуется из операндов B, C, за
которыми следует оператор "и".
Таким образом, для данной продукции постфиксная запись имеет вид
Постфиксная запись для B
Постфиксная запись для C
и
Если терминальные символы выводятся в выходной файл в таком
порядке, то все фразы языка будут представлены в постфиксной форме.
Преобразование выражения из инфиксной записи в постфиксную
Части выражения, заключенные
в скобки на самом нижнем уровне
скобочных вложений для данного выражения, должны быть сначала
преобразованы в постфиксную форму, с тем, чтобы их можно было
рассматривать как один операнд. При таком подходе преобразование всего
                                                                                94
       В    результате      вычислений     значение      выражения    оказывается
единственным элементом стека.
       Такой    алгоритм,        выполняющий   операции     над   стеком,   лежит
практически в основе любого компилятора. Обычно блок синтаксического
анализа преобразует программу в постфиксную форму, после чего генератор
кода       строит     объектную       программу,      просматривая    выражения
вышеописанным методом.
       Очевидно, что вычисление постфиксной записи выражения не
представляет        трудности,     преобразование   же    инфиксной    записи   в
постфиксную заметно сложнее. Предположим, что продукция языка имеет
вид
       A→BиC
       где A, B и C являются нетерминалами, а "и" – терминал. Будем считать,
что знаки операций являются терминалами. Тогда эта продукция означает,
что нетерминал A является инфиксной записью, в которой участвуют
операнды B и C вместе с оператором "и". Следовательно, постфиксная форма
выражения образуется из операндов B, C, за которыми следует оператор "и".
Таким образом, для данной продукции постфиксная запись имеет вид
       Постфиксная запись для B
       Постфиксная запись для C
       и
       Если терминальные символы выводятся в выходной файл в таком
порядке, то все фразы языка будут представлены в постфиксной форме.


      Преобразование выражения из инфиксной записи в постфиксную


       Части выражения, заключенные в скобки на самом нижнем уровне
скобочных вложений для данного выражения, должны быть сначала
преобразованы в постфиксную форму, с тем, чтобы их можно было
рассматривать как один операнд. При таком подходе преобразование всего