Системное программное обеспечение: Основы трансляции. Карпушин А.Н - 13 стр.

UptoLike

15
Грамматики для арифметических выражений
Для удобства рассмотрим арифметические выражения, использующие
только знаки сложения и умножения. Вначале построим грамматику для выра-
жений без скобок. Такие выражения представляют собой цепочки, которые
можно рассматривать как списки с разделителями, в которых роль разделите-
лей выполняют знаки операций. В результате получаем схему грамматики:
H IR
R W I R | λ
W + | *.
В данной схеме I обозначает идентификатор (определение см. выше).
Чтобы построить грамматику, допускающую использование в арифмети-
ческих выражениях скобок без вложенности, представим структуру таких вы-
ражений в виде списка с разделителями, элементами которого являются выра-
жения без скобок или выражения без скобок, заключенные в скобки. Раздели-
телями этого списка являются знаки операций. Такой структуре соответствует
следующая схема грамматики:
G HQ
G (H)Q
Q WG | λ.
Для построения грамматики арифметических выражений, допускающих
применение вложенных скобок, следует предусмотреть возможность использо-
вания в качестве элемента списка не только выражения без скобок, но и выра-
жения, в котором могут быть использованы скобки. Схема грамматики, учиты-
вающая эту возможность, может быть записана в виде:
E GP | (E)P
P WE | λ.
Грамматика для описаний
Рассмотрим построение грамматики для описания целых и вещественных
переменных. Описание переменных должно начинаться указателем типа, при-
чем описания переменных определенного типа могут повторяться. В качестве
разделителя описаний переменных разных типов примем точку с запятой, а в
качестве разделителя переменных одного типазапятую. Структуру полного
описания можно представить в виде двух вложенных списков с разделителями.
Внутренний список, рассматриваемый как элемент внешнего списка, представ-
ляет собой описание переменных одного типа. Он имеет заголовок в виде ука-
зателя типа, за которым следует последовательность идентификаторов, разде-
ленных запятыми. Внешний список использует в качестве разделителя точку с
запятой. Схема грамматики рассматриваемого вида может быть записана так:
Z A2
A2 B1 C1
C1 ; B1 C1 | λ
B1 real L | int L
L I K
K , I K | λ.