私は多項式を解析する働く文法(lexとbisonで書かれています)を持っています。それはあなたの標準的なテキストブックの計算機のような構文です。lexのC++ istream
Expr
: DOUBLE {$$ = newConstExpr($1);}
| Expr '+' Expr {$$ = newBinaryExpr('+', $1, $2);}
| Expr '*' Expr {$$ = NewBinaryExpr('*', $1, $2);}
| '(' Expr ')' {$$ = $2;}
;
私の問題は、レックスがyyinのためのFILE *を使用していることであり、私はC++はistreamからの入力を解析する必要があります。ここでは文法の非常に単純化したバージョンです。私はflex ++がFlexLexerクラスを生成することができることを知っていますが、それはBisonと噛み合うのが難しく、作成者自身も(生成されたレクサーファイルのコメントで)バギーです。
誰かがFILE *の代わりに入力としてC++ istreamオブジェクトを使ってflexスキャナとbisonパーサを使う良い方法を知っているのであれば、私は疑問に思います。
バイソンマニュアルの[example](http://www.gnu.org/software/bison/manual/bison.html#A-Complete-C_002b_002b-例)を読んだことがありますか?または[その他の](http://idlebox.net/2007/flex-bison-cpp-example/)[examples](http://www.thebinaryidiot.com/archives/2010/03/06/flex-bison -cpp-example /)googleが見つかりましたか? – rve
私はこれらのいくつかを見て、彼らが役に立たないと感じました。しかし、これらの例の1つは有望に見えます。私はそれを徹底的に調べます。ありがとうございました。 – Nick