aiscript
aiscript copied to clipboard
match式においてcase節の後にdefault節を区切り文字なしで続けることができてしまう
このようなcase節の後にdefault節を区切り文字(コンマや改行)なしで続けたmatch式がパーサを通ってしまう。
match x {case 1 => "yes" default => "no"} // valid
case節の後に区切り文字なしでcase節はエラーになるから統一性に欠けるように思う。
match x {case 1 => "yes" case 0 => "no"} // separator expected
パーサがこの文法通りに動いてるからそうなっているが、 https://github.com/aiscript-dev/aiscript/blob/7a96bcf8387a1c88b3dfd199dfd46382b8c3313d/src/parser/syntaxes/expressions.ts#L407-L409 このようにcase節とdefault節の間に区切り文字を強制するといいかもしれない。
Match = "match" Expr "{" [((MatchCases [SEP DefaultCase]) / DefaultCase) [SEP]] "}"
MatchCases = "case" Expr "=>" BlockOrStatement *(SEP "case" Expr "=>" BlockOrStatement)
DefaultCase = "default" "=>" BlockOrStatement