2

次のようなものをどのように解析しますか

f x y

の中へ

APPLY (APPLY f x) y

ハッピーを使っていますか?今、私は言うルールを持っています

%left APP
Expr : Expr Expr %prec APP { APPLY $1 $2 }

しかし、それは上記を次のように解析します

APPLY f (APPLY x y)
4

2 に答える 2

2

文法規則を使用して左右の結合性をエンコードできます。

たとえば、次の基本的なラムダ計算パーサーを見てください。

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 }
于 2014-12-24T03:46:31.603 に答える