アーカイブ

長くて長い、構文の木 – Esolang Advent Calendar 2012(2日目)

この記事は、Esolang Advent Calendar 2012の2日目の記事です。

ぐらたん先生から、バトンタッチ! こんにちは、ぼんぷろです。

とうとう、12月なんですねー。

今年も開催されるという事で、今年受験生なのですが、なんとか書いてみました!初参戦です!
今回は、夏に興味本位で制作してみた、「VBCPP」(“ぶいびーしーぷらすぷらす”と読みます!)を使って、いろいろやってみます!

VBCPPとは

む、難しい…

説明が難しいので、プレゼンのスライドも同時に見てもらえれば…!

VBCPPは、VB100%[要出典]でできた、「クロス言語開発フレームワーク」的な存在ただのおもちゃです。

基本的な機能として、以下のような特徴があります。

  • パーサーをプラグインとして追加することで、コンパイルできる言語を増やすことができる
  • VBCPPによって提供する、共通ASTを使っているため、「ある言語から他の言語の要素を参照すること」などができる
  • 基本的に、データ型は.NET標準のものを利用していて、.NET Frameworkを標準で参照することができる
  • プラグインごとに設定できる、名前変換テーブルやライブラリ機能を利用することで、.NET Frameworkをその言語の仕様に近づけることができる

VBCPPの1つの利点として、「DSLを組み込める点」があります。
例えば、一部分だけをSQLを使って記述できたら、面白いですよね…!

まあ、言語特有の良い所はすべて実現する事は難しいし、実際VBCPPの実用性は皆無に等しいとも思っていますが、お遊びにはピッタリなんですよ…?

VBCPPの利用方法

  1. VBCPP標準ビルダを利用して、コマンドラインから利用する方法。
  2. VBCPPCoreライブラリのGeneratorを参照して、コード中からASTを渡す方法。
  3. VBCPPCoreライブラリのCompilerを参照して、コード中から”パーサープラグインのインスタンス”と”コンパイルしたいコード”を渡す方法。

1番目の利用方法

これは、そのまま実行するだけです。
なお、ソースコードの識別には、VBCPP標準ビルダの構文を利用します。
(なお、2番目と3番目では、この構文に縛られる必要がありません。)

サンプルコード

2番目の利用方法

これが、今回の記事で使用する方法です。
のちのち説明します!

3番目の利用方法

これは、主に自作IDEや俺々言語のバイナリ生成ライブラリとして利用する方法です。

で、難解言語ってどこにあるのさ

実は、2番目の利用方法にそのネタがあります。
VBCPPのASTは、それぞれが独立して存在することができるので、パーサーから扱っていくぶんには、そこそこ使いやすいです。パーツを組み合わせていく感じです。(個人的見解)

実はVBCPPのASTは、ほとんどのプログラムを”1行”で表現できるように設計されています。
そのコードがこちら。

1行AST

そう、冗長なのです。

上の画像は、AST式1文を1行にして、折り返し表示しています。
適度に、改行を入れてあげると、以下のようになります。(これでも1文です)

(ちなみにVBでは、改行は文の句切れと認識されるので、書くのが余計に大変だったり…)

以下、アピールポイントです!

  • 今どこを書いているのかわからなくなります。
  • 少しでもミスをするとエラーミスが大変です。IntelliSense等の入力支援や、エラー場所は、ほとんどあてにならなくなります。
    ([参考画像2]を参照してください。)
  • 最後に近づくにつれて、かっこが多くなります。
  • .NET Frameworkを利用できます。

参考画像2

VisualStudioのエラー画面

FizzBuzzを書いてみよう!

では早速FizzBuzzを書いてみます!

FizzBuzz on VB

とりあえず、VBのFizzBuzzです。

まあ、普通…ですよね?

FizzBuzz on VBCPP

ではでは、お待ちかねのVBCPPでのFizzBuzzです。

はい…
Newが波打っているのが、ご覧いただけたかと思います。

難解というより、超冗長だから難解なんですよね…(意味不明
(半分)意図的でないのだから、もしかしたら難解プログラミング言語の要件を満たしてないかもですが…!
[参考]: 難解プログラミング言語 – Wikipedia

もちろん、これも”Hello,world!”の例と同様に、改行なしでも表現できます。

ちょっとここで余談

実は、VBCPPにはもう1つのAST表現があります。(正確には、まだまだ考えています。)
それがこちら!(例としてHello,Worldの式を組んでいます。)

…結構すっきりしてますよね?(嘘
この式の特徴に関しては、上にあるコードのコメント部分をお読みください。
この表現方法を今回の記事で使わなかった理由としては、仕上がっていなかったというのもありますが、”Newが波打っている”のと”カッコしかない”というのをお見せしたかったからでもあるのです!

結局何が言いたいの?

難解プログラミング言語は、意外なところから生まれることもある!

以上です。
最後までご覧いただき、ありがとうございました!


次は、12月3日担当のうひょさんです!
うひょさんの記事は、レベルが高いので期待ですよー!

ではでは!