プログラミング言語 KEMURI
紹介ページ http://www.nishiohirokazu.org/blog/2006/09/kemuri.html
見た目は見た目はBrainFu*kと似た言語です。
プログラムを見てみればわかるのですが、煙突から煙が上がっているような姿から命名されたそうです。
条件分岐や繰り返しが無いために(?)チューリング完全ではないらしいです。そのためか、"l(Lの小文字)"と"*"が予約語として確保されていて、将来的にはスタックの内容をBrainFu*kとして実行するのだとか。でもKEMURIの実態はスタックベースな言語で、レジスタベース(?)なBrainFu*kとは結構考え方が違う気がするから、プログラム作るの大変なんじゃないかと。(そもそも私はKEMURIでプログラミングなんて出来なさそうですが)
もちろん、Rubyインタプリタを作ってみました。実行すると、上のリンク先と同じKEMURIのコードが実行され、「Just Another Python Hacker,」と表示されます。(本当は「Just Another Ruby Hacker,」と表示したかったのですが、さっぱりKEMURIが書けなくて諦めました)
プログラムの中にある、もじゃもじゃがKEMURIのプログラムです。
def eval_kemuri(src)
stack = []
hello = "Hello, world!".unpack("C*").reverse
src.split(//).each do|ch|
case ch
when "`"
hello.each do |c|
stack.push c
end
when "\""
x = stack.pop
stack.push x
stack.push x
when "'"
x,y,z = stack.pop,stack.pop,stack.pop
stack.push x
stack.push z
stack.push y
when "^"
stack.push stack.pop ^ stack.pop
when "~"
stack.push 255 ^ stack.pop
when "|"
while !stack.empty?
print stack.pop.chr
end
when "l"
# reserved
when "*"
# reserved
else
#do nothing
end
end
end
if $0 == __FILE__
src = <<EOT
`"^^"^^^^"^^'"^^"^^'"^^"^^'"^^"^^"'"^^"^^`"^^"^^^^"^^"^^"^^"^^"^^'"^^"^^"'"^^"^^
`"^^'^^'"^^"^^'"^^"^^'"^^"^^'"^^"^^"'"^^"^^`'"^^"^^^^'"^^^'"^^"^^'"^^"^^'"^^"^^`
"^^"^^^^^^'"^^"^^'"^^"^^'"^^"^^`"^^"^^"^^'"^^^'"^^"^^'"^^"^^'"^^"^^^`'"^^"^^'"^^
"^^'"^^"^^'"^^"^^'"^^"^^'"^^"^^`"^^"^^^^"^^"^^'"^^"^^'"^^"^^'"^^"^^`"^^"^^^^'"^^
^'"^^"^^'"^^"^^'"^^^`"^^"^^^^'"^^"^^'"^^"^^'"^^"^^'"^^"^^`'"^^''^^'"^^"^^^'"^^"^
^'"^^"^^'"^^"^^`"^^"^^^^"^^"^^"^^^'"^^^'"^^"^^`"^^"^^^^"^^"^^"^^"^^''"^^^^'"^^"'
`'"^^"^^'"^^"^^'"^^"^^^^'"^^"^^'"^^"^^"'`"^^"^^^^"^^"^^'"^^"^^'"^^"^^'"^^"^^'"^^
"^^`"^^"^^^^"^^"^^"^^"^^"^^'"^^"^^"'"^^"^^`"^^'^^'"^^"^^'"^^"^^'"^^"^^'"^^"^^"'"
^^"^^`'"^^''^^'"^^"^^^'"^^"^^'"^^"^^'"^^"^^`"^^"^^^^"^^"^^"^^^'"^^^'"^^"^^`"^^"^
^^^'"^^"^^'"^^"^^'"^^"^^'"^^"^^`"^^"^^^^'"^^^'"^^"^^'"^^"^^'"^^^`^^'"^^"^^'"^^"^
^'"^^"^^'"^^"^^'"^^"^^`"^^"^^^^"^^"^^'"^^"^^'"^^"^^'"^^"^^`"^^"^^^^"^^"^^"^^^'"^
^^'"^^"^^`"^^"^^^^"^^"^^'"^^"^^^'"^^"^^^`'"^^"^^'"^^"^^'"^^^'"^^^^'"^^''`"^^"^^^
^"^^"^^^^^'"^^"^^'"^^"^^"'^"^^|
EOT
eval_kemuri src
end