次のようなものをどのように解析しますか
f x y
の中へ
APPLY (APPLY f x) y
ハッピーを使っていますか?今、私は言うルールを持っています
%left APP
Expr : Expr Expr %prec APP { APPLY $1 $2 }
しかし、それは上記を次のように解析します
APPLY f (APPLY x y)
文法規則を使用して左右の結合性をエンコードできます。
たとえば、次の基本的なラムダ計算パーサーを見てください。
https://github.com/ghulette/haskell-parser-examples/blob/master/src/HappyParser.y
運用プロダクションは次のとおりです。
Expr : let VAR '=' Expr in Expr { App (Abs $2 $6) $4 }
| '\\' VAR '->' Expr { Abs $2 $4 }
| Form { $1 }
Form : Form '+' Form { Binop Add $1 $3 }
| Juxt { $1 }
Juxt : Juxt Atom { App $1 $2 }
| Atom { $1 }
Atom : '(' Expr ')' { $2 }
| NUM { Num $1 }
| VAR { Var $1 }