Hotplate

関数型のテンプレートエンジンで計算

「関数型のテンプレートエンジンで何が出来るか - terazzoの日記」の続編ですよ。 但し中途半端の上に、かなりお遊びで。 関数型のテンプレートエンジンの定義はこの辺りで。 各テンプレートが独立した静的スコープを持つ テンプレート(の一部)がファースト…

関数型のテンプレートエンジンで何が出来るか

まず関数型のテンプレートエンジンの定義なんだけど、とりあえず以下を満たすもので考える。 各テンプレートが独立した静的スコープを持つ テンプレート(の一部)がファーストクラスのオブジェクトとして扱える。 変数に代入したり、引数で渡せる。 折角なん…

関数型のテンプレートエンジンを作ってみる(0.3) - 条件分岐・繰り返しの導入

前回追加したdefineタグ、insertタグに加えて、今回は条件分岐タグ(ifタグ)と繰り返しタグ(foreachタグ)を導入する。 ifタグは以下のように、条件が満たされた時にその内部がレンダリングされる。 // 会員のみメッセージを表示 {if condition="customer.isMe…

関数型のテンプレートエンジンを作ってみる(0.2.3) - 実行系を書く

前回の続きで、テンプレートエンジンのエンジン部分を書く。 今回実装したところまでをVers_0.2というブランチにしてみた。 方針 0.1の時点ではモナド則とか考えたけど、あんまり純粋さには拘らない。 パース結果をASTとして実行部分は別個に評価器として実…

関数型のテンプレートエンジンを作ってみる(0.2.2) - パーサを書く

前回の続きで、前回作ったトークナイザからパーサを書く。パーサの作成には引き続きJParsecのライブラリを使用する。 おさらい&今日のミッション 前回作ったnewTokenizer(Terminals)で生成するトークナイザ(字句解析部)は、Stringを受け取りListを生成するP…

関数型のテンプレートエンジンを作ってみる(0.2.1) - パース用のトークナイザを書く。

関数型のテンプレートエンジンを作ってみる(0.2) - スコープ・変数定義の導入 - terazzoの日記で定義したタグのパーサを書く。 パーサの実装にはJparsec*1を使用する。シンボルと属性名はJparsecに用意されているTerminals.Identifierを、属性値のExpression…

関数型のテンプレートエンジンを作ってみる(0.2) - スコープ・変数定義の導入

前回は、テンプレート中のプレースホルダ(変数)を置き換える部分を作ったので、次はテンプレート中で変数を定義できるようにする。また、変数の有効な範囲(スコープ)を明確にする。スコープは静的スコープにしたい。 要素がプレースホルダだけなら単純に「{…

関数型のテンプレートエンジンを作ってみる(0.1) - 変数の置き換え

最もシンプルなテンプレートエンジンは、あらかじめテキストを用意しておき、テキスト内の特定の箇所(プレースホルダ)を随時好きな値で置き換えて使用するようなものだと思う。とりあえずそれから実装する。 「圏論やモナドが、どうして文書処理やXMLと関係…

関数型のテンプレートエンジンを作ってみる

以下のあたりで言及していた、「関数型言語としてのテンプレートエンジン」というのがどういうものなのか、とりあえず作ってみる事にする。 HTMLテンプレートと関数型言語について - terazzoの日記 テンプレートエンジンと関数型言語(思案中) - terazzoの日…