Построение восходящих преобразователей, так же как в рассмотренном
выше случае, выполняется на основе распознавателя путем модификации команд
за счет выполнения операции передачи выходных символов. Одно
из отличий построения восходящих преобразователей заключается в том, что
для их построения должна быть использована транслирующая грамматика в постфиксной
форме.
Определение. Транслирующая грамматика, записанная в форме, когда все символы действия в правых частях расположены правее всех терминальных и нетерминальных символов, называется постфиксной транслирующей грамматикой. |
Г4.4 : <I> ®
<S><R>,
<S> ® a{a},
<R> ® <P><R>,
<P> ® +a{a}{+},
<R> ® <Q><R>,
<Q> ® -a{a}{-},
<R> ® $.
Напомним, что при построении восходящих распознавателей обработка
каждого правила A
<A> ® ax
с номером k с символом x, занимающим самую правую позицию в правой части
правила, связывалась операция Свертка(k).
В постфиксной транслирующей грамматике самую правую позицию могут
занимать символы действия, поэтому при построении восходящего преобразователя
эти символы можно объединить с операцией свертки в одну операцию,
которую назовем
Свертка - Действие(k) (СД(k)). Учитывая,
что все символы действия постфиксной транслирующей грамматики могут быть
объединены с операциями свертки, приходим к заключению, что
процедура построения восходящего распознавателя может быть применена для
построения восходящего преобразователя при условии, что вместо операции
Cвертка
(k) будет использоваться операция
Свертка
- Действие(k) для правил построения постфиксной
транслирующей грамматики, содержащая символы действия.
В качестве иллюстрации последнего утверждения
рассмотрим построение преобразователя для грамматики Г
4.
3. Выполняя последовательно шаги процедуры построения
SLR(1) преобразова-
теля для грамматики с аннулирующими правилами и заменяя операции
Свертка(k)
для правил 2, 4 и 6 операциями
Свертка -
Действие(k), получаем таблицы переходов и действий искомого
преобразователя в следующем виде.
Таблица 4.1
|
I | S | R | P | Q | + | - | a |
I0 | ||||||||
S | R1 | P | Q | + | - | |||
R1 | ||||||||
a2 | ||||||||
P | R3 | P | Q | + | - | |||
R3 | ||||||||
+ | a4 | |||||||
a4 | ||||||||
Q | R5 | P | Q | + | - | |||
R5 | ||||||||
- | a6 | |||||||
a6 | ||||||||
h0 | I0 | S | a2 |
Таблица 4.2
+ | - | a | |-- | |
I0 | D | |||
S | П | П | c7 | |
R1 | c1 | |||
c1 | CD2 | CD2 | CD2 | |
P | П | П | c7 | |
R3 | c3 | |||
+ | П | |||
a4 | CD4 | CD4 | CD4 | |
Q | П | П | c7 | |
R5 | c5 | |||
- | П | |||
a6 | CD6 | CD6 | CD6 | |
a4 | П |
В качестве демонстрации работы преобразователя построим последовательность конфигураций для входной цепочки а + а - а|--, дополнив эту последовательность указателем выполняемого действия.