Pau*_*hov 11 c++ error-handling boost lex boost-spirit
我正在编写一个解析器,用于使用缩进等非常复杂的配置文件.我决定使用Lex将输入分解为令牌,因为它似乎使生活更轻松.问题是我找不到任何使用Qi错误报告工具(on_error)的示例,其中解析器使用令牌流而不是字符进行操作.
要使用的错误处理程序on_error需要一些能够准确指示错误在输入流中的位置.所有示例都只是std::string从迭代器对构造并打印出来.但是如果使用Lex,则迭代器是标记序列的迭代器,而不是字符.在我的程序中,这导致std::string在我注意到无效的迭代器类型之前挂起构造函数.
据我所知,令牌可以将输入流的一对迭代器作为其值.这是默认属性类型(如果类型是这样lex::lexertl::token<>).但是,如果我想我的令牌包含一些解析(更多有用的int,std::string等等),这些迭代器都将丢失.
如何在使用带Qi的Lex时生成指示输入流中位置的人性化错误消息?有这种用法的例子吗?
谢谢.
hka*_*ser 10
很抱歉迟到的回复,但我花了一些时间准备一个你想要实现的目标的一个体面的例子.我现在为Spirit添加了一个新的词法分析器示例:conjure_lexer.它是conjure实现小编程语言的(Qi)示例的修改版本.主要区别在于它使用词法分析器而不是纯Qi语法.
新conjure_lexer示例演示了几个方面:a)它正在使用一个新position_token类,它扩展了现有token类型.它总是存储指向相应匹配输入序列的迭代器对(除了通常的信息,如标记id,标记值等).b)它正在使用这个位置信息进行错误报告c)并且沿着这条线,它演示了如何使用词法分析器来简化语法.
新的例子在SVN(主干)中,将在Boost V1.47中发布(即将发布).它在这个目录中:$ BOOST_ROOT/libs/spirit/example/qi/compiler-tutorial/conjure_lexer.
| 归档时间: |
|
| 查看次数: |
941 次 |
| 最近记录: |