试图将整数解析为字符串(qi :: as_wstring)

时间:2017-02-15 19:32:18

标签: c++ visual-studio-2015 boost-spirit

(免责声明,我正在学习提升精神)

我正在尝试解析这样的表达式: F(1)

并希望将1作为字符串(" 1"而不是数字(与qi :: int _一起使用))。

我试过这样的事情(这是错误的,但也许我的方向正确),但结果字符串是" \ x1 "而不只是" 1 "

有关将数字解析为字符串需要什么的任何见解?

template <typename Iterator>
struct range_parser : boost::spirit::qi::grammar<Iterator, RangeResult(), iso8859_1::space_type>
{
    range_parser() : range_parser::base_type(start)
    {
        using qi::lexeme;
        using qi::int_;
        using iso8859_1::digit;

        number_as_string %= lexeme[ +(int_) ];

        start %=
            qi::lit("F")
            >> '('
            >> number_as_string
            >> ")"
            ;
    }

    qi::rule<Iterator, std::wstring(), iso8859_1::space_type> number_as_string;
    qi::rule<Iterator, RangeResult(), iso8859_1::space_type> start;
};

1 个答案:

答案 0 :(得分:1)

我认为您打算写+(digit)(一个或多个数字)而不是+(int_)(一个或多个整数)。请注意,+(digit)qi::int_不会做同样的事情(没有范围检查,没有+/-符号,没有数字限制,接受"000"等输入,等等)

如果您想捕获qi::int_识别的输入,您可以尝试使用raw指令:raw[int_] http://www.boost.org/doc/libs/1_63_0/libs/spirit/doc/html/spirit/qi/reference/directive/raw.html

如有必要,可以保存两者解析后的值和qi::int_解析器的原始输入,请参见此处:qi::rule with inherited attribute as inherited attribute