HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2024
0114
ABATBelieverHSP3上で動くインタプリタ言語【宣伝&要望受付】0解決


ABATBeliever

リンク

2024/1/14(Sun) 13:15:31|NO.101019

HSP3上で動くインタプリタ言語を作ってみました。

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



この記事に返信する


記事削除

記事NO.パスワード
(質問が解決したスレッドは他の利用者に活用してもらうため、削除しないようお願いします)

NO.101019への返信

マスコット

好きなマスコットを選んでください。

名前

e-mail
HOME
  1. 初めて利用する方は、HSP3掲示板の使い方をお読みください。
  2. 不要部分の多い長いスクリプトの投稿は ご遠慮ください。
  3. 書き込みは自動改行されません。適度に改行を入れてください。
  4. スクリプトは小文字の<pre>〜</pre>で囲むと見やすく表示できます。

削除用パスワード

エラー発生時、再送信すると二重送信になることがあります。
回答が得られたら、お礼書き込み時に[解決]チェックしてください。
SPAM防止のためURLから始まる文章は投稿できません。
SPAM防止のため英文字のみの本文を投稿することはできません。

ONION software Copyright 1997-2023(c) All rights reserved.