KEMURIのインタプリンタ改訂版。
前回のバグの原因は仕様の勘違いでした。これで正常に動作するように。// HSPで記述されたKEMURIのインタープリタ 改訂版
#runtime "hsp3cl"
// エラーコードの定義
#enum ERROR_NO_ERROR = 0
#enum ERROR_UNKNOWN_COMMAND
#enum ERROR_STACK_EMPTY
goto *start
// スタック用命令をグローバル空間にて定義
#deffunc push int arg1
if count >= 0 {
stack(count) = arg1
count++
}
return
#defcfunc pop
count--
if count < 0 {
error = ERROR_STACK_EMPTY
return 0
}
return stack(count)
// 処理の開始
*start
mes "KEMURI インタープリタ v1.0"
mes "=========================="
mes "コマンドを入力してください"
dim stack, 16
gosub *get
gosub *exe
gosub *show
end
// コマンドを取得する
*get
command = ""
input command, 0, 1
getstr command, command // 改行コードを取り除く
return
// コマンドを解析し、実行
*exe
error = ERROR_NO_ERROR
repeat strlen(command)
switch peek(command, cnt)
case '^'
x = pop() : y = pop()
push x ^ y
swbreak
case '~'
x = pop()
push $FF ^ x
swbreak
case '"'
x = pop()
push x : push x
swbreak
case '\''
x = pop() : y = pop() : z = pop()
push x : push z : push y
swbreak
case '`'
s = "Hello, world!"
repeat strlen(s), 1
push(peek(s, strlen(s) - cnt))
loop
swbreak
case '|'
sdim s, count + 1
repeat count
x = pop() & $FF
poke s, cnt, x
loop
mes s
swbreak
default
error = ERROR_UNKNOWN_COMMAND
swbreak
swend
if error != ERROR_NO_ERROR {
errorPos = cnt
break
}
loop
return
// 結果やエラーの表示
*show
if error == ERROR_NO_ERROR {
mes "処理が正常に終了しました"
} else {
switch error
case ERROR_UNKNOWN_COMMAND
mes "エラー:規定されていないコードが見つかりました"
mes "利用できるのは\" ' ` ~ ^ |の6つのみです"
swbreak
case ERROR_STACK_EMPTY
mes "エラー:空のスタックから取り出そうとしました"
swbreak
default
mes "エラー:未知のエラーが発生しました"
swbreak
swend
mes "エラー発生箇所:" + (errorPos + 1) + "文字目の" + strmid(command, errorPos, 1)
}
return
2007年6月22日金曜日
KEMURIのインタプリタ 改訂版
登録:
コメントの投稿 (Atom)
2 件のコメント:
errorさんってインタプリタにも興味あるんですか?
電卓のスクリプトもありましたしね
僕も少し興味あります
開発wikiのインタプリタ企画を推し進めるのは君しかいない!と煽っておきます
そうそうHNは”りすと”です
このHNはこれに変えるか迷っている途中です
やっぱりHNは本名を連想させるのがいいのかもしれませんしねえ
僕の下の名前はヨシノリなので
それの逆さ読みです
リノシヨ
もしくは
レスポンス・ナンバー・44 と
お読み下さい
そうそう、相互リンクなんですけど
まだバナー書いてないものでスミマセン
それでもいいなら相互リンクしませんか?
コメントありがとうございます。
本名晒して良かったんでしょうか…?
問題ありましたら削除いたしますよー。
インタプリンタに興味があるというわけではなく、文字列操作全般に興味があるのです。HTMLタグの消去やCSVをHTMLのテーブルに書き換えるなどいろんなスクリプトを書きためています。
KEMURIは文字列操作というよりはスタックとエラー対策がメインでしたけれど。
電卓は昔からの難題で、最近ようやく実装方法が分かってきました。……再帰も好きなのかな?
特に今使っている言語に不満はないのでインタプリンタ企画は興味無いですね。他の皆さんがどんな言語をデザインするか、期待しています。
# こちらからリンクさせていただきました。これからもよろしくお願いします。
コメントを投稿