2013-09-29 54 views
0

我想用ANTLR 4這樣一行解析:ANTLR 4:多PARAMS跳行空間

circle 'my circle' : posx = '800'; posy = '640'; 

我希望能夠解析它沒有考慮的空格,製表符和新行護理在裏面,比如:

circle'my circle':posx='800';posy='640'; 

circle 
    'my circle': 
posx='800'; posy= 
'640' 

我此刻的語法是:

grammar Circle; 

prog 
    : statement* 
    ; 

statement 
    : circle 
    ; 

circle 
    : INDENT? 'circle' '\'' VALUES '\'' ':' params 
    ; 

params 
    : param+ 
    ; 

param 
    : ARG '=' '\'' VALUES '\'' ';' 
    ; 

INDENT : [ \t]+; 
VALUES : ARG (ARG)* ; 
ARG : [a-zA-Z0-9]+; 
WS : [ \t\n\r]+ -> skip; 

反正試圖解析這一點:

circle 'my circle' : posx='800'; posy = '640'; 

我:

line 1:5 mismatched input ' ' expecting ''' 

有關如何解決語法解析上面跳過空格,製表符,在返回行文本的任何想法線的中間?

回答

0

這是因爲在你的解析器規則中你要求WS。 像圈INDENT? 'circle' WS '\'' VALUES '\'' WS ':' params,然後在詞法規則,你跳過所有WS [ \t\n\r]+ -> skip;

line 1:5 mismatched input ' ' expecting ''' 

你得到這個錯誤,因爲在阿根廷,所以你需要在詞法ARG添加規則「」你可以有WS。我不知道ANTLR 4,但是在ANTLR 3中它應該看起來像這樣 ARG : ('a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9'|' ')+

+0

是的,這是真的。事實上,我試圖得到一個類似python的縮進http://stackoverflow.com/questions/8642154/antlr-what-is-simpliest-way-to-realize-python-like-indent-depending-grammar但沒有成功目前來說。 – Randomize