分割リストと通常のリストの表記が異なるだけです。で終わるステートメントのリストは;
、シーケンス演算子: を使用して表現できます(...)
。
例えば:
(Expr ";")*
受け入れます
1; 2; 3;
その間
{Expr ";"}*
final;
で解析エラーを生成し、むしろ受け入れます:
1; 2; 3
分離されたリストには、Rascal のパターン マッチングと構築機能でも特別なセマンティクスがあります。たとえば具体的な構文を使用して一致させる場合、空のサブリストは、前後の区切り文字が無視されることを意味します。
({Expr ","}*) `1 ; <{Expr ","}* rest>` := ({Expr ","}*) `1`;
rest
このパターンは成功し、パターン内のを無視して式の空のリストを にバインドし;
ます。
同様に、新しいリストを作成する場合:
({Expr ","}*) `1 ; <{Expr ","}* rest>`
空だったので、構築されたリストからを単純に生成1
して削除します。;
rest
分離リストは通常、関数定義や関数適用などで仮パラメータと実パラメータのリストを定義するために使用されます。通常、セミコロンを含むステートメントには区切り記号を使用しません。