2009-01-01から1年間の記事一覧

一年振り返る

Scalaで言語を作ったあと、ゲーム作って、 haXeで言語を作って、rubyとphpで説明を書き始めてテストを書き始めました。 一年通してひさしぶりにソフトウェアの仕事をやってられてよかったです。 勉強会も嫌になるくらいあってよかったです。 2010年の目標は…

最近のWonderfl

まず、WonderflっちうAction Script 3.0の投稿サイトがあります。ご存知の方は今さらだと思いますが。http://wonderfl.net/でここで、ボロノイ図というのが3Dで動くというのを作ってたりしました。http://wonderfl.net/code/c5536c152ccbbbde7fe66fd1d1f6da8…

TDC忘年会とか

26日にやるという話だったので行って来ました。後輩に仕事頼んで景気付けに遊びまショーいう話だったのでちょうどタイミングもよかった。 だけど、寝てたほうがいいという感じになっていて、ぎりぎり遅刻していってしまいました。で、うーん、viの話とか、py…

putvchamp(-1,540882); http://www.verbatim.jp/senshuken/?id=540882

景観エディタ

私はかつてRPGにはまって、ロールプレイングゲームの原点であるD&Dのダンジョンマスターをやったりもしていました。 そうすると、オリジナルの世界地図を作りたくなるもので、最初は手書きで地図を描いてみたりしました。 リアス式海岸のようなところはでこ…

Compact言語(C式)の提案

プログラミング言語にはいくつかの系統があります。 アセンブラ一族はマシン語を人間の読める形にしたもので、ニーモニックと呼ばれる命令とパラメータの組み合わせです。 パスカル一族はbeginで始まりendで終わります。 Rubyはbeginなしのendで終わる一族。…

定数畳み込みというか項書き換えシステムっぽい何か。

php

eクラスが式オブジェクトで、phpだと関数名とクラス名は同じもの使えるのでnewを書かなくてすむようにするためだけにe関数があります。 で、evalCompでコンパイル用の定数畳み込みっぽいことをする計算をしてグローバル変数の$chgという書き換えがあったかど…

D式: Lisp パワー, Dylan スタイル

DylanのD式の論文http://people.csail.mit.edu/jrb/Projects/dexprs.pdfを読もうといつもIntroductionだけ読んで挫折していたので、目次だけ作ってみました。1 Abstract 1 要約 2 Introduction 2 序論 2.1 Successes and Failures 2.1 成功と失敗 2.2 Lisp P…

新しいC言語かどうかを判定する方法

新しいC言語かどうかを判定するひとつの方法は、そのパーサを300行程度でかけるかどうかである。 Go言語はalgol68とそれほど変わらないという記事があったようなのだけど、まったくそのとおりだと思う。 結局はBNFベースの言語だ。 objective Cの別シンタ…

Excel読み込みできるCSVファイルをダウンロードする

phpでCSVをダウンロードする場合、file put csv mb convert variables ダウンロード php 標準出力 stdout あたりのキーワードで検索して作ります。 でも毎回作るのもめんどいし、まとまって作ってあると便利なので作りました。これで、 h_sakurai php csv で…

簡単なインタプリタのテスト付きバージョン

ぜんぜん、簡単ではない、簡単なインタプリタにテストをつけて書き直しをしました。 14回でここまで作るソースもあるのですけど、解説書く前にいろいろやることがあるとおもうので まだまだ先になりそうです。 Go言語 C言語の後継としていい線いってそうな…

OAuthライブラリのストレージエンジンの例の翻訳

php

http://oauth.googlecode.com/svn/code/php/example/SimpleOAuthDataStore.php をとりあえず、翻訳してみたので載せておきます。 ライセンスはMIT ライセンスです。 http://oauth.googlecode.com/svn/code/php/LICENSE.txt

プログラミング言語の作り方の書き方

今日もプログラミング言語を作っていました。 否、プログラミング言語の作り方の効率的な書き方を考えていました。 だいたいのプログラミング言語の完成系はイメージがついているのですが、その過程をどれだけシンプルに書くか? これは非常に難しい問題です…

お詫び

土曜日を日曜日だと思い込んでいて片平堂にいかないでしまいました。 オータムセミナーの日にちを間違えて覚えていて行かないでしまいました。

仙台hackathon#02

土曜日は、仙台オータムセミナーの携帯サイトの2009年バージョンの対応をしてきました。 昨日は、片平堂で仙台hackathon#02をしてきました。今週は結構疲れてたのと計画から離れたことをしてたので進捗具合はそれほどよくなかった。 でも、いずれ必要になる…

仙台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ではおなじみの概念ですが、他の言語では聞きなれないものかと思います。 識別子は変数名…