E4216

E4216#

コンパイラ診断名:lexscan_catchall_binder_not_supported

lexscan のキャッチオールケースで束縛パターンが使用されています。

lexscan は正規表現がマッチした場合だけ入力を消費します。最後のキャッチオールは入力の終端も処理するため、マッチした部分文字列を束縛しません。このケースには _ を使い、テキストが必要な正規表現ケースでは as で束縛してください。対象がメモリ内の @lexbuf.StringScanner である場合も同様です。

誤った例#

///|
pub fn next_token(lexbuf : @lexbuf.Lexbuf) -> String {
  lexscan lexbuf {
    (re"^[a-z]+" as word) => word.to_owned()
    rest => rest.to_owned()
  }
}

提案#

キャッチオールの束縛を _ に置き換えてください。

///|
pub fn next_token(lexbuf : @lexbuf.Lexbuf) -> String {
  lexscan lexbuf {
    (re"^[a-z]+" as word) => word.to_owned()
    _ => "end"
  }
}