首页 > 解决方案 > ANTLR 在开始时不识别令牌

问题描述

我是 ANTLR 的初学者,我想制作一个检测变量的程序。为此,我编写了以下 ANTLR 代码,但是当我使用 测试它时,输入 input时grun出现错误。我无法理解为什么这不起作用。line 1:0 token recognition error at: 'p'p=10

grammar rules;
/*
*   Parser Rules
*/

addition : NUMBER PLUS NUMBER;
assign : VARIABLE ASSIGNMENT NUMBER;

/*
*   Lexer Rules
*/

VARIABLE : [a-zA-Z_]+;
NUMBER : [0-9]+ ;
WHITESPACE : [ \n\t\r]+ -> skip ;
NEWLINE: '\n';
PLUS : '+';
ASSIGNMENT : '=';

添加规则工作正常,但分配不起作用。我在终端上运行的命令是antlr4 rules.g4;grun rules assign -tokens,然后我输入p=10进行测试,但它仍然不起作用并显示line 1:0 token recognition error at: 'p'错误。

标签: parsingantlrantlr4lexer

解决方案


我在终端上运行的命令是antlr4 rules.g4;grun rules assign -tokens

antlr4将从您的语法生成 Java 源文件。grun将访问rulesParser.classrulesLexer.class。您缺少的是用于javac将生成的源文件编译为类文件之间的步骤。

由于您没有收到任何有关grun无法找到类的错误,因此您可能仍然有上次运行时遗留的类文件javac。执行那些旧文件也是如此grun,它们显然不包含任何与字母匹配的内容(或至少不包含字母 p)。编译你的源文件javac应该可以解决这个问题。


推荐阅读