日々の記録。

プログラミングのメモや感じた事などを記録。

cQueryという C/C++言語の構文解析木をjQuery風にアクセスするライブラリがあったら

ツールを作るときに楽になるかもしれない? 既に存在するのかもしれない?

例 user.hにある構造体に対して「yaml形式の文字列を作成する関数」を作成してみる。

コードイメージ.(ruby)

cQuery('user.h').structs.each do | struct_obj |
  puts struct_obj.generate_yaml
end

user.h

 struct User {
   CString name;
   CString email;
   Date birthday;
 };

出力例

UserYaml.h

  CString User::toYaml() const;

UserYaml.cpp

  CString User::toYaml() const {
    CString temp;
    CString yaml;
    yaml += "{";
    temp.Format("%s: %s,", "name", this->name);
    yaml += temp;
    temp.Format("%s: %s,", "email", this->email);
    yaml += temp;
    temp.Format("%s: %s", "birthday", CQueryHelper::dateToYaml(this->birthday));
    yaml += temp;
    yaml += "}¥n";
    return yaml;
 }

cQueryHelper.h

文字列への変換方法が不明なものは、テンプレート関数を用意する。

  static CString CQueryHelper::dateToYaml(const Date& date);

cQueryHelper.cpp

 static CString CQueryHelper::dateToYaml(const Date& date) {
   return "";
 }

問題点

  • ヘッダの依存関係の解決方法
  • 文字列の扱い(この例ではMFCのCStringを想定とした)
  • ポインタや参照、配列の扱い
  • テンプレートの扱い

C++は言語仕様が複雑だから、実際に作ろうとすると色々問題がありそうだ。