我一直在阅读语义行为,我的规则看起来像这样:
property_rule %=
identifier_rule % ','
>> lit(L":")
>> type_specification_rule
>> -(lit(L":=") >> +(alnum - ';'))
>> lit(L";");
property_rule
定义为
qi::rule<Iterator, property(), space_type> property_rule;
现在,我还想支持运营商≡
所以我想要的是将规则更改为
...
>> -(( lit(L":=") || lit(L"≡")[SEMANTIC_ACTION_HERE]) >> +(alnum - ';'))
...
在语义操作中,我想更改正在解析的property
,特别是将其字段is_constant
设置为true
。该物业融合了融合。我该怎么做?
答案 0 :(得分:3)
我会 - 一如既往 - 避免语义行为(Boost Spirit: "Semantic actions are evil"?)。
我只是在替代方案的两个分支上合成is_constant
的值:
>> -(( lit(L":=") || lit(L"≡")[SEMANTIC_ACTION_HERE]) >> +(alnum - ';'))
将改为:
>> -(
(L":=" >> attr(false) | L"≡" >> ::attr(true)) >> +(alnum - ';')
)
注意:
lit
||
解析器运算符is_constant
字段在融合序列中被调整