我在 Ragel 中实现了我的词法扫描器,当我识别各种空白时,我需要一个令牌来使用。 但除了分离其他令牌之外,我不关心空白。 如果我把它传递给我的 Lemon 解析器,我将不得不插入许多额外的规则来摆脱它,这将使我的语法变得丑陋并减慢解析速度。 但是我发现让 Lemon 为空白生成令牌的唯一方法是放入一个我从未打算使用的减少规则。
目前,我有一个规则list0 ::= .
允许空列表,所以我添加了一个list0 ::= SP.
. 难道没有更干净的方法来声明令牌,而不在reduce规则中使用它吗?
您可以使用 %nonassoc
、 %right
或 %left
来保留终端令牌。
%nonassoc SECRET_TOKEN .
program ::= .
将生成:
#define SECRET_TOKEN 1