2013-07-25 42 views
0

我有這樣的解析器規則,我需要知道哪些子規則匹配:ANTLR4:錯誤,當我試圖找到其中解析器子規則匹配

dt returns [DT v] 
: (d1=date t1=time?|t2=time d2=date?) 
       {if ($d1 == null) // right side matched ... } 
; 

我得到一個ANTLR4錯誤消息:「缺對'$ d1'中規則引用'd1'的屬性訪問「。

我可以擺脫這個錯誤, $d1.v,後來我在ANTLR生成的代碼的運行時獲得NullPointerException

if (((DtrContext)_localctx).d1.v != null) 

因爲_localctx.d1爲空,所以_localtx.d1.v使用一個空PTR。

有關我如何解決這個問題的任何想法?

回答

0

d1(解析樹節點類型DateContext)的上下文對象可以用$d1.ctx引用。這相當於你單獨假設$d1會做什麼。

+0

謝謝,無視旁路。我看到ANTLR生成的代碼將($ d1.ctx == null)轉換爲(d == null),所以我想知道是什麼阻止了我對語法的假設,從而成爲語法? –