一見独立したルールの順序が奇妙な方法でその動作に影響を与えるハッピー(Haskell解析パッケージ)を使用してケースに入りました。私は、パースconstFoo [Foo]
とconstBar [Bar]
の両方がどのようにハッピーな作品成功する必要があります理解したようハッピーパーサールールの注文
{
module Parser where
}
%name constFoo
%name constBar
%tokentype { Token }
%error { parseError }
%token
foo { Foo }
bar { Bar }
%%
constFoo : foo { Foo }
constBar : bar { Bar }
{
parseError :: [Token] -> a
parseError _ = error "Parse error"
data Token = Bar | Foo deriving Show
}
。ただし、上記のコードでは、constFoo [Foo]
は成功しますが、constBar [Bar]
は失敗します。 constFoo
とconstBar
のルールの順序を入れ替えた場合、後者は成功し、前者は失敗します。
私は理解していないハッピーのセマンティクスにいくつかの側面がありますか?編集
ありがとうございますが、それが問題であるかどうかはわかりません。 '%name constFoo'を削除すると、constBarは同じ奇妙な順序依存の動作を示します。 –
こんにちはユダ - 私はハッピーマニュアルを読んでいないので、私の答えを再加工しました。 –