0

我是一个 ANTLR 新手,正在努力解决我遇到的一些错误。下面我包含了我正在使用的语法、输入文件和我得到的错误。

我的 Antlr 语法文件如下:

grammar Simple;

@header
{
package simple;
}

解析器

program :
        anylinebefore+
        processline
        anylineafter+
        'MSEND' NEWLINE
         '.' EOF
        ;

anylinebefore:  CH* NEWLINE | commentline;

anylineafter:  statement | commentline;

statement: movestatement ; 

movestatement : 'MOVE' arg ('to' | 'TO')  ID '.' NEWLINE ;

arg : ID|STRING;

processline:  PROCESSLITERAL  NEWLINE; 

commentline:  '!' CH* NEWLINE;

词法分析器

WS     : [ \t]+ -> skip ;
STRING  :  '\'' (~['])* '\'';
ID     : ('a'..'z'|'A'..'Z')+;
INT    : '0'..'9'+;
TO     : ('to' | 'TO');
CH      :       [\u0000-\uFFFE];
PROCESSLITERAL  :  'PROCESS SOURCE FOLLOWS';
NEWLINE   : '\r'? '\n'  ;

我的输入文件如下:

MODIFY   
         PROCESS SOURCE FOLLOWS  
MOVE 'WSFRED' TO AGRPASSEDTWO.   
         MSEND    
         .

我得到的错误是:

showtree:
     [java] line 1:0 extraneous input 'MODIFY' expecting {'!', CH, NEWLINE}

我不明白为什么这与语法中的anylinebefore不匹配任何帮助将不胜感激。

4

1 回答 1

1

“MODIFY”是一个ID,不匹配anylinebefore+

于 2013-10-20T16:25:54.200 回答