在我的 Boost Spirit 语法中,我希望有一个规则来做到这一点:
规则<...> noCaseLit = no_case[ lit( "KEYWORD" ) ];
但是对于自定义关键字,我可以这样做:
... >> noCaseLit( "SomeSpecialKeyword" ) >> ... >> noCaseLit( "OtherSpecialKeyword1" )
Boost Spirit 规则是否可以做到这一点,如果可以,怎么做?
PS我以不区分大小写的东西为例,我所追求的是一般的规则参数化。
编辑: 通过评论中“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") >> ...