1

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

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

4

1 回答 1

1

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

%nonassoc SECRET_TOKEN .
program ::= .

将产生:

#define SECRET_TOKEN 1
于 2017-05-31T13:39:52.843 回答