ttki's diary

プログラミング好きな人の日記です

インタプリタを作ってみた

こんにちは。 今回は、インタプリタを作ってみたので紹介したいともいます。

名前は CON です。まだ、開発を始めたばかりなので出来ることが少ないですが、for や if を使うことはできます。

構文

//Hello world!
println "Hello world!"
print "Hello world!\n";//セミコロンはなくてもよし

//変数 英文字で始まり A-Z a-z 0-9 _ を使っていれば変数です
//今のところ、数字しかサポートしていません
0var //NG
var1 //OK
arr[0] //OK
arr2[0, 0] //OK 多次元配列の場合は、コンマでくぎる。
//代入
i = 12
n = i + 2 * (i / 2)
// 変数の宣言は必要なし。

//if文 elseも使えます. ifの最後には end を使ってださい.
i = 12
if i == 12
 println "True"
else
 println "False"
end

//for文 forと言っていますが、ほとんど while ですw
i = 0
for i < 10
 println i
 i = i + 1 //明示的に加算する必要あり
endfor // for の最後は endfor で閉じる

// 標準関数たち
print "Strings" //改行なしで画面に出力
println "Strings" //改行あり 出力
input i //画面から入力し i に代入
now = clock // clock - CPU時間の取得
random = rand // rand - 乱数の取得 xorshift

//演算子
+ - * / % == != >= <= > < //ぐらいかな?

説明が雑ですいません。 とりあえず FizzBuzz してみます。

s = clock
i = 0
for i < 30
    if i % 15 == 0
        println "FizzBuzz"
    else
        if i % 5 == 0
        println "Buzz"
    else
        if i % 3 == 0
        println "Fizz"
    else
        println i
    end
    i = i + 1
endfor
e = clock

print "FizzBuzz にかかった時間"; println (e - s) / clock_sec;
//こんな感じ

ソースは GitHub で公開中 (スパゲッティww

http://www.github.com/maekawatoshiki/project-con-interpreter-/