野牛:在归约期间是否有可能操纵解析器堆栈?

时间:2019-05-27 06:51:50

标签: bison

在扫描仪中,有一个名为VLC SDK的功能。在解析器中,我想知道是否存在类似的实用程序来操作堆栈?

我的情况:

在扫描仪中,通过检查输入字符串,可以确定要在unput()中使用的相应字符。例如,标识符的unput() unput()'2'开头,d的{​​{1}},'4'的{​​{1}}等。

我还有一个简单的标识符别名功能,该功能允许使用友好名称(例如q)定义标识符,所有标识符都放置在输入文件的开头。此功能仅由'8'中的哈希表实现,该哈希表可以保留有关o#define NAME d0.y的所有信息。

现在,在生产规则中,当我遇到NAME标识符的使用时,通过查找哈希表,我可以将其简化为与d0相对应的符号,但是有关{{1 }}已丢失...由于在扫描仪中,非锯齿字符串2映射到两个符号,但是NAME仅映射到单个符号。这就是为什么我想以某种方式将与d0相对应的额外符号压入堆栈中,希望它的行为与扫描仪正在读取2相同。

1 个答案:

答案 0 :(得分:-1)

只有一种方法可以使用堆栈:使用$ 0,$-1等更改值(对于位置使用@ 0 ...),但是不能更改符号的类型。