在学习ANTRL4时,我尝试解析非常基本的模式,该模式可以具有一个或多个数字。
Abc.g4
grammar Abc;
@header {
package antlr4;
}
fragment DIGIT : [0-9]+;
log : DIGIT;
主要方法
public class OwnParser extends AbcBaseListener
{
public static void main(String args[])
{
String javaClassContent = "9";
AbcLexer abcLexer = new AbcLexer(CharStreams.fromString(javaClassContent));
CommonTokenStream tokens = new CommonTokenStream(abcLexer);
AbcParser parser = new AbcParser(tokens);
ParseTree tree = parser.log();
ParseTreeWalker walker = new ParseTreeWalker();
OwnParser listener= new OwnParser();
walker.walk(listener, tree);
}
}
但是当我执行此操作时,它说:
第1行:0令牌识别错误:“ 9”
行1:1缺少“”处的DIGIT
输入的规则:<缺少数字>
我想念什么吗?
答案 0 :(得分:2)
由于未定义任何与9
相匹配的词法分析器规则,因此输入9
上出现错误。实际上,您根本没有定义任何词法分析器规则。请注意,您仅将DIGIT
定义为一个片段,而这些片段不会产生令牌。
您还应该在语法中得到警告“语法分析器中令牌DIGIT的隐式定义”。
如果您从fragment
的定义中删除了DIGIT
关键字,那么这两个问题都将消失。