検索1の続き。今回は構文解析の仕組みを入れてみた。

template <typename T, bsize_t S = 4>
class default_parser {
template <typename T, bsize_t S = 4>
class c_parser : public default_parser<T, S>{
template <typename T, bsize_t S = 4>
class cpp_parser : public c_parser<T, S>{

まずはこの 3つのクラスを作って(差し当たり C++ のみ)与えられた行の構文解析をし、
前回の『行修飾状態』を行クラスに追加する。
c_parser とか cpp_parser はまず表示などの具合も見たかったので埋め込み。
いずれは動的に設定を読み込むようにして default_parser を汎用的にすればいっかと思ってる。

このクラス自体は、テキスト管理クラスに

    default_parser<uint8_t, MBUFSIZE>* m_parser;

ぶら下げ、テキスト読み込み後に

    m_parser = new cpp_parser<uint8_t, MBUFSIZE>();
    if (m_parser != nullptr){
        m_parser->init(&m_edit, &m_line);
    }

動的に割り当て。入り口はdefault_parser に固定とする。

あとは全行分、一行ずつ解析を呼び出すだけ。
一行ずつにしたのは、後の編集で行の内容が変わった場合に対応するため。

解析自体は、IDE を作るつもりではないので単純な文字比較に近いノリ。
とりあえず、文字リテラル、文字列リテラル、行コメント、ブロックコメントに対応してみた。
結果はこんな感じ。

スクリーンショット 2019 03 19 1.00.02

コメントを追加