BACKTRACE

ひとまずposition_iteratorを使って行番号を計算し、BACKTRACEルールを実装しました。
今日の差分
ビルドを通しただけで動作確認すらできていませんが、とりあえず昨日までのテストケースに影響ないのでコミットしました。
いい加減な実装なので、おそらくルールの引数に別のルールの戻り値を渡すと行番号がずれると思います。


bjam_grammar内ではposition_iteratorを使っていますが、外部インタフェースは

template<class IteratorT>
struct HAMIGAKI_BJAM_DECL bjam_grammar_gen
{
    typedef IteratorT iterator_type;

    static parse_info<IteratorT>
    parse_bjam_grammar(
        const iterator_type& first, const iterator_type& last,
        context& ctx, const std::string& filename, int line);
};

のようになっていて、素の反復子を渡せるようにしました。
その結果、bjam_grammarを再帰的に適用する箇所でposition_iteratorを分解することになってしまいました。
使い勝手が悪いので後で直します。


あと、position_iteratorのファイル名って邪魔な気がします。
反復子のコピーが重くなりそうですし、一度設定したら変えることもないので、bjam_grammarの場合はcontextのフレーム情報に持たせておけば十分です。
行末の扱いもbjamと微妙に違うので、そのうち似た自作アダプタに置き換えるつもりです。