如何让 Lemon 在 file.h 中定义终端令牌,而无需在任何 reduce 规则中使用该令牌



我在 Ragel 中实现了我的词法扫描器,当我识别各种空白时,我需要一个令牌来使用。 但除了分离其他令牌之外,我不关心空白。 如果我把它传递给我的 Lemon 解析器,我将不得不插入许多额外的规则来摆脱它,这将使我的语法变得丑陋并减慢解析速度。 但是我发现让 Lemon 为空白生成令牌的唯一方法是放入一个我从未打算使用的减少规则。

目前,我有一个规则list0 ::= .允许空列表,所以我添加了一个list0 ::= SP.. 难道没有更干净的方法来声明令牌,而不在reduce规则中使用它吗?

您可以使用 %nonassoc%right%left 来保留终端令牌。

%nonassoc SECRET_TOKEN .
program ::= .

将生成:

#define SECRET_TOKEN 1

相关内容

最新更新