我正在爲使用縮進等非常複雜的配置文件編寫解析器。我決定使用Lex將輸入分解爲令牌,因爲它似乎使生活更輕鬆。問題是,我找不到任何使用Qi錯誤報告工具(on_error
)的解析器的示例,這些解析器在令牌流而不是字符上操作。Boost.Spirit:Lex + Qi錯誤報告
在on_error
中使用的錯誤處理程序需要一些能夠精確地指示錯誤在輸入流中的位置。所有的例子只是從這對迭代器構造std::string
並打印它們。但是,如果使用Lex,那麼迭代器就是令牌序列的迭代器,而不是字符。在我的程序中,在我注意到無效的迭代器類型之前,這導致在std::string
構造函數中掛起。
據我所知,令牌可以持有一對迭代器作爲其輸入流的值。這是默認的屬性類型(如果類型是lex::lexertl::token<>
)。但是如果我想讓我的令牌包含更多用於解析的東西(int
,std::string
等),那些迭代器就會丟失。
如何在使用Lex和Qi時生成指示輸入流中位置的人性化友好錯誤消息?有沒有這種用法的例子?
謝謝。
@justsomebody感謝您的編輯:) – sehe 2012-10-11 12:39:29