SPRICT (仮称) - Script Processor with Interpreter-like Command Translator


なにこれ Edit

  • 綾織上で実装された簡易スクリプトエンジンです。
    • RTS の台本外部化機能 + ATalk のコマンド実行機能
    • ソースはテキストファイルまたは DB を選択可能
    • 綾織でやろうとするとどうしても面倒くさくなりがちな部分をどうにかできればいいなあ

概念 Edit

#section.option:sequence
*:tags  script

セクション Edit

  • 何に対するスクリプトであるのかを指定する。
  • ex) 時報イベントに対するスクリプト → TimeSignal
オプション Edit
  • ex) 午後 1 時の時報 → TimeSignal.13
シーケンス Edit

エントリ Edit

エントリ = タグ + スクリプト

タグ Edit
  • allow/deny
スクリプト Edit
  • TalkW 関数で直接吹き出しに出力されるか、文字列として実行結果を得ることが可能。

拡張 Edit

  • Sprict_useExtension(true);
  • boolean SprictExtension_execCommand(string cmd, string cmd_name, boolean ignore_output, string &out)

メモ Edit

script Edit

  • なんだこれ
  • 合ってるかどうか微妙
    <Script> ::= <Statements>
    
    <Statements> ::= <Statement>*
    <Statement> ::= <Literal> | <Braced>
    <Literal> ::= LITERAL
    <Braced> ::= '{' <BracedStatement> '}'
    
    <BracedStatement> ::= <IfStatement> | <ChoiceStatement> | <RandomStatement> | <CommandStatement>
    
    <IfStatement> ::= <IfThenStatement> | <IfThenElseStatement>
    <IfThenStatement> ::= 'if:' <IfCondition> ';then:' <Statements>
    <IfThenElseStatement> ::= 'if:' <IfCondition> ';then:' <Statements> ';else:' <Statements>
    <IfCondition> ::= <Statements> CONDITION <Statements>
    
    <ChoiceStatement> ::= 'choice:' <ChoiceItems>
    <ChoiceItems> ::= <ChoiceItem> ( ';' <ChoiceItem> )*
    <ChoiceItem> ::= CHOICETAG ':' <Statements>
    
    <RandomStatement> ::= '(' <RandomItems> ')'
    <RandomItems> ::= <RandomItem> ( '|' <RandomItem> )*
    <RandomItem> ::= <Statements>
    
    <CommandStatement> ::= CMDNAME ( | ':' <CommandArgument> )
    <CommandArgument> ::= <Statements>
    
  • コマンド引数をスクリプトとして扱うか、値として扱うか
{(a|{(b|c)}|d)}
{(b|c)}
b

DB Edit

  • section
  • option
  • seq
  • entry

To Do Edit

  • ファイルをパースした後 DB に保存しておいたほうがコードがわかりやすくなるかもしれない
  • (done:2006/12/27) どうせモテないしレジスタに番号でなくて名前を付けられるようにして変数っぽく扱えるようにしてみる
  • ファイルロード部とコマンド処理部の分割
  • @include

MX kernel 6