(免责声明,我正在学习提升精神)
我正在尝试解析这样的表达式: 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;
};
答案 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