galaxy-sixth-sensey - Happyの%tokenではより一般的な形式を下にしなきゃだめ
2018/07/25
Happyの%tokenではより一般的な形式を下にしなきゃだめ

正誤

正しい

%token
  ...
  ...
  natType  { (TokenAnIdent "Nat", _)   }
  boolType { (TokenAnIdent "Bool", _)  }
  ident    { (TokenAnIdent $$, _)      }

誤り

%token
  ...
  ident    { (TokenAnIdent $$, _)      }
  ...
  natType  { (TokenAnIdent "Nat", _)   }
  boolType { (TokenAnIdent "Bool", _)  }

これはhappy製の単純型付きラムダ計算パーサーの、トークン宣言部です。

「正しい」のようにしないと、このような実行時エラーが起きます。

>>> parse "\\x:Nat.10"
got a token "Nat",
but [natType, boolType] are expected.

"Nat" near_equal natTypeですが、先にidentの方にマッチするために、“Nat”がidentだと判断されています 🤘🙄🤘

実際の修正例


この記事はこちらから修正リクエストを送ることができます。
Happyの%tokenではより一般的な形式を下にしなきゃだめ - github
ゴミ箱ボタンの左にある、鉛筆ボタンを押してね!