ANTLR的约束矛盾



我正在尝试学习antlr。如果我期望这类句子(第一个单词是大写,休息可以是多个字母数字混合案例单词):

HELLO world foo
THIS ThaT FOO
HELLO THAT 
BANANA BeRRY 99
APPLE juice80

如果我将规则定义为:

grammar Hello;
r: UC MC
UC: [A-Z]+ ; //only uppercase
MC: [A-Z|a-z|0-9]+ ; //uppercase, lowercase, and numbers or anycombination of these

对于输入hello world,我得到错误:
mismatched input WORLD expecting MC

我看到这两个规则冲突在大写字符方面。我如何处理这种情况?

这种语法的最简单方法是创建一个允许两种令牌类型的解析器规则:

grammar Hello;
r: uc mc;
uc: UC;
mc: UC | MC;
UC: [A-Z]+ ; //only uppercase
MC: [A-Za-z0-9]+ ; //uppercase, lowercase, and numbers or anycombination of these

如果要正确地亮着令牌,则必须影响Lexer才能切换Lexing模式。

相关内容

  • 没有找到相关文章

最新更新