2014-12-20 58 views
2

我設計的,我想支持使用以下語法陣列的聲明中低標點符號語言:如何編寫一個匹配「x by y by a」的語法?

512 by 512 of 255 // a 512x512 array filled with 255 
100 of 0 // a 100-element array filled with 0 
expr1 by expr2 by expr3 ... by exprN of exprFill 

這些數組聲明是其中很多隻是一種表達方式。

我很難搞清楚如何編寫語法規則。我已經簡化我的語法到再現我的麻煩最簡單的事情:

grammar Dimensions; 

program 
    : expression EOF 
    ; 

expression 
    : expression (BY expression)* OF expression 
    | INT 
    ; 

BY : 'by'; 
OF : 'of'; 
INT : [0-9]+; 
WHITESPACE : [ \t\n\r]+ -> skip; 

當我在10 of 1喂,我得到了我想要的解析:

Parse tree of <code>10 of 1</code>

當我20 by 10 of 1飼料,中間的expression非終端向上傾斜10 of 1,留下任何與規則匹配的內容OF expression

Parse tree of <code>20 by 10 of 1</code>

而且我得到以下警告:

line 2:0 mismatched input '<EOF>' expecting 'of' 

我想看到的分析是

(program (expression (expression 20) by (expression 10) of (expression 1)) <EOF>) 

有沒有一種方法可以讓我重新制定我的語法來實現這一目標?我覺得我需要的是BY和OF之間的正確聯繫,但我不知道如何在兩個運營商之間進行表達。

回答

0

一些非智力實驗後,我想出了一些作品,似乎產生我想要的解析:

expression 
    :<assoc=right> expression (BY expression)+ OF expression 
    |<assoc=right> expression OF expression 
    | INT 
    ; 

我不知道是否有一種方法,我可以只用一個生產它表達出來。