boost::spirit で質問

解決


しょしんしゃ  2005-04-22 03:34:36  No: 57143  IP: [192.*.*.*]

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
  ;

など。。。

よろしくお願いします

編集    削除
しょしんしゃ  2005-04-22 19:32:52  No: 57144  IP: [192.*.*.*]

自己解決です。
definition の中でも、if文が使用できるのですね。
気づきませんでした(T-T)

if(self.bAssignment){
  assignment = /* 代入のルール */ ;
} else {
  assignment = nothing_p; //常に失敗
}

編集    削除