Arbiter スクリプト構文¶
Arbiter スクリプトは、Pipeline と同じ Platypus 言語の構文を使用します。
識別子とキーワード¶
識別子¶
識別子はオブジェクトを識別するために使用され、変数や関数などを表すことができます。識別子にはキーワードが含まれます。カスタム識別子はキーワードと重複してはいけません。
識別子は数字 (0-9)、英字 (A-Z a-z)、アンダースコア (_) で構成されますが、数字で始めることはできず、大文字と小文字が区別されます。例:
_abcabcabc1abc_1_
識別子を英字またはアンダースコア以外で始める必要がある場合、または特殊文字を含む場合は、バッククォートで囲む必要があります。例:
1abc@some-variable这是一个表情包变量👍
キーワード¶
キーワードは特別な意味を持つ単語であり、if, elif, else, for, in, break, continue, nil などがあります。これらを変数名、定数名、関数名として使用することはできません。
コメント¶
行コメントには # を使用します。行内コメントはサポートされていません。例:
組み込みデータ型¶
変数の値は動的に変化する可能性がありますが、各値には明確なデータ型があり、基本型と複合型に分類されます。
基本型¶
整数(int)型¶
整数型は64ビット符号付き整数です。現在は10進数表記のみサポートされています。例:-1, 0, 1, +19。
浮動小数点(float)型¶
浮動小数点型は64ビット符号付き浮動小数点数です。現在は10進数表記のみサポートされています。例:-1.00001, 0.0, 1.0, +19.0。
ブール(bool)型¶
ブール型には true と false の2つの値のみがあります。
文字列(str)型¶
文字列は二重引用符または一重引用符で定義できます。複数行の文字列は三重引用符または三重一重引用符で囲むことができます。例:
"hello world"'hello world'"""を使用した複数行の文字列
'''を使用した複数行の文字列
複合型¶
複合型には map と list が含まれます。これらは参照型であり、複数の変数が同じオブジェクトを指すことができ、代入時にメモリコピーは行われません。
Map 型¶
map はキーと値のペアの構造です。キーは文字列型のみ、値は任意の型にできます。インデックス式を使用して要素を読み書きします。例:
a = {
"1": [1, "2", 3, nil],
"2": 1.1,
"abc": nil,
"def": true
}
# a["1"] は list オブジェクトなので、b は a["1"] の値を参照しているだけです
b = a["1"]
"""
この時点で a["1"][0] == 1.1 です
"""
b[0] = 1.1
List 型¶
list には任意の数、任意の型の値を格納できます。インデックス式を使用して要素を読み書きします。例:
演算子¶
Platypus は以下の演算子をサポートしており、優先順位は低いものから高いものの順に示します。
| 優先順位 | 記号 | 結合性 | 説明 |
|---|---|---|---|
| 1 | `=` | 右 | 代入;名前付き引数;最も優先順位が低い |
| 1 | `+=` | 右 | 代入。左オペランド = 左オペランド + 右オペランド |
| 1 | `-=` | 右 | 代入。左オペランド = 左オペランド - 右オペランド |
| 1 | `*=` | 右 | 代入。左オペランド = 左オペランド * 右オペランド |
| 1 | `/=` | 右 | 代入。左オペランド = 左オペランド / 右オペランド |
| 1 | `%=` | 右 | 代入。左オペランド = 左オペランド % 右オペランド |
| 2 | `||` | 左 | 論理 OR |
| 3 | `&&` | 左 | 論理 AND |
| 4 | `in` | 左 | キーが map 内にあるか;要素が list 内にあるか;部分文字列が文字列に含まれているか |
| 5 | `>=` | 左 | 条件「以上」 |
| 5 | `>` | 左 | 条件「より大きい」 |
| 5 | `!=` | 左 | 条件「等しくない」 |
| 5 | `==` | 左 | 条件「等しい」 |
| 5 | `<=` | 左 | 条件「以下」 |
| 5 | `<` | 左 | 条件「より小さい」 |
| 6 | `+` | 左 | 算術「加算」 |
| 6 | `-` | 左 | 算術「減算」 |
| 7 | `*` | 左 | 算術「乗算」 |
| 7 | `/` | 左 | 算術「除算」 |
| 7 | `%` | 左 | 算術「剰余」 |
| 8 | `!` | 右 | 単項演算子。論理否定。組み込みの6つのデータ型で使用可能 |
| 8 | `+` | 右 | 単項演算子。正符号。正数を表すために使用 |
| 8 | `-` | 右 | 単項演算子。負符号。符号を反転させたり、負数を表すために使用 |
| 9 | `[]` | 左 | 添字演算子。list の添字または map のキーを使用して値を取得 |
| 9 | `()` | 左 | 演算子の優先順位を変更;関数呼び出し |
式¶
Platypus はカンマ , を式の区切り文字として使用します。式には値がありますが、文には値がありません。
リテラル式¶
各種データ型のリテラルは式です。例:整数 100, -1, 0、浮動小数点数 1.1、ブール値 true, false など。
複合型のリテラル式は以下の通りです。
- List リテラル式
- Map リテラル式
呼び出し式¶
以下は関数呼び出しの例で、リストの要素数を取得します。
二項式¶
二項式は二項演算子と左右のオペランドから構成されます。
現在のバージョンでは、代入式は二項式に含まれ、戻り値を持ちます。ただし、代入式は問題を引き起こす可能性があるため、将来的にこの構文は削除され、代入文の構文が追加される予定です。
# 0
2 / 5
# 0.4。計算時に左オペランドの型が浮動小数点数に昇格されます
2 / 5.0
# true
1 + 2 * 3 == 7 && 1 <= 2
# `=` 演算子の右結合性により、a = (b = 3) となり、a == 3 です
b == 3;
a = b = 3
# 注意:代入式の構文はまもなく廃止されるため、代入文に置き換えてください
b = 3
a = b
"a" in [1,"a"] # true
"def" in "abcdef" # true
"a" in {"a": 1} # true
"b" in {"a": 1} # false
x = 1; y= [1]
x in y # true
インデックス式¶
[] 添字演算子を使用して、list または map の要素を操作します。
インデックス式を使用して、list または map の要素の値を取得・変更したり、map に要素を追加したりできます。リストでは負のインデックスを使用できます。
構文例:
a = [1, 2 ,3, -1.]
b = {"a": [-1], "b": 2}
a[-1] = -2
b["a"][-1] = a[-1]
# 結果
# a: [1,2,3,-2]
# b: {"a":[-2],"b":2}
括弧式¶
括弧式を使用すると、二項式内のオペランドの演算優先順位を変更できますが、結合性は変更できません。
文¶
Platypus では、すべての式は値文と見なすことができます。式が文の区切り記号 ; または \n で終了する場合、その式は文として扱われます。以下のスクリプトは4つの文を含んでいます。
値文(式文)¶
式の後ろに文の区切り記号が続く場合、値文と見なすことができます。以下は4つの有効な文です。
代入文¶
構文例:
key_a = "key-a"
# 識別子 a を左オペランドとし、a にリストリテラルを代入
a = [1, nil, 3]
# インデックス式を左オペランドとして使用
a[0] = 0
a[2] = {"key-b": "value-b"}
a[2][key_a] = 123
条件文¶
多くのプログラミング言語と同様に、if/elif の条件が成立するかどうかに応じて、対応する文ブロックに処理が移行します。いずれの条件も成立しない場合は else ブランチに処理が移行します。
現在、condition は任意の式にできます。その値が組み込みデータ型のいずれかである限り、値がその型のデフォルト値の場合、式の値は false となります。
- 条件が
int型の値の場合、0であれば条件はfalse、それ以外はtrueです。 - 条件が
float型の値の場合、0.0であれば条件はfalse、それ以外はtrueです。 - 条件が
string型の値の場合、空文字列""であれば条件はfalse、それ以外はtrueです。 - 条件が
bool型の値の場合、条件はその値そのものです。 - 条件が
nil型の値の場合、条件はfalseです。 - 条件が
map型の値の場合、長さが0であれば条件はfalse、それ以外はtrueです。 - 条件が
list型の値の場合、長さが0であれば条件はfalse、それ以外はtrueです。
ループ文¶
Platypus は for 文と for in 文をサポートしています。
以下は、ループ文ブロック内でのみ使用できる2つの文です。
continue文:後続の文を実行せずに、次のループの反復を開始します。break文:ループを終了します。
for 文を使用すると無限ループが発生する可能性があるため、注意して使用するか、可能な限り for in 文に置き換えてください。
使用例:
for文を使用して10回ループを実行:
for in文を使用してlistのすべての要素を反復処理:
for in文を使用してmapのすべてのキーを反復処理:
for in文を使用してstringのすべての文字を反復処理: