🌸 「なでしこ」
>
🍯 「貯蔵庫」
大石泉すき言語インタプリタ (プラグイン)
🌟新規
📒一覧
🔌
🔍検索
🚪ログイン
大石泉すき言語インタプリタ (プラグイン) 📖
「大石泉すき言語」の非公式インタプリタです。
プログラム:
(→大)
# 「大石泉すき言語」インタプリタ (非公式) # 大石泉すき言語: https://github.com/as-is-prog/oi-s-lang # 定義されている関数: # ●(INPUTでSRCを)大石泉すき # 文字列INPUTを入力としてプログラムを実行し、出力された文字列を返す。 # INPUT:入力文字列 # SRC:ソースコード # ●(INPUTとOUTPUTでSRCを)カスタム入出力大石泉すき # 入力関数と出力関数を指定して、プログラムを実行する。 # INPUT:入力関数 (引数なしで、1件 (1文字) 読み込んで数値を返す) # OUTPUT:出力関数 (1引数で、引数として与えられる数値を (文字として) 出力する) # SRC:ソースコード # これ以外の関数や変数・定数は内部用で、モジュール外からの使用は推奨しません。 変数の命令列は空配列。 変数の命令ポインタは0。 変数のデータメモリは空配列。 変数のデータポインタは0。 変数の入力関数は関数() -1を戻す。ここまで。 変数の出力関数は関数(V) ここまで。 ●データ取得とは もし、データメモリ@データポインタをNAN判定ならば データメモリ@データポインタは0。 ここまで。 データメモリ@データポインタを戻す。 ここまで。 ●(Vに)データ設定とは Vと0のORして、データメモリ@データポインタに代入。 ここまで。 # ステップ関数 # 真を戻す:命令に記録された飛び先に飛ぶ # 偽を戻す:次の命令の実行に進む ●ポインタインクリメントとは データポインタを1増やす。 偽を戻す。 ここまで。 ●ポインタデクリメントとは データポインタを1減らす。 偽を戻す。 ここまで。 ●データインクリメントとは データ取得して、1を足して、データ設定。 偽を戻す。 ここまで。 ●データデクリメントとは データ取得して、1を引いて、データ設定。 偽を戻す。 ここまで。 ●データ入力とは 入力関数を実行して、データ設定。 偽を戻す。 ここまで。 ●データ出力とは データ取得。 出力関数を[それ]でJS関数実行。 偽を戻す。 ここまで。 ●ゼロジャンプとは データ取得して、0と等しいかを戻す。 ここまで。 ●非ゼロジャンプとは データ取得して、0と等しく無いかを戻す。 ここまで。 定数の命令辞書は{ "大石泉": {関数}ポインタインクリメント, "愛してる": {関数}ポインタデクリメント, "すき": {関数}データインクリメント, "好き": {関数}データデクリメント, "すき!": {関数}データ出力, "すき?": {関数}データ入力, "いずみん": {関数}ゼロジャンプ, "イズミン": {関数}非ゼロジャンプ, }。 ●(INPUTとOUTPUTでSRCを)カスタム入出力大石泉すきとは # 命令列をパースする 定数のソースコードはSRCを文字列変換。 定数の新命令列は空配列。 変数のソースポインタは1。 変数の飛先スタックは空配列。 ソースポインタが(ソースコードの文字数)以下の間、繰り返す 変数の最長命令は空。 変数の最長処理はNULL。 命令辞書を反復 ソースコードでソースポインタから(対象キーの文字数)文字抜き出して対象キーと等しいならば もし、(対象キーの文字数)が(最長命令の文字数)超ならば 最長命令は対象キー。 最長処理は対象。 ここまで。 ここまで。 ここまで。 もし、最長命令が空と等しく無いならば 定数の命令は{ "命令": 最長命令, "処理": 最長処理, } もし、最長処理が{関数}ゼロジャンプと等しいならば 飛先スタックに新命令列の要素数を配列追加。 違えば、もし、最長処理が{関数}非ゼロジャンプと等しいならば もし、飛先スタックの要素数が0以下ならば 「{カッコ}{最長命令}{カッコ閉}の飛び先が見つかりません。」のエラー発生。 ここまで。 定数の飛先は飛先スタックから配列ポップ。 定数の飛先オブジェクトは新命令列@飛先。 命令$飛先は飛先+1。 飛先オブジェクト$飛先は新命令列の要素数+1。 ここまで。 新命令列に命令を配列追加。 ソースポインタを(最長命令の文字数)増やす。 違えば ソースポインタを1増やす。 ここまで。 ここまで。 もし、飛先スタックの要素数が0超ならば 定数の飛先要素は新命令列@(飛先スタック@(飛先スタックの要素数から1を引く))。 「{カッコ}{飛先要素$命令}{カッコ閉}の飛び先が見つかりません。」のエラー発生。 ここまで。 # 実行状態を初期化する 命令列は新命令列。 命令ポインタは0。 データメモリは空配列。 データポインタは0。 入力関数はINPUT。 出力関数はOUTPUT。 # 実行する 命令ポインタが(命令列の要素数)未満の間、繰り返す (命令列@命令ポインタ)$処理を実行。 もし、それならば 命令ポインタは(命令列@命令ポインタ)$飛先。 違えば 命令ポインタを1増やす。 ここまで。 ここまで。 ここまで。 変数の簡易入力データは空配列。 変数の簡易入力ポインタは0。 変数の簡易出力データは空。 ●簡易入力とは もし、簡易入力ポインタが(簡易入力データの要素数)未満ならば 定数のデータは簡易入力データ@簡易入力ポインタ。 簡易入力ポインタを1増やす。 データを戻す。 違えば -1を戻す。 ここまで。 ここまで。 ●(Vを)簡易出力とは 簡易出力データは簡易出力データにCHR(V)を追加。 ここまで。 ●(INPUTでSRCを)大石泉すきとは # v3.7.10 現在では「文字列変換して空で区切る」でも同じことができる # 将来サロゲートペアを考慮する仕様に変更されるリスクを考え、直接 JavaScript を用いる 「((s) => String(s).split(""))」を[INPUT]でJS関数実行。 簡易入力データはそれに{関数}ASCを配列マップ。 簡易入力ポインタは0。 簡易出力データは空。 {関数}簡易入力と{関数}簡易出力でSRCをカスタム入出力大石泉すき。 簡易出力データを戻す。 ここまで。
プログラムを実行
⭐ みけCAT 作
タイトル:
大石泉すき言語インタプリタ (プラグイン)
ライセンス:
MIT (改変可/表示)
タイプ:
wnako
タグ:
アドベントカレンダー2025
,
プラグイン
利用バージョン:
3.7.11
作成日時:
2025/12/18 01:22
公開の投稿
ログイン
して★を付けよう!
📝作品を編集
作品公開情報
📍この作品のURL:
📍アプリ(即時実行)のURL:
📍アプリ(実行ボタンあり)のURL:
📍ブログパーツ:
上記HTML↑をブログに貼り付けることでアプリを埋め込めます。
📍ライブラリ直リンク - 『!「***」を取込』で使うとき:
📍なでしこハブ (最新版の反映は1日後):
ソースの確認
編集履歴の確認
通報数:
0
通報って何?