【发布时间】:2020-05-19 06:45:34
【问题描述】:
我一直在 antlr 中使用不同的词法分析器模式,我在词法分析器中遇到了“更多”命令的问题,因为它与相应令牌中的所有内容都不匹配。为了让事情更清楚,我的代码大致如下所示:
//DEFAULT_MODE
fragment A: ('A'); //same done for A-Z
KEYWORD_CLASS: C L A S S;
NUM: [0-9];
KEYWORD_SMTH: S M T H->mode(NUMBER_MODE);
mode NUMBER_MODE;
NUMBER: NUM+ ->mode(ANOTHER_MODE);
NO_NUMBER: ~[0-9]->more, mode(DEFAULT_MODE);
现在当我尝试测试解析器规则时
rule: KEYWORD_SMTH NUMBER? CLASS;
那么我期望匹配以下短语:
SMTH 类
但由于某种原因,C 的第一个字母与 Token 不匹配。我必须输入类似
的内容SMTH gCLASS
为了匹配关键字CLASS。如果我理解正确,“更多”命令将匹配不是数字的所有内容并将其带回默认模式,因此它可以是另一个令牌的一部分。有人可以告诉我我的错误在哪里吗?谢谢。
【问题讨论】: