Smile++
SmileBASIC でメタプログラミングをするためのフレームワーク
概要
SmileBASIC にメタプログラミング用の仕様を追加した独自言語「Smile++」で記述されたプログラムを、
プリプロセッサを通じて SmileBASIC のプログラムに変換する。
動作原理
プリプロセッサは文字列形式でソースコードを受け取り、パーサを用いて AST (抽象構文木) を生成する。
このとき Smile++ の独自構文が用いられている部分については、パース処理を一旦停止してそれを実行してからパース処理を再開する。
AST を変換するための独自構文が実行された場合、ここで AST の置き換えが発生する。
パース処理がすべて完了したタイミングで、AST を SmileBASIC のコードへ変換して出力する。
Smile++ 独自構文
SmileBASIC に以下の構文を追加し、プリプロセス時に作用させる。
属性 (Attribute)
AST に追加データ (実際には配列) である属性を付与する作用をもつ。
[@ ...]
: 式[@@ ...]
: 文[@@@ ...]
: ソース全体
拡張 (Extension)
AST と別途指定したものを引数として関数に渡してプリプロセス時に呼び出して、返された AST で上書きする作用をもつ。
[%(関数名) (第 2 引数), (第 3 引数), ...]
: 式[%%(関数名) (第 2 引数), (第 3 引数), ...]
: 文
Smile++ 拡張の開発
Smile++ でプリプロセス時に呼び出す関数を定義するプログラムを作成できる。