Parsing ANTLR在开始时无法识别令牌

Parsing ANTLR在开始时无法识别令牌,parsing,antlr,antlr4,lexer,Parsing,Antlr,Antlr4,Lexer,我是ANTLR的初学者,我想制作一个检测变量的程序。为此,我编写了以下ANTLR代码,但当我使用grun对其进行测试时,在输入p=10时,它在“p”行1:0令牌识别错误处给出了一个错误。我无法理解为什么这不起作用 grammar rules; /* * Parser Rules */ addition : NUMBER PLUS NUMBER; assign : VARIABLE ASSIGNMENT NUMBER; /* * Lexer Rules */ VARIABLE : [

我是ANTLR的初学者,我想制作一个检测变量的程序。为此,我编写了以下ANTLR代码,但当我使用
grun
对其进行测试时,在输入
p=10
时,它在“p”行1:0令牌识别错误处给出了一个错误。我无法理解为什么这不起作用

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规则分配-令牌
,然后我输入
p=10
进行测试,但仍然不起作用,并在“p”处显示
行1:0令牌识别错误

我在终端上运行的命令是
antlr4 rules.g4;grun规则分配-令牌

antlr4
将根据语法生成Java源文件
grun
将访问
rulesParser.class
rulesLexer.class
。您缺少的是使用
javac
将生成的源文件编译为类文件的中间步骤

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

我在终端上运行的命令是
antlr4 rules.g4;grun规则分配-令牌

antlr4
将根据语法生成Java源文件
grun
将访问
rulesParser.class
rulesLexer.class
。您缺少的是使用
javac
将生成的源文件编译为类文件的中间步骤


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

您从ANTLR收到任何消息/警告吗?您可能缺少顶级规则
表达式:=addition | assign
@jurez对不起。我在上面的命令中没有编译java文件。您是否从ANTLR收到任何消息/警告?您可能缺少顶级规则
表达式:=addition | assign
@jurez对不起。在上面的命令中,我没有编译java文件