antlr4 不按语法解析
antlr4 not parsing according to grammar
我正在尝试根据此(部分)语法解析 'for loop':
grammar GaleugParserNew;
/*
* PARSER RULES
*/
relational
: '>'
| '<'
;
varChange
: '++'
| '--'
;
values
: ID
| DIGIT
;
for_stat
: FOR '(' ID '=' values ';' values relational values ';' ID varChange ')' '{' '}'
;
/*
* LEXER RULES
*/
FOR : 'for' ;
ID : [a-zA-Z_] [a-zA-Z_0-9]* ;
DIGIT : [0-9]+ ;
SPACE : [ \t\r\n] -> skip ;
当我尝试生成有关其解析方式的 gui 时,它不遵循我上面提供的语法。这是它产生的结果:
我以前遇到过这个问题,当时我只是简单地退出cmd,再次打开它并编译所有内容,然后以某种方式工作。它现在不工作了。
我对 antlr4 不是很了解,所以我不确定去哪里解决这个问题。
一定是你用的IDE有问题。语法很好并在 Visual Studio 代码中生成此解析树:
我猜 IDE 使用了错误的解析器或词法分析器(可能来自不同的工作文件?)。打印词法分析器标记以查看它们是否符合您的预期。提示:避免定义隐式词法分析器标记(如“(”、“}”等),这将允许为标记提供好名字。
我正在尝试根据此(部分)语法解析 'for loop':
grammar GaleugParserNew;
/*
* PARSER RULES
*/
relational
: '>'
| '<'
;
varChange
: '++'
| '--'
;
values
: ID
| DIGIT
;
for_stat
: FOR '(' ID '=' values ';' values relational values ';' ID varChange ')' '{' '}'
;
/*
* LEXER RULES
*/
FOR : 'for' ;
ID : [a-zA-Z_] [a-zA-Z_0-9]* ;
DIGIT : [0-9]+ ;
SPACE : [ \t\r\n] -> skip ;
当我尝试生成有关其解析方式的 gui 时,它不遵循我上面提供的语法。这是它产生的结果:
我以前遇到过这个问题,当时我只是简单地退出cmd,再次打开它并编译所有内容,然后以某种方式工作。它现在不工作了。
我对 antlr4 不是很了解,所以我不确定去哪里解决这个问题。
一定是你用的IDE有问题。语法很好并在 Visual Studio 代码中生成此解析树:
我猜 IDE 使用了错误的解析器或词法分析器(可能来自不同的工作文件?)。打印词法分析器标记以查看它们是否符合您的预期。提示:避免定义隐式词法分析器标记(如“(”、“}”等),这将允许为标记提供好名字。