2011-02-10 108 views
1

我試圖解析一種自定義語言(與JSON不太相似),並且我決定嘗試使用boost表達式,因爲它看起來很有趣。是語法錯誤報告可能與boost :: xpressive語法?

但是,當xpressive匹配失敗時,它只會失敗。有什麼方法可以實現某種錯誤報告?就像'表達式匹配到第47個字符(我可以從中得到行號)。

我可以查看一下如何可以定製每個子表達式以查找其他標記或匹配,然後查找它想要的並在此情況下報告錯誤,但似乎這將是一種非常複雜的方式正在做。

是否有任何功能表達(或任何人都可以提出一種方法),可以讓我做到這一點?

謝謝。

回答

0

我建議使用ANTLR來代替。這是一個很好的妥協之間的冷靜,像Boost Spirit/Qi和像lex和yacc這樣的強大工具。它可以做很多更聰明的錯誤報告,而不需要太多的努力。

請注意,目前ANTLR版本2和3都是常用的; 2包含C++代碼生成,而3代碼不包含,因此您現在可能想要堅持使用「較舊」版本(如果v3最終具有C++目標,則移植應該相當簡單)。

+0

謝謝。我過去使用過flex/bison,這很好用,我知道其他的解析器生成器像ANTLR(我甚至用python寫過)。對於這個問題,語言的簡單性意味着無需手動編寫遞歸下降解析器並且報告錯誤(我可以這樣做)。但XPressive是在C++中,沒有額外的構建步驟(在多個操作系統上構建時可能會很痛苦),如果可能的話,我想使用它。我嘗試了boost :: spirit,但編譯器錯誤的額外複雜性和長度/不可編輯性讓我失望。 – DaedalusFall 2011-02-14 13:12:44