我在Ragel中实现了我的词法扫描程序,当我识别各种各样的白色空间时,我需要一个令牌。但除了分离其他代币之外,我并不关心白色空间。如果我将它传递给我的Lemon解析器,我将不得不插入许多额外的规则来摆脱它,这将使我的语法难看并减慢解析速度。但是我发现让Lemon为白色空间生成令牌的唯一方法就是制定一个我从不打算使用的缩减规则。
目前,我有一个规则list0 ::= .
以允许空列表,因此我添加了list0 ::= SP.
。是否没有更简洁的方法来声明令牌,而不在减少规则中使用它?
答案 0 :(得分:1)
您可以使用%nonassoc
,%right
或%left
来保留终端令牌。
%nonassoc SECRET_TOKEN .
program ::= .
将生成:
#define SECRET_TOKEN 1