2009-09-23から1日間の記事一覧

意味解析

最後に、意味解析を行うクラスを作ります。 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で書いてみました。 作る順番は、だいたい決まってきて、必要ない機能はある程度削られてますけど、 一番本質的な部分はつかめると思います。以下ソースです。