32nd Diary

過去の日記
today: , yesterday: , total:
2010年
1月
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31

めーるあどれす:ruby -r base64 -e 'puts Base64.decode64("dGFrQG5vMzIudGs=")'


トップ «前の日記(2010-01-11 (Monday)) 最新 次の日記(2010-01-14 (Thursday))» 編集

2010-01-12 (Tuesday) [長年日記]

Yet Another Misa

プログラミング言語 Misa というしゅごいぴゅろぎゅらみんぎゅ言語をみちゅけらったのおぉぉぉ!!!

Misa は文法上、Brainf**k というプログラミング言語の亜流言語です。 Brainf**k とは、みさくら語に直訳すれば おつむでち**しごき という意味ですが、Misa は Brainf**k のプログラムもそのまま実行することができます。

あれ?これBrainf**kか。Yet Another Brainfuckの焼き直しで互換処理系作れない?

やってみた。

#!/usr/bin/env ruby
# -*- coding: utf-8 -*-
# yam.rb - Yet Another Misa

iseg = ARGF.read
iseg = iseg.
	gsub(/[^\]」』\[「『\+あぁおぉ-っッ\.!,?>→~ー<←★☆]/, '').
	gsub(/[\]」』]/, 'end;').
	gsub(/[\[「『]/, 'while dseg[dx] != 0;').
	gsub(/[\+あぁおぉ]/, 'dseg[dx] += 1;').
	gsub(/[-っッ]/, 'dseg[dx] -= 1;').
	gsub(/[\.!]/, 'print dseg[dx].chr;').
	gsub(/[,?]/, 'dseg[dx] = $stdin.getc;').
	gsub(/[>→~ー]/, 'dx += 1;').
	gsub(/[<←★☆]/, 'dx -= 1;')

eval(<<INIT + iseg)
dseg = Array.new(32768, 0)
pc = 0
dx = 0
INIT

puts ''

実行結果。

ccarbon% cat hello.misa | ruby1.9 yam.rb
yam.rb:17:in `eval': (eval):4: syntax error, unexpected keyword_end, expecting $end (SyntaxError)
...ちしdx += 1;dseg[dx] -= 1;end;がdseg[dx] -= 1;dseg[dx] -=...
...                               ^
	from yam.rb:17:in `<main>'
carbon% 

ごきげんよう…正規表現が曲がっていましてよ… じゃなくて、たぶん互換処理系のコードにはなっているんだと思うが、 マルチバイトの扱いがうまくいってないように思える。

今日はこれをネタにする予定だったので、もうおわり。 ん、ああ。後日こっそりとなおせそうならなんとかしてみます。 こんなんでチケット切りたくないし…

carbon% ruby1.9 -v 
ruby 1.9.1p376 (2009-12-07 revision 26041) [i386-darwin10]

そういえば、まったく関係ないんですが、さくらやが全店閉店するらしいですね。

Tags: Hack Ruby Moe
[]
本日のPingbacks(全0件)