esoteric

Brainf*ck 括弧の対応

さて、Brainf*ck で括弧の対応関係は必須なんだろうか。要は、こんなのはエラーになるべきなのだろうか。 ] 構文木版では、パースエラーになる、括弧の対応をもって文法規則にしているんだから当たり前だ。 一方その場実行版ではエラーにならない、「]」実行…

Racc で Brainf*ck 、趣味的な実装

その場実行で Tape と Source クラスを作って抽象化してみる。 class BrainF_ckParser rule# class BrainF_ckParser expression : | expression TERMINAL { send(val[1][0]).send val[1][1], send(val[1][2]) } end # class BrainF_ckParser ---- inner attr…

Racc で Brainf*ck 、その場で実行の為に

対応する括弧を行き来する感覚を大事にする為にその場で実行する方向で考える。ソースを行き来できるようにするわけだ。その為に、ソースとソース上の位置を示すポインタを導入する。 class BrainF_ckParser rule# class BrainF_ckParser expression : | exp…

Brainf*ck の Hello, wold!

そうそう、Brainf*ck のテスト用にちょっとA 一文字表示 ++++++ [> ++++++++++ < -] > +++++. Hello, world! >+++++++++[<++++++++>-]<.>+++++++[<++++>-]<+.+++++++..+++. [-]>+++++++[<++++++>-]<++.>++[<------>-]<. >+++++++++[<+++++++++>-]<++++++.>++[…

Racc で Brainf*ck 、構文木

取り敢えずルールはこんな感じかな。 program : expression expression : | expression bracket | expression TERM bracket : '[' expression ']' 終端記号は、「TERM」テープの扱いや入出力と括弧 '['、']'。一方「program」はまあ、最終的な左辺値として全…

Racc で Brainf*ck

そして Brainf*ck、「奇妙な言語」p.46 数値データ格納用のテープの存在(先頭位置 0 から始まる不定長一次元配列)とテープ上の位置を示すポインタを想定した上で 「>」ポインタを右に一つ動かす 「 「+」ポインタ位置の数値を一つ増やす 「-」ポインタ位置の…

Racc で HQ9+ 、ちょっと

というわけで、HQ9+言語の処理系を作ったのだけど、二点ほどちょっとした事を試してみよう スキャナの yiled nil スキャナ def scan @source.each_char{ |hq9p| yield [hq9p, nil] if /[HQ9\+]/ =~ hq9p } yield nil end # def scan この、スキャンの終了を…

Racc で HQ9+

そうしたら HQ9+言語を作ってみよう、言語自体の説明は「奇妙な言語」p.32 にある。 H があったら「Hello world!」 Q があったら Quine、実行中のソースの一覧 9 があったら 99本のビール文書 + があったらカウンタの値を 1増やす class HQ9Plus rule# class…

「Hello world! 言語」再び

前記、スキャナを別メソッドにする、そしてその辺の呼び出しは yyparse を使う、@queue のようなものは必要なくなった。initializeメソッドで @sourceインスタンス変数にソースを格納するようにしてみる。あと、デバッグオプションは OptionParser と OpenSt…

Raccで作る奇妙なプログラミング言語

Rubyで作る奇妙なプログラミング言語 ~Esoteric Language~作者: 原悠出版社/メーカー: 毎日コミュニケーションズ発売日: 2008/12/20メディア: 単行本(ソフトカバー)購入: 8人 クリック: 148回この商品を含むブログ (69件) を見る を読んだ。奇妙な言語の紹…