ANTLR 和空字符串的矛盾行为

标签 antlr

我根本不明白 antlr 是如何工作的。使用以下语法:

blockcomment    :   '/\*' ANYCHARS '\*/';

ANYCHARS        :   ('a'..'z' | '\n' | 'r' | ' ' | '0'..'9')*  ;

我在编译语法文件时收到一条警告消息:

“非片段词法分析器规则'ANYCHARS'可以匹配空字符串”

很好。我希望它能够匹配空字符串,因为 "/\*\*/" 是完全有效的。但是当我在 TestRig 中运行 "/\*\*/" 时,我得到:

'*/' 处缺少 ANYCHARS

显然我可以更改它,以便将 '/**/' 作为特殊情况处理:

blockcomment    :   '/\*' ANYCHARS '\*/' | '/**/';

但这并没有真正解决根本问题。有人可以向我解释我做错了什么吗? ANTLR 如何发出有关匹配空字符串的警告,然后又不同时匹配它们?

最佳答案

将“片段”添加到 ANYCHARS?然后它将执行您想要的操作。

关于ANTLR 和空字符串的矛盾行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21420899/

相关文章:

ANTLR - 合成和继承的属性

java - 追踪 ANTLR 解析器忽略文本的问题

C# asp.net 支持一个dll的多个版本

java - 我可以使用 Antlr 创建的词法分析器/解析器来解析 PDDL 文件并将数据返回给 Java 程序吗?

java - 对于ANTLR3异常,antlrworks可以工作,但生成的java代码无法工作

ANTLR 解析多个文件以生成一个 AST

regex - 何时使用语法和编写解析器。使用语言特征正则表达式

input - ANTLR 如何在输入结束时检测垃圾数据

parsing - ANTLR规则重写为嵌套树

java - ANTLR:解决根语法的静态初始化程序中代码太大的问题