マクロ定義案
tIfElse = template ( <[/ if ($jyoken) { $statements } $elseif <[{ else if($jyoken) { $statements } }*]> $else <[{ else { $statements } }?]> /]> );
こんな感じでマクロ定義というか、テンプレートとかにつかえたらいいなぁと。
もはや意味不明ですが。。。
1.まず、<[]>っというカッコでクオートします。ツリーを中に書くよってやつです。
で、$変数名でそこに変数名が入ります。
例)
var a = "true"; var b = "printf(\"hello world\n"); var t = <[ if($a){$b} ]> );
このとき、tは
if(true){printf("hello world\n");}
ですと。ただし、ツリー構造を持っていると。
2.次に$が展開されたくないときのために、<[/ /]>は展開されないとします。
例)
var a = "true"; var b = "printf(\"hello world\n"); var t = <[/ if($a){$b} /]> );
このとき、tは
if($a){$b}
ですと。
そして、perlの正規表現のように、ツリーのパターンマッチングができるカッコを容易します。<[{ }*]>は0回以上にマッチングし <[{ }+]>は1回以上に <[{ }?]>は0回または1回にマッチします。さらに、カッコは前の文字にくっつく性質を利用して名前を付けます。
<[/ if ($jyoken) { $statements } $elseif <[{ else if($jyoken) { $statements } }*]> $else <[{ else { $statements } }?]> /]>
その言語で表現するとこの形になります。
これをテンプレートとして扱うために、template関数に渡して使おうとすると、、、。
tIfElse = template ( <[/ if ($jyoken) { $statements } $elseif <[{ else if($jyoken) { $statements } }*]> $else <[{ else { $statements } }?]> /]> );
このようになると。tIfElseはテンプレート操作用オブジェクトといった感じになったらよいかなぁと思います。
要はツリー構造もちの正規表現をうまくできたらいいのになぁってことなんですが。
難しい。。。