2013-05-10 8 views
0

我正在爲支持數組和矩陣作爲其字段的類的小語言編寫杯子解析器。例如,如果一個類的實例:杯子解析器中的衝突(語法與阿羅瑞和矩陣)

C c; 

領域要與被訪問:

c.x; 
c.y[]; 
c.z[][]; 

我無法寫這最後一部分的生產,因爲移位/減少衝突我不斷得到。這是我的製作:

Designator ::= IDENT 
       | 
       Designator DOT IDENT 
       | 
       Designator LSQUARE Expr RSQUARE 
       | 
       Designator LSQUARE Expr RSQUARE LSQUARE Expr RSQUARE 
       ; 

警告:*移位/減少衝突狀態#發現189代號之間 :: =代號LSQUARE Expr的RSQUARE() 和代號:: =代號LSQUARE Expr的RSQUARE()LSQUARE Expr RSQUARE 符號LSQUARE 已解決贊成轉移。

任何人都可以幫我解決這個問題嗎?

回答

0

你文法的最後一行Designator無效。 Designator LSQUARE Expr RSQUARE(上面兩行)已經遞歸地定義了任意多維的鋸齒狀數組表達式。

根據你的語法,下面就表達是有效的:

c.y[a].b 

及以下將是無效的:

c.y[a].z[b] 

是通過用意何在?

看看有關鋸齒狀陣列的C# grammar可能令人鼓舞。