boost::spirit を使ってみようと思ったのですが、難しいですね。
知恵を貸してください。
グローバル変数の値(フラグとして使用)によって
有効にする rule を変更したいと思っているのですが、
そもそも、そんなことが可能なのかすらわかりません。
template<typename S> struct definition {
rule<S> declaration;
rule<S> assignment;
rule<S> expression; //式
rule<S> sentence;
definition(const sentence_analyzer& self){
sentence
= declaration //
| assignment //
| expression
;
}
}
以下の様に切り替わるようにできるのでしょうか?
(1)
sentence
= declaration //
| assignment //
| expression
;
(2)
sentence
= assignment //
| expression
;
(3)
sentence
= expression
;
など。。。
よろしくお願いします
自己解決です。
definition の中でも、if文が使用できるのですね。
気づきませんでした(T-T)
if(self.bAssignment){
assignment = /* 代入のルール */ ;
} else {
assignment = nothing_p; //常に失敗
}
ツイート | ![]() |