antlr4没有根据语法解析

时间:2018-03-29 06:20:30

标签: parsing antlr4

我正在尝试根据这个(部分)语法解析'for循环':

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时,它不遵循我上面提供的语法。这就是它产生的:

enter image description here

之前我遇到过这个问题,我之所以做的只是退出cmd,再次打开它并编译所有内容然后以某种方式工作。但现在不行。

我对antlr4并不是很了解,所以我不确定在哪里寻找解决这个问题的方法。

1 个答案:

答案 0 :(得分:1)

必须是您正在使用的IDE的问题。语法很好,并在Visual Studio代码中生成这个解析树:

Parse tree for the given grammar

我猜IDE是使用错误的解析器或词法分析器(可能来自不同的工作文件?)。打印词法分析器标记,看它们是否符合您的预期。提示:避免定义隐式词法分析器(如&#39;(&#39;,&#39;}&#39;等),这样可以为代币提供良好的名称。