2011-01-16から1日間の記事一覧

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を読む