PCP: C++ Preprocessor 1.0.a1

高木です。おはようございます。

先日予告した通り、PCP: C++ Preprocessorのα版を公開します。
まだまだ実装しきれていない機能も多いですし、不具合も残っているとは思いますが、それなりに使えるレベルにはなってきたと思います。

>> PCP: C++ Preprocessor 1.0.a1のダウンロード

一応ドキュメントも入っているのですが、どんな感じか雰囲気をつかんでいただくためにサンプルを貼っておきます。

<?= pcp\pascal_case('This is a pen'); // パスカルケース ?>

<?= pcp\pascal_case('This is a pen', true); // キャメルケース ?>

<?= pcp\snake_case('This is a pen'); // スネークケース ?>

<?= pcp\convert_to_ucn('これはテストです。'); ?>

<?= // 構造体の生成
  pcp\struct([
  'struct' => 'test', 
  [
    'a' => pcp\int_t, 
    'b' => pcp\double_t,
    'c' => 'int (*%s)()',
    'd' => [ '*' => [ 'fn' => '%s', [], pcp\int_t ] ],
    'e' => [ '*' => [ pcp\int_t, 'const' ] ],
  ]
]); ?>

<?= pcp\static_assert(0); // 言語やバージョンに応じて出し分け可能なstatic_assert ?>

<?= // 列挙体の生成
  pcp\enum([
  'enum' => ['A', 'class', 'short' ],
  [
    'a',
    'b',
    'c' => 10
  ]
]); ?>

<?= // 関数頭部の生成
  pcp\fn([
  'fn' => [ 'foo', 'extern', 'inline' ],
  [ 'a' => pcp\short_t, 'b' => [ '[]' => [ pcp\int_t, 'static', 10 ] ] ],
  pcp\int_t
]); ?>

<?= // pcp\typeのサンプル
  pcp\type([
  '*' => [ [ 'fn' => '%s', [], pcp\int_t ], 'volatile', 'const' ]
]); ?>

<?= // インデントされたコードを1行化
pcp\single_line(<<<EOT
  struct B
  {
    int a;
    int b;
  }
EOT
); ?>

<?= // 文字列リテラルの生成
pcp\string_literal(<<<EOT
abc
def	ghi
EOT
); ?>

上記のコードを処理した結果は下記のようになります。

#line 1 "C:\msys64\home\ユーザー名\a.pcp"
ThisIsAPen
#line 2

thisIsAPen
#line 4

this_is_a_pen
#line 6

\u3053\u308c\u306f\u30c6\u30b9\u30c8\u3067\u3059\u3002
#line 8

struct test
{
  int a;
  double b;
  int (*c)();
  int (*d)();
  const int* e;
}
;

#line 20

static_assert(0);

#line 22

enum class A : short
{
  a,
  b,
  c = 10
};

#line 32

extern inline int foo(short a, int b[static 10]);

#line 39

volatile const int (*%s)()
#line 44

struct B { int a; int b; }
#line 54

"abc\ndef\tghi"
#line 61

#line指令はオプションで外せますが、デバッグ中は出力するようにしたほうが便利ですね。

とりあえず今回は単に公開するだけにしておきます。
追って、いろいろ説明していければと考えています。

>> PCP: C++ Preprocessor 1.0.a1のダウンロード

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)