【发布时间】:2014-03-25 15:11:43
【问题描述】:
假设我有以下规则:
identifier %=
lexeme[
char_("a-zA-Z")
>> -(*char_("a-zA-Z_0-9")
>> char_("a-zA-Z0-9"))
]
;
qi::rule<Iterator, std::string(), Skipper> identifier;
以及以下输入:
// identifier
This_is_a_valid123_Identifier
正如跟踪显示的那样,标识符已正确解析并设置了属性,但船长再次在字符串的第一个字符之后开始一个字符:
<identifier>
<try>This_is_a_valid123_I</try>
<skip>
<try>This_is_a_valid123_I</try>
<emptylines>
<try>This_is_a_valid123_I</try>
<fail/>
</emptylines>
<comment>
<try>This_is_a_valid123_I</try>
<fail/>
</comment>
<fail/>
</skip>
<success>his_is_a_valid123_Id</success>
<attributes>[[T, h, i, s, _, i, s, _, a, _, v, a, l, i, d, 1, 2, 3, _, I, d, e, n, t, i, f, i, e, r]]</attributes>
</identifier>
<skip>
<try>his_is_a_valid123_Id</try>
<emptylines>
<try>his_is_a_valid123_Id</try>
<fail/>
</emptylines>
<comment>
<try>his_is_a_valid123_Id</try>
<fail/>
</comment>
<fail/>
</skip>
我已经尝试在词位表达式中使用 as_string,但没有帮助。
【问题讨论】:
标签: c++ parsing boost boost-spirit