我正在为使用缩进等非常复杂的配置文件编写解析器。我决定使用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