2013-10-20 23 views
0

我是ANTLR的新手,正在努力解決我遇到的一些錯誤。下面我列出了我正在使用的語法,輸入文件和我得到的錯誤。使用ANTLR4的無關輸入錯誤

我ANTLR的語法文件如下:

grammar Simple; 

@header 
{ 
package simple; 
} 

PARSER

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; 

LEXER

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

回答

1

「MODIFY」是一個ID,它不匹配anylinebefore +

+0

嘿,有沒有ANTLR 4書贈品?我想要一個,但我媽媽不會給我錢:-P –

+0

謝謝ANTLR的傢伙。我今晚花了幾個小時,得出了同樣的結論。再次感謝... –