ilog

雑作業

ハッシュテーブルまわりを若干。 なんか昔、ハッシュテーブルが使い物にならないとか書いたんだけど、使いかたがわかったので、そっちに変更。 今気付いたんだけど、あれ書いたのが一年前の話か…ふーん… ハッシュテーブルの部分だけは、asdfの頃のをそのまま…

色々ドキュメントっぽいもの。

紹介するときに困るので、昔書いた概要を修正。 http://morihyphen.hp.infoseek.co.jp/prog/ilog.html あと、ちょっと前に書いたけど途中で止まってるチュートリアルっぽいものも続きが書かれることはなさそうなので、上げておく http://morihyphen.hp.infos…

仮想マシン化

今朝、通勤途中、おもむろに、ILogScriptをバイトコードコンパイラ+仮想マシンな構造にしようとか、思った。これの動機は、速度とか、スタック管理だとか、そういうのもあるんだけど、一番大きな理由は、「インタプリタとしてはそこそこ動くようになってしま…

相変わらず説明が足りてない!

http://beautiful.homelinux.net/~sky-software/diary/?date=20050204#p01 http://edward.dip.jp/20050120.html#p03 えーと、リファラより、いくつが誤解があるようなので、書いとこう…こういう基本的なところの説明を飛ばすから、僕の説明はわかりにくくな…

さくっと続き

http://d.hatena.ne.jp/ABA/20050131#p1 スライダーが欲しいとのことなので、スライダも付けてみた。Windowsではトラックバーと呼ぶらしい。 あと、if文も。 http://morihyphen.hp.infoseek.co.jp/files/sakutto-0131.zip 中のilogとsupport_win32.cを上書き…

おとといので何が足りてないのかはわかってきた。一番必要なのは、内部エラーしたときのメッセージだ。今はSEGVすると、「SEGVしました」としか出てこないけど、スクリプトのバックトレースを出すようにしたほうがいい。まあ、最近になってGCCのエラーメッセ…

ちょっとしたUIをさくっと作りたいランゲージ

ネタ元は、こちら→id:ABA:20050118 もともと、このネタに関しては「HSPとかひまわりとかでいいんじゃないかな」くらいに思ってて、そこらへんの流れで、HSPコンパイラでも書いてみようとするも、「型無し言語をわざわざコンパイルするメリットは薄い」だとか…

ちょっと長めのスクリプトを書いてみてんだけど、なかなかいい感じだ。今で1000行弱。細かいバグはそれなりにあったけど、致命的な部分は今のところ特になし。あと、コード書くスタイルが決まってくると、型無し言語でも大丈夫になってくる。スタイルが暗黙…

ありがとう、Valgrind。

libcのmallocの中でSEGVする… それは、それは、恐しい状況。よーするに、バッファを超えて書いてるみたいな感じ、というか、まさにそれだ。 んで、まさに、さっきまで、そういう状況だったのである。 「もう無理かもしれない…」 そんな状況で、(以下略) え…

型無し言語は嫌いのような気がしてきた

そんな今更… いや、こう、型無し言語使ってると、超ad-hocコードというか、そういうのになってしまうので、あんまりよろしくない。 あと、ILogは引数チェックを全然やってないので、リスト渡すべきところで、ただの値を渡したりすると、簡単にSEGVする。 ど…

