Jump to content

Простой парсер приоритетов

В информатике простой парсер приоритета — это тип восходящего парсера для контекстно-свободных грамматик , который может использоваться только простыми грамматиками приоритета .

Реализация парсера очень похожа на обычный восходящий парсер . Стек используется для хранения жизнеспособного префикса из предложенной формы крайнего правого вывода . Символы ⋖, ≐ и ⋗ используются для обозначения точки поворота и для определения того, когда смещать , а когда уменьшать .

Выполнение

[ редактировать ]
  • Вычислите таблицу отношений предшествования Вирта – Вебера для грамматики с начальным символом S.
  • Инициализируйте стек стартовым маркером $.
  • Добавьте конечный маркер $ к анализируемой строке ( Input ).
  • Пока стек не станет равным «$ S», а вход не станет равным «$».
    • Найдите в таблице связь между Top(stack) и NextToken(Input).
    • если отношение ⋖ или ≐
      • Сдвиг :
      • Push(стек, связь)
      • Push(Стек, СледующийТокен(Вход))
      • RemoveNextToken (Вход)
    • если отношения ⋗
      • Уменьшать :
      • SearchProductionToReduce (стек)
      • Удалить опорную точку из стека
      • Найдите в таблице связь между нетерминалом из продукции и первым символом в стеке (начиная сверху).
      • Push(стек, связь)
      • Push(Стек, Нетерминал)

SearchProductionToReduce (стек)

  • Найдите самый верхний ⋖ в стопке; этот и все символы над ним — это точка поворота .
  • Найдите произведение грамматики, находится ось . в правой части которой

Дан следующий язык, который может анализировать арифметические выражения с помощью операций умножения и сложения:

E  --> E + T' | T'
T' --> T
T  --> T * F  | F
F  --> ( E' ) | num
E' --> E

num — это терминал, и лексер анализирует любое целое число как num ; E представляет собой арифметическое выражение, T — термин, а F — фактор.

и таблица синтаксического анализа:

И И' Т Т' Ф + * ( ) в $
И
И'
Т
Т'
Ф
+
*
(
)
в
$
STACK                   PRECEDENCE    INPUT            ACTION

$                            ⋖        2 * ( 1 + 3 )$   SHIFT
$ ⋖ 2                        ⋗        * ( 1 + 3 )$     REDUCE (F -> num)
$ ⋖ F                        ⋗        * ( 1 + 3 )$     REDUCE (T -> F)
$ ⋖ T                        ≐        * ( 1 + 3 )$     SHIFT
$ ⋖ T ≐ *                    ⋖        ( 1 + 3 )$       SHIFT
$ ⋖ T ≐ * ⋖ (                ⋖        1 + 3 )$         SHIFT
$ ⋖ T ≐ * ⋖ ( ⋖ 1            ⋗        + 3 )$           REDUCE 4× (F -> num) (T -> F) (T' -> T) (E ->T ') 
$ ⋖ T ≐ * ⋖ ( ⋖ E            ≐        + 3 )$           SHIFT
$ ⋖ T ≐ * ⋖ ( ⋖ E ≐ +        ⋖        3 )$             SHIFT
$ ⋖ T ≐ * ⋖ ( ⋖ E ≐ + < 3    ⋗        )$               REDUCE 3× (F -> num) (T -> F) (T' -> T) 
$ ⋖ T ≐ * ⋖ ( ⋖ E ≐ + ≐ T    ⋗        )$               REDUCE 2× (E -> E + T) (E' -> E)
$ ⋖ T ≐ * ⋖ ( ≐ E'           ≐        )$               SHIFT
$ ⋖ T ≐ * ⋖ ( ≐ E' ≐ )       ⋗        $                REDUCE (F -> ( E' ))
$ ⋖ T ≐ * ≐ F                ⋗        $                REDUCE (T -> T * F)
$ ⋖ T                        ⋗        $                REDUCE 2× (T' -> T) (E -> T')
$ ⋖ E                                 $                ACCEPT
  • Альфред В. Ахо, Джеффри Д. Ульман (1977). Принципы проектирования компиляторов . 1-е издание. Аддисон-Уэсли.
  • Уильям А. Барретт, Джон Д. Коуч (1979). Построение компилятора: теория и практика . научный сотрудник.
  • Жан-Поль Трамбле, П.Г. Соренсон (1985). Теория и практика написания компиляторов . МакГроу-Хилл.


Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: b7d11754828bf1dd2a151ded4724c76c__1680189480
URL1:https://arc.ask3.ru/arc/aa/b7/6c/b7d11754828bf1dd2a151ded4724c76c.html
Заголовок, (Title) документа по адресу, URL1:
Simple precedence parser - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)