サーボ制御言語COSMの改訂

COSMの文法を少し改定した。
(1)最も大きな改訂は、値にパラメータを利用した数式が使えるようになったこと。数式は全て倍精度(double)で演算され、必要に応じて整数(int)に型変換される。
ex.   10*($spstp + 7)/ $mul
それに伴って、これまで、サーボ角度のパラメータを、ふにする場合、新たにパタメータを定義しなければならなかったが、不要になり、使用時にパラメータの前に '-' (マイナス記号)をつけるだけで良くなった。(構文解析で単項マイナスの処理が面倒なので、冒頭のマイナスの前に0をつけているだけなのだが(笑) -$test の時 0-$testする)
(2)角度 defangles、スピード defspeed、実行 defexec の定義は、キーと値を':'で挟んだものになっているが、値が数式で評価されるために、その中に空白を入れたい場合もある(入れなくてもいいのだが)。その場合は、あたいの全体を [  ] で囲む必要がある。その場合でも':'と [  ] の間に空白を挟んではいけない。
(3)logコマンドの導入。値をログとして出力する(現時点ではコンソールだが、いずれlogファイルへの出力にする)。値のうち  " で挟まれている部分は文字列として出力されるが、それ以外の部分は式として評価され、評価され値が出力される。

今後、まず、変数(%variable)を導入したい。変数は、@xyzのように、@マークで区別するかな。
さらに、この変数が重要な役割を果たす、センサーチェックコマンドを導入する。
センサーのある方向の値がどうなったばいに、角度をどう変化されるとかして、色々な事態に対応できるようにするわけだ。そうなると、比較演算子も必要になるな。

今回の改訂のテストを行ったスクリプトファイルの内容を以下に掲載しておく。

#
# Commandの式評価のテストCosm
# 2017年5月21日
# 

 # コメントのテスト0

# パラメータは名前と値で、名前の冒頭は$で始まってはならない、他の文字は大丈夫
# 同じ名前のパラメータの定義があったら、後で定義された方が有効になる
%param test1 8 # コメントのテスト1
%param test2 5
%param inter 9
%param spint 8
%param spstp 5
%param mul 3

%defspeed slow {  # コメントのテスト2
    # キーと値のついになっている、':'の前後に空白があってはならない
    interval:$mul*($spint+2)  # コメントのテスト3
    # 値に空白を入れたい場合は、 [ ]で囲む 
    # ただし、':'と[ ]の間に空白があってはならない
    # 値は、いかなる場合も、パラメータを交えた数式として評価される
    # speed の値はどちらも負であってはならない
    # さらにstepsはゼロでもいけない
    steps:[10*($spstp + 7)/ $mul]  # コメントのテスト4
}

%defangles angles1 {
    # 値に空白を入れたい場合は、全体を [ ] で囲むこと
    # ':' の前後に空白は入れない
    lefttopangle:[0.5*($test1 + $test2)]  # コメントのテスト5
}

%defexec exec1 {
    # 次のlogはデバグ済み: " "挟まれていない項は数式として評価される
    # 空白が値にある場合は、全体が [ ] で囲まれている必要がある
    log:["角度 [ "  0.5*($test1 + $test2) " ] を セットします"] # コメントのテスト6
    # 角度もデバグ済み 
    setAngle:angles1  # コメントのテスト7
    # delayの値は式として評価される、[ ]の件などは同じ
    delay:$inter*0.6  # コメントのテスト8
    speed:slow  # コメントのテスト9
}

%exec exec1 1 #  # コメントのテスト10