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

仙台hackathon#01

土曜日は片平堂さんのオフィスを借りて、勉強会をしてきました。 勉強会というか、もくもく作る会。。。近所の洋食屋さんのご飯がうまかった。おのおのの目的に向かって意見を聞いたり、言ったりしてきました。 katahiraさんのは、AIRのアプリ h_sakuraiは式…

意味解析

最後に、意味解析を行うクラスを作ります。 class Calc def initialize @parser = Parser.new end def evalute src exp = @parser.parse(src) execute(exp) end def execute exp if exp.instance_of?(Array) case exp[0] when "+" execute(exp[1]) + execute…

構文解析

次は構文解析器(Parser)を作ります。今回作るのは優先順位無しの構文解析器です。構文解析器いうと堅苦しいのでパーサと呼ぶことにします。以下にパーサのプログラムを示します。 class Parser def parse(src) @lexer = Lexer.new(src) tokens = @lexer.toke…

字句解析

まずは、数字や変数名、記号などに分割する字句解析のプログラムを作ってみましょう。 def lex case $src when /^[\r\n\t ]*([0-9]+)(.*$)/ when /^[\r\n\t ]*([+*\-\/()])(.*$)/ when /^[\r\n\t ]*(.*)(.*$)/ return nil end $src = $2 $1 end $src = "1+2*…

今回作る計算機の仕組み

計算機といってもすぐに計算できるわけではありません。大きく分けて次の3つの段階に別れています。1.数字や、変数名、記号等に分割する。(字句解析) 2.木構造を作る。(構文解析) 3.計算する。(意味解析) プログラムの文字列は、字句解析で数字…

インストール

ここでは、Rubyのインストールの方法を簡単に説明します。そんなの、いらねーよっていう人は次の章に進んでしまってください。 ダウンロード Rubyのホームページはこちらです。 http://www.ruby-lang.org/ja/Rubyのダウンロードはここから http://www.ruby-l…

Rubyで作る簡単なインタプリタ(1)

今回はRubyでプログラミング言語を作ります。プログラミング言語といってもいろいろありますが、今回作る言語は式をベースとしたJavaScriptのようなインタプリタ言語です。第一回目は簡単な計算機を作ります。対象はある程度プログラミング言語の知識がある…

シルバーウィーク

この週末は非常に実りの多い休みとなりました。盛岡行ってプリン食べつつ俺言語説明したり、仙台で俺言語作ったり、家で俺言語の作り方書いたりと、俺言語しかしてませんけど(笑)。俺言語だけしかしてないというのがすばらしいなぁっと。 特に、片平さんに…

Rubyで作る簡単なインタプリタ(1)

PHPで書いたLISP級マクロ付きインタプリタ

LISP級マクロ付きのインタプリタをPHPで書いてみました。 作る順番は、だいたい決まってきて、必要ない機能はある程度削られてますけど、 一番本質的な部分はつかめると思います。以下ソースです。

Rubyで書いたLISP級マクロ付きインタプリタ

LISP級マクロ付きのインタプリタをRubyで書いてみました。 書き方は、じっくり書いていきますが、haXeで書くより綺麗に書けたと思います。 次はphpでざくざくっと書いてみようと思います。以下ソースです。

Sendai Hackathon#0

今日は、片平さんのオフィスにお邪魔させてもらい、勉強会をしてきました。 で、名前を勝手にSendai hackathon#0 とすることにしました。ということで、 Sedai Hackathon#0終了です。 14時〜21時の7時間、しりをたたき、たたきたたかれつつおのおの作り…

919スピーカーズ

盛岡で開催された919スピーカーズに行って「記号戦隊オペレーターズ」っていう話をしてきました。 演算子順位法とかいうと難しそうなのでキゴウ戦法って名前を変えて説明してみたというかんじで。例によってプレゼン資料がぎりぎりで書いてたので、完成度低…

haXeで作るプログラミング言語(14)

Lisp相当のマクロが使えるように変更今回の連載の最終回です。 Lisp相当のマクロを実装します。 マクロの定義はmac(変換前の式)変換後の式と書くことにします。 例) mac(mul('a,'b))a*b上のようにマクロを定義しておき、 mul(2,3)とすると2*3が計算されて6が…

haXeで作るプログラミング言語(13)

縁起を担いで2回にわけます。 シンボル 今回はシンボルという概念を導入することで、識別子と文字列を分けて考えることができるようにします。 シンボルはRubyやLispではおなじみの概念ですが、他の言語では聞きなれないものかと思います。 識別子は変数名…

クイックスピーカーズに行きマース

9/19に盛岡で行われるquick speakersに行って来ようと思います。 とりあえず、言語は式ベースのほうが簡単ゆえに美しいって話をしてこようと思ってます。 いつも同じ事で申し訳ない気もするんだけどきにしない。 とにかく、今年一年で、ScalaとhaXeで書いて…

haXeで作るプログラミング言語(12)

関数がクロージャになるように変更 みなさんは、クロージャってご存知でしょうか? 正確に説明となると難しいですが、簡単にいうと親の関数の環境も参照できる関数をクロージャといいます。 親の親の関数の環境も、親の親の親の関数の環境も、と祖先の環境を…