2016-12-03 112 views
1

我使用bychan庫,這個問題主要圍繞它。有沒有辦法檢查下一個令牌是否結束?

我剛剛檢出了minilang示例並通​​讀了代碼。當我看到StatementNode時,我一直在努力尋找一種方法來爲常規目的添加結尾分號。在該示例中,;用於分隔語句,但是沒有辦法結束以;結尾的最後一個語句的腳本,因爲解析器無法解析結尾並導致:

'Premature end reached' @ position ..., current lexeme is END ... 

有沒有辦法檢查下一個標記是否爲END或者我認爲是錯誤的,展望未來是不是正確的做法,還有其他方法?

我曾嘗試parser.nextIs(EndToken.get())之前,但IDE只是說no instance(s) of type variable(s) N exist so that EndToken<N> conforms to TokenKey

我可能不會在Java中提前找出一個解決方案。 :(

來自:https://github.com/atorstling/bychan/issues/37

回答

0

這是一個遺漏的核心解析器PrattParserpeek()函數來獲取下一個標記,你可以把它比作任何記號類型你會使用它作爲peek().getToken().equals(EndToken.get())

解析器接口,爲動態包,UserParserCallback,具有同樣的事情另一個接口:nextIs(TokenKey)當時的想法是不是Java類內置equals創造更加平等的類型安全檢查的平等類型被稱爲TokenKey

現在您遇到了靜態令牌(如EndToken)沒有任何TokenKey的問題。問題37的修復解決了這個問題。

所以現在你可以撥打parser.nextIs(EndToken.get().getKey())。有關示例,請參見ReadmeExamples::statements

`

相關問題