在学习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''
丢失数字输入规则:<缺少数字>
我想念什么吗?
您在输入9
上会出现错误,因为您没有定义与9
匹配的任何Lexer规则。实际上,您根本没有定义任何Lexer规则。请注意,您将DIGIT
定义为片段,而片段不会产生令牌。
您还应该在您的语法中获得警告"对解析器中的令牌数字的隐性定义"。
如果您从DIGIT
的定义中删除了fragment
关键字,则两个问题都会消失。