Бизон: можно ли манипулировать стеками парсера во время редукции? - PullRequest
0 голосов
/ 27 мая 2019

В сканере есть функция с именем unput(). В парсере мне интересно, есть ли подобные утилиты для манипулирования стеками?

Мой сценарий:

В сканере, проверяя входную строку, я могу определить соответствующий символ, который будет использоваться в unput(). например, I unput() '2' для идентификатора начинается с d, '4' для q, '8' для o и т. д.

У меня также есть простая функция псевдонима идентификатора, которая позволяет определять идентификаторы с понятными именами (например, #define NAME d0), все они размещаются в начале входного файла. Эта функция реализована в виде хеш-таблицы в .y, хеш-таблица может хранить всю информацию о NAME, d0 и 2.

Теперь в производственном правиле, когда я сталкиваюсь с использованием идентификатора NAME, просматривая хеш-таблицу, я могу уменьшить его до символа, соответствующего d0, но информация о 2 теряется .. Поскольку в сканере строка без псевдонима d0 отображается на два символа, а NAME отображается только на один символ. Вот почему я хочу вставить дополнительный символ, соответствующий 2, в стопки как-то , надеясь, что он будет вести себя так же, как если бы сканер читал d0.

1 Ответ

0 голосов
/ 15 июня 2019

Есть только один способ играть со стеком: использовать $ 0, $ -1 и т. Д. Для изменения значений (и @ 0 ... для местоположений), но вы не можете изменить тип символа.

...