【发布时间】:2012-11-28 17:08:41
【问题描述】:
在我的 Boost Spirit 语法中,我希望有一个规则来做到这一点:
规则<...> noCaseLit = no_case[ lit( "KEYWORD" ) ];
但对于自定义关键字,我可以这样做:
... >> noCaseLit( "SomeSpecialKeyword" ) >> ... >> noCaseLit( "OtherSpecialKeyword1" )
Boost Spirit 规则是否可以做到这一点?如果可以,如何实现?
附:我以不区分大小写的东西为例,我追求的是一般的规则参数化。
修改: 通过 cmets 中“sehe”提供的链接,我能够接近我想要的,但我还没有做到。
/* Defining the noCaseLit rule */
rule<Iterator, string(string)> noCaseLit = no_case[lit(_r1)];
/* Using the noCaseLit rule */
rule<...> someRule = ... >> noCaseLit(phx::val("SomeSpecialKeyword")) >> ...
我还没有想出一种将文字字符串自动转换为 Phoenix 值的方法,以便我可以使用这样的规则:
rule<...> someRule = ... >> noCaseLit("SomeSpecialKeyword") >> ...
【问题讨论】:
-
感谢提供该链接,它帮助我了解了继承属性的使用。
标签: c++ boost rules boost-spirit boost-spirit-qi