我正在嘗試修改一個PDDL解析器,並且存在一個可選的標記。假設這些是我想要閱讀的2個選項。 (圖1)JavaCC:如何解析可能不存在的字符?
(node1)
(node1 :isGood) // :isGood is optional to be exist
爲了支持這兩種情況下,我喜歡在低於這個figure2的.jj開發的代碼。它工作正常;然而,這是一種不恰當的書寫方式。 (圖2)
<LEFT_BRACKET>
<NODE>
(LOOKAHEAD(2) <IS_GOOD> <RIGHT_BRACKET> | <RIGHT_BRACKET>)
中的.jj其實我是希望它應該像在低於這個figure3的代碼。從圖3中,它成功地解析了.jj,但它無法解析我從中收到的圖1中的腳本,而不是我所收到的unexpected token ")"
。 (figure3)
<LEFT_BRACKET>
<NODE>
(LOOKAHEAD(2) <IS_GOOD>) // this is where it should support an optional token
<RIGHT_BRACKET>
問題:如何寫的.jj代碼以支持如圖一兩個條件?換句話說,如何使它支持可能不存在的可選標記:isGood
以及適當的編程方法。
我可能不知道LOOKAHEAD是如何工作的。閱讀figure1的任何解決方案都很感謝。
是不是隻是'()?'? –
lexicore
這在這種情況下不起作用。但是,我現在只是通過將括號改爲方括號來得到我的答案。該部分將看起來像這樣>>'[LOOKAHEAD(2)]'。此代碼指出「如果有然後訪問它,否則跳過它。我感謝您的幫助,我將離開這個問題給其他人。無論如何,我仍然不確定LOOKAHEAD如何工作。 –
Mes
你不用在這種情況下,不需要預見性規範,只需使用'... [] '或'...()?'。 –