note〜系で読み込み、splitで空白ごとに分割して解釈する形式です。
言語仕様とサンプルコード、実行環境を開発してます。
言語仕様
・拡張子はisc。ただし拡張命令を追加した場合は変えたほうがいいかも。
・.batの記述方式。
主なコマンド
・popup - dialog命令の0型
・choice - dialog命令の2型
・if - 分岐。0.13時点では「choice」コマンドでの選択で分岐できる。
サンプルiscコード
popup IScriptのまくあけじゃあああ!\nこれはダイアログを表示するよ choice 選択肢は表示されましたか? \nこれは「はい」、「いいえ」を選ばせるよ! if choice=Y{ popup 選択肢で「はい」を押したらこれが出てくるよ! } if choice=N{ popup 選択肢で「いいえ」を押したらこれが出てくるよ! } これは無効なコマンドの例だよ!エラーが出るよ!
インタプリタのサンプル(言語仕様0.13に順守)
gosub *IScript_GUI stop *IScript_GUI scr8="use" screen 8,280,200 gsel 8,2 title "IScript GUI" IScriptPath="" pos 10,20:input IScriptPath,240,20 pos 110,160:button gosub "Close",*IScript_END objsize 20,20:pos 250,20:button gosub "...",*IScript_Path objsize 260,20:pos 10,40:button gosub "RUN",*IScript_RUN gsel 0 return *IScript_Path dialog "isc",16,"" if stat = 0 : stop gsel 8 IScriptPath=refstr objprm 0,refstr gsel 0 return *IScript_RUN if IScriptPath=""{return} notesel IScriptBuffer noteload IScriptPath IScriptDialog="容量"+strsize+"Byte\n総行"+notemax+"行\nこのファイルを信頼しますか?" dialog IScriptDialog,2,"Last Check" if stat=7{return} gosub *IScript_InterPreter return *IScript_InterPreter IScriptIgnoreFlag="N"//無視フラグ破棄 IScriptChoice="6"//選択は最初は「Y」判定とする repeat notemax noteget IScriptSTR,cnt split IScriptSTR, " ", IScriptSpilit if IScriptSpilit(0) = "}" {IScriptIgnoreFlag="N"} if IScriptIgnoreFlag="N"{ switch IScriptSpilit(0) case "}" : case "popup" if stat>1{dialog IScriptSpilit(1),0,"IScript: "+IScriptPath} swbreak case "choice"//選択肢付きdialogコマンドに相当。はい、いいえの値が「IScriptChoice」に保存され、ifコマンドで使用される。 if stat>1{dialog IScriptSpilit(1),2,"IScript: "+IScriptPath : IScriptChoice=stat} swbreak case "if"//if分岐。最後の「choice」コマンドの選択肢で分岐される。あっていない場合、「IScriptIgnoreFlag」が有効になりコマンドを実行しない。「}」コマンドで初期化 if IScriptSpilit(1)="choice=Y{" { if IScriptChoice!="6"{IScriptIgnoreFlag="Y"} } if IScriptSpilit(1)="choice=N{" { if IScriptChoice!="7"{IScriptIgnoreFlag="Y"} } swbreak case "" : swbreak//空行は無視 default if IScriptSpilit(0) != "}"{dialog ""+str(cnt+1)+"行目に問題が発生しました。\n\n「"+IScriptSTR+"」\nは無効なコマンドです。\nなお"+str(stat-1)+"の引数があります。"} swbreak swend } loop dialog "スクリプトはインタプリタにより正常に終了されました。\n完走です!" return *IScript_END scr8="" gsel 8,-1 gsel 0 return
・すべてMITライセンスです。インタプリタも言語もどんどん使ってね
・実装してほしい命令や改良あったらここでもGithubにでも
最新情報
つ https://github.com/ABATBeliever/IScript_interpreter