2013-10-27 87 views
7

如果語法不匹配,有沒有辦法讓perl6生成錯誤消息?或者至少返回它處理的最後一個數據的位置?如果我從解析器中得到的是'不匹配',那麼解決語法錯誤是相當困難的。perl6語法,錯誤報告

回答

11

如果您的重點是爲您的語法用戶生成消息,請參閱Generating Good Parse Errors from a ParserGrammar::ErrorReporting

這個答案的其餘部分是關於調試。

首先,您可以在Perl 6正則表達式中嵌入任意閉包(代碼)。 (只需在正則表達式中鍵入{ your code goes here })。因此,您可以將{ say ... }聲明放在有助於調試的語句中。

但有更好的選擇。

你使用「電池包括」Rakudo星分佈? (除非你有充分的理由不這樣做)。如果是這樣,你可以添加use Grammar::Tracer;(如幻燈片http://www.jnthn.net/papers/2011-yapceu-grammars.pdf中所述)以獲得完整的分析結果。

我個人的偏好是使用Rakudo調試器,該調試器提供Grammar :: Tracer所做的一切以及除了所有Perl 6代碼(包括正則表達式和語法)的單步執行,斷點等以外的更多功能。調試器在這個video中引入。

如果您還有其他問題,我建議您訪問始終友好的IRC channel #perl6