ANTLR:输入不匹配

标签 antlr

我无法理解我的语法错误。文件 Bug.g4 是:

grammar Bug;

text: TEXT;

WORD: ('a'..'z' | 'A'..'Z')+ ;
TEXT: ('a'..'z' | 'A'..'Z')+ ;

NEWLINE: [\n\r] -> skip ;

运行antlr4和javac后,我运行

grun Bug text -tree
aa
line 1:0 mismatched input 'aa' expecting TEXT
(text aa)

但如果我在语法中改用 text: WORD ,一切都会好起来的。怎么了?

最佳答案

当两个词法规则都匹配相同的文本字符串,并且没有其他词法规则匹配更长的文本字符串时,ANTLR根据语法中最先出现的规则分配标记类型。在您的情况下,词法分析器规则永远无法生成 TEXT 标记,因为 WORD 规则将始终匹配相同的文本和 WORD 规则出现在语法中的 TEXT 规则之前。如果您在语法中颠倒这些规则的顺序,您会开始看到 TEXT 标记,但永远不会看到 WORD 标记。

关于ANTLR:输入不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18795301/

相关文章:

c# - 使用 ANTLR 将 vbscript 翻译成 C#

java - 如何在 Antlr 分词器中进行 Unicode 转义解码

plugins - 使用 ANTLR4 插件的 Intellij 14 中的 java.lang.NoClassDefFoundError

java - 如何使用 ANTLR v3 构建日期/小时语法?

Antlr - 如何使用以 NEWLINE 结尾的自由格式 unicode 字符串?

parsing - 什么是 ANTLR 中的树解析器,我是否被迫编写一个?

parsing - 使用 ANTLR 进行 DSL 的代码替换

c - antlr C语法创建AST

java - 分析代码以创建 UML 的最佳方法是什么?

c++11 - Boost.Spirit或Antlr是否支持左递归语法