В сканере есть функция с именем unput()
. В парсере мне интересно, есть ли подобные утилиты для манипулирования стеками?
Мой сценарий:
В сканере, проверяя входную строку, я могу определить соответствующий символ, который будет использоваться в unput()
. например, I unput()
'2'
для идентификатора начинается с d
, '4'
для q
, '8'
для o
и т. д.
У меня также есть простая функция псевдонима идентификатора, которая позволяет определять идентификаторы с понятными именами (например, #define NAME d0
), все они размещаются в начале входного файла. Эта функция реализована в виде хеш-таблицы в .y
, хеш-таблица может хранить всю информацию о NAME
, d0
и 2
.
Теперь в производственном правиле, когда я сталкиваюсь с использованием идентификатора NAME
, просматривая хеш-таблицу, я могу уменьшить его до символа, соответствующего d0
, но информация о 2
теряется .. Поскольку в сканере строка без псевдонима d0
отображается на два символа, а NAME
отображается только на один символ. Вот почему я хочу вставить дополнительный символ, соответствующий 2
, в стопки как-то , надеясь, что он будет вести себя так же, как если бы сканер читал d0
.