antlr - “a-zA-Z”给我一个完全的惊喜,同时匹配了替代项

标签 antlr grammar antlr4

我在使用antlr v4生成语法定义时遇到问题:

grammar TagExpression;

expr : not expr
| expr and expr
| expr or expr
| '(' expr ')'
| tag
;

tag : [a-zA-Z]+ ;

and : '&' ;

or : '|' ;

not : '!' ;

WS : [ \t\n\r]+ -> skip ;

语法错误发生在这里:tag : [a-zA-Z]+ ;
error(50): c:\temp\antlr\TagExpression.g4:10:6: syntax error: 'a-zA-Z' came as a complete surprise to me while matching alternative

我看到的示例具有非常相似的结构。知道为什么会这样吗?

谢谢

最佳答案

字符集表示法只能在词法分析器规则(以大写字母开头并产生标记而不是解析树的规则)中使用。

Tag : [a-zA-Z]+;

关于antlr - “a-zA-Z”给我一个完全的惊喜,同时匹配了替代项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24268053/

相关文章:

c++ - 如何从 C++ 标准推断数组 [] 的优先级高于指针?

java - 导入使用不同模式的 ANTLR4 词法分析器语法

parsing - ANTLR 赋值表达式消歧

ANTLR,如何在ANTLR中转换BNF、EBNF数据?

grammar - Bjarne 的编程书中的列表语法示例有误吗?

parsing - 如何将 ANTLR 语法文件拆分为多个文件

java - ANTLR4 grun Java 错误监听器

java - 你能阻止 StringTemplate 输出到 stderr 吗?

java - antlr如何以任意顺序定义可选部分

java - 永远无法达到以下替代方案 : 2