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

UptoLike

82
(7) expr id
(8) expr_list expr_list , expr
(9) expr_list expr
Инструкция, начинающаяся с А(I,J), будет передана
синтаксическому анализатору как поток символов id(id, id). После переноса
первых трех символов в стек ПС-анализатор окажется в конфигурации
Стек Вход
... id ( id , id ...
Очевидно, что символ id на вершине стека должен быть свернут, но
какой продукцией? Правильный выборпродукция (5), если А
процедура,
и (7), если Амассив. Содержимое стека не может подсказать, чем является
А; для принятия решения мы должны использовать информацию из таблицы
символов, которая была занесена туда при объявлении А.
Одно из решений состоит в замене символа id в продукции (1) на
procid и использовании более интеллектуального лексического анализатора,
который возвращает procid при
распознавании идентификатора,
представляющего собой имя процедуры. Такой способ требует от
лексического анализатора обращения к таблице символов перед тем, как вер-
нуть символ.
Если мы внесем эти изменения, то при обработке А(I,J)
синтаксический анализатор может оказаться либо в конфигурации,
приведенной ранее, либо в следующей:
Стек Вход
... procid ( id , id ...
В
первом случае выбираем свертку по продукции (7); в последнемпо
продукции (5). Обратите внимание, что выбор определяется третьим от
вершины символом в стеке, который даже не участвует в свертке. Для
управления разбором ПС-анализ может использовать информацию "из
глубин" стека.
                                                                                            82
        (7)    expr                   id
        (8)    expr_list              expr_list , expr
        (9)    expr_list              expr


     Инструкция,           начинающаяся            с     А(I,J),          будет     передана
синтаксическому анализатору как поток символов id(id, id). После переноса
первых трех символов в стек ПС-анализатор окажется в конфигурации
                               Стек                      Вход
                               ... id ( id              , id ...
     Очевидно, что символ id на вершине стека должен быть свернут, но
какой продукцией? Правильный выбор – продукция (5), если А – процедура,
и (7), если А – массив. Содержимое стека не может подсказать, чем является
А; для принятия решения мы должны использовать информацию из таблицы
символов, которая была занесена туда при объявлении А.
     Одно из решений состоит в замене символа id в продукции (1) на
procid и использовании более интеллектуального лексического анализатора,
который       возвращает       procid        при       распознавании          идентификатора,
представляющего        собой    имя     процедуры.          Такой      способ     требует   от
лексического анализатора обращения к таблице символов перед тем, как вер-
нуть символ.
     Если мы внесем эти изменения, то при обработке А(I,J)
синтаксический        анализатор     может         оказаться       либо   в    конфигурации,
приведенной ранее, либо в следующей:
                               Стек                      Вход
                            ... procid ( id                 , id ...
     В первом случае выбираем свертку по продукции (7); в последнем – по
продукции (5). Обратите внимание, что выбор определяется третьим от
вершины символом в стеке, который даже не участвует в свертке. Для
управления разбором ПС-анализ может использовать информацию "из
глубин" стека.