2011-01-01から1ヶ月間の記事一覧

Pelomyを改造する

C言語系統の言語を継承する言語を考えている私としましては、やっぱり、if(a)b else cのほうがいいはずとか、 マッチングはswitch文を拡張したような形がいいはずだ!とかいう考えがあるので改造してみました。 あと、a.b.c(3)なんていう風に書くとエラーに…

tricks/test.d

テストとテスト用のプログラムが記述されている。ということで、非常に大雑把に全体を読んでみました。 次はマクロレイヤーあたりが気になるのでマクロについて詳しく読んでみたいと思います。

valueconv.d

値を変換するプログラムが入っている。 polemy2dではpolemyのデータをDのデータに変換する。 d2polemyはその逆といった感じ。

value.d

Value抽象クラスを継承したStringやInt等の値を定義してある。

runtime.d

実行時に動作させる、プリミティブなランタイムライブラリ で、名前とレイヤと関数をaddPrimitive関数を使って登録している。

layer.d

レイヤーの列挙と、どのレイヤーかをチェックする関数がまとめられている。

fresh.d

たぶん、新しいユニークな文字列を返す。

failure.d

エラー処理周りについての実装がある。

_common.d

共通で使うimportが列挙されているので、これをimportすればいいというもの。

lex.d

parse.dで使われている字句解析を行うのがこのプログラムだ。 レキサーを作って返す関数と、レキサークラス、 あと、レキサーから返されるトークンクラスがある。 正規表現などは使わずにまじめに字句解析しているので速そうだ。

ast.d

パーサが返す抽象構文木を表すクラス群を定義してあるのがast.dである。 内容はいたってシンプルだ。 ASTクラスが抽象クラスになっていて、文字列クラスや値クラスがASTクラスを継承する形になっている。 細かい処理はSimpleClassにまとまっていてmixinして…

parse.d

まずは、パーサをlexer(字句解析器)から作る関数がある。 で、作ったパーサでパースして返すようになっている。 パーサはパーサクラスで定義されていて、 下降型のパーサである。 parse関数から各文法要素に対応した関数を呼び出すようになっていて、Strin…

eval.d

評価器クラスが定義されている。visitorパターンではないけど、visitorパターンっぽいことを実現している。evalメソッドが面白いところだ。 メソッドの型とクラスの型をチェックして対応する型のeval_メソッドを呼び出している。 いちいち、visitor,acceptせ…

repl.d

mainから呼ばれてるクラスがREPL REPLはEvaluator(評価器)やTable(表)やValue(値)を持っている。

main.d

parseArgvで引数のパース mainは引数によって、 ライブラリ指定がされていればライブラリのコードを実行したのち ファイルを実行するか、 replLoopを実行する。Dでは配列の先頭からのとりだしがpopFrontなんだなぁ。

Polemyを読む

phpでAMF0

Flashと通信を行う場合の方式の1つにAMFというものがあります。 現在AMFにはAMF0とAMF3の2つの実装があります。 AMF3はActionScript3にあわせて作られた新しい実装です。 色々と改善されているのですが、処理速度的にはAMF0のほうが速くなるのではないかと…

構文木はどう処理するか?

構文木はインラインアセンブラの場合は、アセンブラの抽象構文木に変換された後、ホスト言語のコンパイル結果と混じって1つのコードを出力することになるでしょう。コード出力部が十分小さければ、実行時にJITすることも同じロジックを使って行えるようにな…

演算子空間と文法空間

インラインアセンブラは asm {}の中身はアセンブラとして構文解析されました。インラインアセンブラを作る場合、新しい演算子空間に入ったところで文法も変わり、抽象構文木は別物にすることになるでしょう。ホスト言語の文法に対して、ドメイン特化言語の文…

演算子空間の実装方法

次に実装方法について考えます。 具体的なJSONを使って記述した演算子表を以下に示します。 { infixes:{100:"+",200:"*"}, operatorSpace:{ asm:{ extends:"root", infixes:{100:"-",200:"/"} } } }infixes は中置演算子の表です。oparatorSpace が演算子空…

演算子空間と文法空間

k.inabaさんのPoemyの実装が公開されていました。 レイヤーという概念がなかなか面白い言語です。 そこで、レイヤーからインスパイアされて考えたことを以下に書きます。 結構まとまってないので納得がいかないなぁと思いつつ、数日たってしまったので、公開…

ゲーム

あと、yahooモバゲーのDivineいうカードゲームにハマってしまって、 クリアできるところまで行ってしまった。なんか、勝てそうで勝てないのが悔しくて、思わずもう一回、 もう一回って繰り返してしまうという。http://yahoo-mbga.jp/game/12003651/play課金…

フラッシュのワークフロー

年末年始は、flex4をゴリゴリ。flash catalystが凄いらしいので使ってみる。 htmlをそのまま、mxmlに書き換えた感じに出来ると何かと嬉しいんじゃまいか。 ってことで、そんなライブラリと言うか開発手法を考えてて面白い。 とりあえず、htmlで作る感じでPHP…

あけましておめでとうございます

あけましておめでとうございます。 今年も、ぼちぼち、言語を作っていきます。