2013年5月9日木曜日

にほんごであそぼ(仮)

名前が思いつかないので(仮)つきで。

こんな感じでプログラムが書けたらいいな、というのを。
『ほげ』は3
『ふが』は『ほげ』+2
『ほげ』を表示する
『ふが』を表示する
『ほげ』*『ふが』を表示する
「----」を表示する
『ほげ』<10の間、ここから
  『ほげ』は『ほげ』+1
  『ほげ』を表示する
ここまで
「おしまい」を表示する
とりあえず実際に処理できる仕組みをためしに用意してみた。 gawkとluaで。
それっぽく動けばいいや、なのでアレな感じだけど。
BEGIN{
print "VAR={}"
}
{
line = $0
line = gensub(/^[  \t]+/,"","g",line)
line = gensub(/^『([^『』]+)』は(.+)$/,"VAR[\"\\1\"]= (\\2)","g",line)
line = gensub(/^(.+)の間、ここから$/,"while (\\1) do","g",line)
line = gensub(/^ここまで(.*)$/,"end","g",line)
line = builtinfunction(line)
line = literal(line)
print line
}

function builtinfunction(line){
line = gensub(/(.+)を表示する$/,"print (\\1)","g",line)
return line
}

function literal(line){
line = gensub(/『([^『』]+)』/,"VAR[\"\\1\"]","g",line)
line = gensub(/「([^「」]+)」/,"\"\\1\"","g",line)
return line
}
awkのスクリプトはこんなの。これをたとえば nhng.awkって名前で保存しておいて、さっきのスクリプトはtest.nって名前で保存しておく。

gawk -f nhng.awk test.n | lua52

こんな感じで実行すると、こうなる。まだこれだけ。




















ちなみに中間出力(luaのスクリプト)はこんな感じ。


0 件のコメント:

コメントを投稿

Google