**マニュアル：芳ステム2025：yoshisutemu2025

**バージョン：0.0.073
**最終更新日：2025/10/12

**添削:AIのGrok様

**目次

1.はじめに

  *1.1.概要
  ** % 芳ステム2025は、HSP3.6を活用して開発した軽量スクリプト言語です。
  ** % スタックベースの計算モデルと中置記法風の構文を採用し、GUIによる直感的な操作を特徴とします。
  ** % Whitespaceやシェルスクリプトに着想を得て、シンプルかつユニークなプログラミング体験を提供します。

  *1.2.対象読者
  ** % このマニュアルは、HSP3や他のプログラミング言語の基本的な知識を持つ方を対象としています。
  ** % 簡単な漢字や英単語の理解があれば十分です、サンプルコードを通じて芳ステムの使い方を学べます。

  *1.3.このマニュアルについて
  ** % このマニュアルは、芳ステム2025の基本構文、機能、使用方法を解説します。
  ** % スタックベースのプログラミングやGUI操作を理解し、軽量スクリプト言語の設計思想を学ぶことを目指します。

2.「芳ステム2025」の概要

  *2.1.設計思想
  ** % 芳ステム2025は、「やさしいインタープリタの作り方入門」のサンプル言語と
  ** % Whitespaceのシンプルな構造に着想を得て開発されました。
  ** % HSP3.6の軽量性とGUI機能を活用し、RPGツクールのような直感的な操作感を目指しました。
  ** % また、Linuxやシェルスクリプトの影響を受け、簡潔な構文と柔軟なデータ操作を実現しています。

  *2.2.特徴
  ** % 特徴１：スタックベースの計算：スタックを用いたデータ操作に加え、
  ** % `var_reg`などのレジスタ風変数で柔軟な処理をサポート。
  ** % 特徴２：中置記法風構文：前作の後置記法から進化し、直感的な中置記法風の構文を採用。
  ** % 特徴３：GUI操作：HSP3.6のGUI機能を活用し、テキストボックスやボタンで直感的なコード入力と実行を実現。

  *2.3.用途
  ** % 芳ステム2025は、軽量なtoy言語として、プログラミングの学習や実験的なスクリプト作成に適しています。
  ** % スタックやヒープの操作、GUIプログラミングの理解、独自言語の設計を学ぶための教育ツールとしても活用できます。

3.基本的な概念

*3.1.データ型
  ** % 芳ステム2025は以下のデータ型をサポートします。

  *3.1.1.数値型（整数、浮動小数点数）
  ** % 整数（int）：32ビット整数（範囲：-2,147,483,648〜2,147,483,647）。例：`12`, `0`, `-3`, `1000`。
  ** % 浮動小数点数（double）：64ビット浮動小数点数（HSP3のdouble準拠）。例：`1.2`, `0.0`, `-3.14`, `1000.01`。
  ** % 判定：文字列が数値で始まり`.`を含む場合、doubleとして処理。

  *3.1.2.文字列型
  ** % 文字列（string）：`,`で分割した文字列（空白/タブ削除前の値を保持）。
  ** % 半角文字中心だが、全角文字も多分使用可能。例：`foo`, `bar,baz`, `こんにちは`。

  *3.1.3.真偽値型
  ** % 真偽値（bool）：`true`（1）または`false`（0）。数値演算では1 or 0として扱う。例：`true`, `false`。

*3.2.芳ステムの構造

  *3.2.1.stack構造
  ** % スタックはLIFO（Last-In-First-Out）方式で、最大1024要素を保持。`push`/`pop`で操作。
  ** $ 演算子は基本スタックを対象に行います。スタック用命令なんかもあります
  ** $ スタックの要素はモジュール変数のため。int/double/string/bool/演算子等柔軟に格納出来ます

  *3.2.2.heap構造
  ** % ヒープはアドレス指定でデータ保存、最大1024要素をサポート。
  ** $ ヒープの要素はモジュール変数のため。柔軟に格納出来ます。演算子は格納出来ません
  
*3.2.変数

  *3.2.1.概要
  ** % 芳ステム2025はグローバル変数を提供し、ヒープやスタックでデータを管理。
  ** % setter系やmove系命令で操作。

  *3.2.2.芳ステムで扱う変数の種類 REG系
  ** $ レジスタといいつつ変数です。例えばmoveとかレジスタを経由した方が
  ** $命令が少なくなるので実装しました
  ** $ var_reg：レジスタ基本変数
  ** $ var_reg_r：レジスタ演算返り値用変数
  ** $ var_reg_tmp_1st, var_reg_tmp_2nd, var_reg_tmp_3rd, var_reg_tmp_4th：
  ** $一時データ保持用変数。レジスタ演算引数用変数

  *3.2.3.芳ステムで扱う変数の種類 その他系
  ** $ var_stack : stackに付属する変数
  ** $ var_heap var_heap_address：heapに付属する変数

*3.3 コメント
  *3.3.1.単一行コメント
  ** % `//`から始まり、行末までがコメントです。
  *3.3.2.複数行コメント
  ** % 複数行コメントは未対応。複数行は`//`を各行に使用してください。

4.構文
*4.1.基本構文
  ** % 芳ステム2025は一行または複数行（`input multiline`）でコードを実行。構文の処理手順は以下の通り：
  ** % コメント：`//`以降を無視。
  ** %トークン分割：`,`で分割し、最初のトークンは命令として処理。
  ** % 命令識別：空白/タブを削除し、小文字化後、`str2hash4heap`でハッシュ値を生成、命令を検索。
  ** % 処理：2番目以降のトークンは数値（`int`, `double`）または文字列として処理。
  ** % 命令プレフィックス：
  ** % `!`：演算子（例：`!+_ass`）。
  ** % `&`：コマンド（例：`&heap_set`）。
  ** % `$`, `%`：ユーザー/システム用（未実装）。
  ** % 例：`heap_set num_1 123 int, push 42 to stack`で、ヒープに`num_1:123`、スタックに`42`を追加。
  ** % 注：引数の型チェックは簡易的で、柔軟な入力を受け入れます。

*4.2.制御構造
  ** $ 制御構造はJUMP系命令だけです
  ** $ 引数にジャンプする命令と加算してジャンプする命令があります
  ** $ 小さすぎる値と大きすぎる値はスルーします
  ** $ regの値をレジスタとしてJUMPしたりします

*4.3.入出力
  *** # 標準入力、標準出力、ファイル入出力について説明します。
  ** $ 時間的制約からIO機能を実装出来なくて
  ** $ 現在のIO機能はdialogのみとなっています

*5 サンプルコード
  ** $ マニュアルのsampleフォルダと芳ステム2025のsampleフォルダに入ってます
  ** $ マニュアルから参照出来ますが、実行はマルチモード時で読み込んで実行して下さい

*6 エラーとデバッグ
  *** # [言語名]で発生する可能性のあるエラーの種類、エラーメッセージ、およびデバッグのヒントについて説明します。
  *7.1.エラーの種類
  ** % 例: スタックが空でpop（要素0以下）、スタック超過（1024超）、0除算、型エラー（例: 文字列を数値演算）。
  *7.2.エラーメッセージ
  ** $簡易メッセージです。小型言語なので
  *7.3.デバッグのヒント
  ** $一応show系命令があるので、そちらを利用してください

8 制限事項
  ** % スタックの最大長さは1024要素、ヒープの最大長さは1024要素です。
  ** % スクリプトは文字列と文字列配列で管理
  ** $ mesboxの制限で64kbくらいまで格納出来ると思います

EOF