witchの日記: (ROBO)(作業メモ) X-64 進捗&現状のインタプリタの仕様
1週間前に書いた「(作業メモ)やるべきこと&暫定仕様」のうち、「比較演算」と「条件分岐」の実装が完了。
シェル(モーションエンジンのシェル)からインタプリタのコマンドを直接呼べるようにしたので、外部(コンソール)からジャンプ先を切り替えたり変数値を変更したりできるようになりました。
これで、モーションの繰り返し再生、条件によるループ脱出等のモーションスクリプトを書けるはず。
週末には実際にゴーレムくんを動かせる…かな。
「変数値とリテラルの比較」とか「変数同士の演算」とか「文字列結合」とかは後回し。
現時点のインタプリタのコマンド仕様
- インタプリタの 1Tick (スケジュール単位)は 20msec
- サーボ角度反映コマンド'X'、ウェイトコマンド'W'の実行後に次の Tick へ移る。
その他のコマンドは同一 Tick内で処理される。 - コマンドが1Tick内で終了するかどうかは保証されない。
(同一Tick内で処理すべきコマンドが多い場合、複数Tickを消費する可能性がある) - コマンドは行の先頭から始める(空白は認めない)
- #から始まる行はコメントとして扱う
スクリプト名 : ^[0-9A-Za-z_\-\.]+$ で構成される文字列
リテラル形式 : ^[0-9A-Za-z_]+$ で構成される文字列(クオーテーション不要)
[0-9]で始まる文字列は整数リテラル(格納形式は文字列)
変数名命名規則: ^[A-Za-z][0-9A-Za-z_]+$ で構成される文字列
ラベル名 : ^:[0-9A-Za-z]+$ で構成される文字列
ジャンプ先ラベル名:
ラベル名、スクリプト名、スクリプト名とラベル名の連結 のいずれか
ex) :label_fuga script_hoge script_hoge:label_fuga
変数処理コマンド:
代入 : S 変数名=リテラル
整数演算: S 変数名[+-*/]=数値リテラル
比較演算: C 変数名1,変数名2 ※(双方の変数値が[0-9]で始まる場合は数値として比較)
ラベル宣言コマンド: ラベル名
ジャンプコマンド: (条件ジャンプはコマンドの前に実行された比較演算の結果に従う)
無条件 : JM ジャンプ先ラベル名
小なり : JL ジャンプ先ラベル名
等しい : JE ジャンプ先ラベル名
大なり : JG ジャンプ先ラベル名
サーボPWM指定 : A (Aの後に空白を空けずにサーボPWMピーク幅を十進数3桁で羅列する)
サーボPWM反映 : X
全サーボフリー: F
ウェイト : W[0-9]* (指定数値のTick数分ウェイトする。省略時は 1Tick)
シェルコマンド仕様
スクリプト読み込み: L:スクリプト名
スクリプト実行 : X:ジャンプ先ラベル名 ※(実行時点で読み込み済みであること)
実行キャンセル : C ※(キューイングされていたコマンドもクリアされる)
全スクリプトクリア: CA
インタプリタコマンド実行: M インタプリタコマンド
インタプリタ停止 : S ※(continue は未実装。Xコマンドでの再開のみ可能)
全サーボフリー: F
モーションエンジン停止: Q
(ROBO)(作業メモ) X-64 進捗&現状のインタプリタの仕様 More ログイン