インデントなどを使用する非常に複雑な設定ファイル用のパーサーを作成しています.Lexを使用して入力をトークンに分割することを決定しました。問題は、Qiエラー報告ツール(on_error
)を、文字ではなくトークンのストリームで動作するパーサで使用する例が見つからないことです。Boost.Spirit:Lex + Qiエラー報告
on_error
で使用されるエラーハンドラは、エラーが入力ストリーム内のどこにあるかを正確に示すことができるものがあります。すべての例では、イテレータのペアからstd::string
を作成して印刷します。しかし、もしLexが使われるならば、イテレータは文字ではなくトークンのシーケンスに対するイテレータです。私のプログラムでは、無効なイテレータタイプに気づく前に、これはstd::string
コンストラクタでハングするようになりました。
私は、トークンがその値として入力ストリームに一対のイテレータを保持できることを理解しています。これはデフォルトの属性タイプです(タイプがlex::lexertl::token<>
の場合)。しかし、私のトークンに構文解析に便利なもの(int
、std::string
など)が含まれていれば、それらのイテレータは失われます。
QiでLexを使用しているときに、入力ストリーム内の位置を示す人にやさしいエラーメッセージを生成するにはどうすればよいですか?そのような使用の例はありますか?
ありがとうございました。
@justsomebody編集のおかげで:) – sehe