2

我正在将旧语法移植到柠檬中,并且我已经在头文件中定义了所有终端符号;我想将它们与这些值一起使用,而不是柠檬在 parser.h 中生成的值:这可能吗?
覆盖 parser.h 完全没用,因为这只是内部发生的事情的镜像,匹配的值将保持不变。
(由于柠檬与野牛共享很多代码,我认为野牛的解决方案也可以解决柠檬的问题)

4

1 回答 1

2

%token使用 bison,您可以通过在指令中声明它们来手动为标记分配值(%token TOK 263例如)。但是,该选项在柠檬中不可用(据我所知)。

无论如何,以上内容并不能真正满足您的要求,因为它不允许您从外部头文件中读取令牌值。对于解析器生成器来说,这不是一个微不足道的要求。为了构建解析表,解析器生成器,无论是野牛还是柠檬,都必须知道与每个标记相关联的值,并且解析标头以提取该信息的任务远远超出了解析器生成器的复杂性;它需要一个嵌入式 C 解析器。

我建议只让解析器生成器生成头文件,然后使用它而不是现有头文件中的定义。唯一的成本(afaics)是您需要重新编译项目中引用令牌值的任何部分,这通常仅限于词法分析器。

于 2015-03-31T16:02:15.300 回答