前作った演算子順位パーサのインターフェースを昨日作ったパーサのインターフェースと組み合わせられるように変更。 これで、昨日の括弧付き四則演算のパーサが var input = stream.open_rstream( options.input_filename ); var lextable = [ ["[0-9]+":`TO…

パーサできた

いや、嘘です。できたのはできたんですが、全然ダメダメなので、もっと練り直さないと使いものにならない…orz きのうのより、括弧付き四則演算が、こんな感じ 再帰を適当にしてるので、全然ダメダメだ…というか、これだと自分に再帰できない…結局括弧が対応…

パーサmemo 続き

わかった。パーサを返す関数だ。 こいつを使うことで、新たな文法を追加したり、yaccみたいに別文法を用意したりすることなく、拡張性が高く、それなりに読みやすいパーサを結構簡単に書くことができるのだ。多分。(超適当) 実装する側としても難しい部分…

パーサ

昨日に引き続いて構文解析のほうも書き換えようと思ったのだけど、ここで、止まる。 今、ILogで前提としているのは、「再帰下降 + 演算子優先順位」という方法だ。これを簡単に行うために、トークンの並びによって分岐を行うseq_match文を作ったのだし、演算…

字句解析

多分作業終了。と。 var lexer = lang.lexer.lexer; var table = lang.lexer.token_table; var input = stream.open_rstream( "test/langlexer.ilog" ); while ( true ) { var tok = lexer.next_token( input ); puts( tok.value ); if ( tok.value==`TOK_EO…

で、今年はILogで色々コンパイラ書こうかなー、とか思うところであります。思ってるだけなんだけど。 上のリソース用参照カウントGC付き言語っていうのもやってみようとか、考えてはみたんだけど、継続して実装できるかは微妙。 とりあえず、まずはILogScrip…

オプション対応

で、specsを理解したところで、ILogにオプション対応。ilogcをコンパイラドライバにして、コンパイラをilog1に変更…って書いても多分僕にしかわからない。 要するに、今までできなかったファイル名渡しが可能になったということです。 $ ilogc --script-file…

RTL

ああああ。わからん。RTLの構造は全然わからんからRTL関連のエラーが出たらどうしようもないような気がしてたんだけど、ついに、今日、そんな感じになってしまった。 sample.seni: In function `sample_loop': sample.seni:1: error: unrecognizable insn: (…

演算子順位構文解析

ほい、できた。 using gcc; var opparser_table = [ [[`TOK_MULT:MULT_EXPR],[`TOK_DIV:CEIL_DIV_EXPR]], [[`TOK_PLUS:PLUS_EXPR],[`TOK_MINUS:MINUS_EXPR]] ]; var parser = Parser.create_oppre_parser( opparser_table ); var lextable = [ ["[0-9]+":`TO…

メモ。

型チェック言語はPrologみたいなのにしたらいいような気がしてきた。 Prologみたいなのってなんだよ。実際、Prologなんて殆ど知らないしなぁ…どうなんだろうか。ちょっとオーバースペックのような気がするけど。 で、あんま関係無いんだけど、左辺値というの…

昨日の

結局型チェックなんて考えてもどうしようもないので、当たってくだけろ、ということで、昨日のを実装してみた。字句解析も構文解析も実行もほとんどILogのものを流用できるので、すぐできた。のは、いいんだけど、これが便利かどうかを検証するにはどうした…

型チェックってどうすればいいかっていうメモ

と、したいところなんだけど、ちゃんとした型システムって作ったこと無いからどういうのが必要なのかわからんのだよなぁ… とにかく、型チェックっていうのは組み合わせだ。いっこいっこのパターンは量が多くないんだけど、型の数に応じてパターンの数が組み…

0.0.1 リリース

軽く休憩しようかなーとか思って、ふらりと外へ出たらその足でゼルダ買ってて7時だったのが気が付いたら10時になってた。しかし、アレだな。リンクはカワイイ系のキャラとして攻めてくるつもりなのだろうか。ILog 0.0.1 と、まあ、それはいいとして、specsを…

よし、あれもできたし、これもできたし、いい感じに進んでますよ。明日早起きできれば、明日の朝リリースもできるかもしれない。ただ、早起きできるかはわからないのと、まだ潰せていない課題がこれからどうなるかわからないので、微妙なところ。 とりあえず…

字句解析

よし、大体できた。と。 var line = 0; var table = [ // 基本は ["パターン" : 値] のペア // マッチしたら next_token関数は // [値:マッチデータ] というペアを返してくる。 ["[a-zA-Z_][0-9a-zA-Z_]+":2], ["=":4], ["\\[":5], ["\\]":6], ["\"[^\"]*\""…

コンパイラ用途

ILogが、コンパイラとして使いやすいかどうかは、死活問題なのだ。それは、Perlが文字列処理に便利だとか、そういう便利/便利じゃない程度の話ではなくて、そう、ILog自身のアイデンティティに関わる問題なのだ、とか、そういう話。 まず、用途を限定した、…

さて、ファイルやろうか…と、思ったけど、やっぱ面倒なのであとまわしにして、 先にローカル変数出せるようにしよう。 と、思って作業しようとしたんだけど、ローカル変数は既に動くじゃないか…なんてこった。 こうなると、GCCとのインターフェース的には次…

つまらない文章ばっかり書いてる暇があったらコード書けって自分に対して思った。 とりあえずバックトレース拾ってくるようにはできた。 いや、簡単な作業なんだけど、ちょっとつまらない作業であるだけに、なかなか実装が進まないのだ。っていう言い訳。 ま…

TODO

そろそろ忘れないように再開しないとな… 次は面倒だけど、ずっと残しておくのも気持ち悪いので、行番号の設定と、それを使ってバックトレース拾える例外処理の実装に決めた。 ただ、GCCのインターフェースは不正な値処理は--enable-checkingオプション付きで…

PARM_DECLの罠

変数を示すDECLには、DECL_TYPEというマクロが使える。これは名前のとおり、その変数の型を示す値を拾ったり設定したりするマクロだ。 今日、引数の値を別の変数に代入しようとしたときに、何をどうやっても、変数のRTLのモードがBLKmodeになってしまうとい…