## フロー制御

### 条件式

BBv2で使用される条件式には以下のようなものがある。

条件式 | 評価値
--- | ---
a | aに空でない文字列が含まれていれば真
a = b | aとbの要素がすべて同じ場合に真
a != b | aとbの要素に同じでないものが含まれる場合に真
a < b | 辞書順でaがbより小さい場合に真
a <= b | 辞書順でaがb以下の場合に真
a > b | 辞書順でaがbより大きい場合に真
a >= b | 辞書順でaがb以上の場合に真
a in b | aの要素が全てbに含まれる場合に真
! cond | condが偽の場合に真
a && b | aが真かつbが真の場合に真
a || b | aが真またはbが真の場合に真
( cond ) | condが真の場合に真

ここで、aとbは文字列のリスト、変数、ルールの戻り値のいずれかであり、condは条件式である。

なお、「=」、「!=」、「<」、「<=」、「>」、「>=」の６つの比較演算において、一方のリストのサイズが他方よりも短い場合、短いリストの後方に空文字列の要素続いているかのように振舞う。

演算子の優先順位は以下のようになっている。上の方ほど優先順位は高い。

- in, ( )
- !
- <, <=, >, >=
- =, !=
- &&
- ||

### パターン

switch文や組み込みルールGLOBなどで行われるパターンマッチングには次に示すパターンの組み合わせが使われる。

パターン | 意味
--- | ---
? | 任意の1文字
* | サイズ0以上の任意の文字列
[文字クラス] | 文字クラスにマッチする1文字
[^文字クラス] | 文字クラスにマッチしない1文字
\c | 文字c

ここで文字クラスは以下の組み合わせである。

パターン | 意味
--- | ---
c | 文字c
a-b | 文字aから文字bまでの範囲

### if

    if $(X)
    {
        # Xが真のときの処理
    }
    else
    {
        # Xが偽のときの処理
    }

### for

    for a in $(X)
    {
        # Xの各要素が変数aに代入されて、順に実行される
    }

### while

    while [ func_a ]
    {
        # func_aの結果が真の間、実行される
    }

### switch

    switch $(X)
    {
        case a* :
            # $(X)がaで始まる場合、ここが実行される
        case [b-d]* :
            # $(X)がb,c,dで始まる場合、ここが実行される
    }