プログラミング言語 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