Skip to content

Soyo-Wind/Flags

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

23 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Flags

このプログラミング言語は、Flag形式のスクリプトファイル(.flg)を読み取り、状態(フラグ)に応じてアクションを実行する、C# 製のインタプリタです。ステートマシン的な動作が可能。


BNF

<program>        ::= <line> { <line> }

<line>           ::= <flag> ',' <actions> ';'
                  | <flag> ';'

<flag>           ::= <identifier>

<actions>        ::= <action> { ';' <action> }

<action>         ::= '!' <identifier>              ; 削除
                  | '$' <output_value>             ; 出力
                  | '_'<identifier>':'<qur>               ; メモリに追加
                  | '=' <identifier> '\' <string>  ; 値代入
                  | <identifier>                   ; 通常フラグ実行(トリガー)

<output_value>   ::= '"' <string>                 ; 文字列リテラル
                  | '~' <identifier>               ; メモリの値

<qur> ::= <string> | <int>

<identifier>     ::= <letter> { <letter_or_digit> }

<letter>         ::= 'a' | 'b' | ... | 'z' | 'A' | ... | 'Z' |
<digit>          ::= '0' | '1' | ... | '9'
<letter_or_digit> ::= <letter> | <digit>

<string>         ::= { <any_char_except_backslash_or_quote> }
<int>            ::= {<digit>}

📦 主な機能

  • テキストファイルからスクリプトを読み込み実行
  • 条件に応じたアクションの分岐処理
  • メモリ(フラグと値)による状態保持
  • デバッグモードによる実行トレース表示

🛠️ 動作環境


🚀 実行方法

🔧 ビルド

dotnet build

▶️ 実行

dotnet run -- path/to/script.flg [-d|--debug]

Tip

オプション -d または --debug をつけて実行すると、以下の情報が表示されます: 読み込んだ全フラグと対応アクション 実行後のメモリの内容(どのフラグが追加・削除・更新されたか)


📄 スクリプト形式

スクリプトは1行ごとに フラグ名 と アクション列 (プレフィックス+値) を定義します。

書式

フラグ名, アクション1; アクション2; アクション3;

hello world

adam, _start;
start, $Hello world; _end;

このスクリプトの流れ:

初期フラグ adam がメモリにあるため処理開始

start フラグが追加される

hello world が表示される

end フラグが追加され、終了

🔤 対応アクション一覧

プレフィックス 動作内容
_フラグ名:str 指定フラグ(str型)をメモリに追加
_フラグ名:int 指定フラグ(int型)をメモリに追加
!フラグ名 指定フラグをメモリから削除
$"文字列 文字列リテラルを標準出力に表示
$~フラグ名 指定フラグの Value を出力
=フラグ\値 指定のフラグに値を代入
(その他) 未知のアクションとして例外をスロー

🧠 メモリ構造

Flag は Name(フラグ名)と Value(オプションの値)を持つ構造体またはクラスです。

実行開始時点で adam フラグが自動でメモリに追加されます。

end フラグがメモリに存在すると、ループを抜けてプログラムが終了します。

📁 スクリプトファイル例

adam, _init;
init, $"Start!; _step1;
step1, $"Next Step; =data; $~step1; _end;

出力例:

Start!Next Stepdata

About

Anlock Programming lang

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages