在学习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“”处缺失的数字 规则输入:
我漏掉了什么吗?
发布于 2019-03-21 13:30:32
输入9上有一个错误,因为您没有定义任何与9匹配的lexer规则。事实上,您根本没有定义任何lexer规则。请注意,您只将DIGIT定义为一个片段,并且片段不生成标记。
您还应该得到语法中的警告“语法中标记数字的隐式定义”。
如果从fragment的定义中删除DIGIT关键字,这两个问题都会消失。
https://stackoverflow.com/questions/55279529
复制相似问题