0

我有一个语法:

syntax Exp ::= Int | Bool
             | Exp Exp
             > Exp + Exp           [left] 
             > "fun" KVar "->" Exp [binder]
             | "(" Exp ")"         [bracket]
syntax Val ::= Int | Bool | "fun" KVar "->" Exp [binder]

其中 lambda 项"fun" KVar "->" Exp是值和表达式。什么是同时成为和"fun" KVar "->" Exp的一部分的正确方法是什么?ExpVal

我尝试创建一个新的排序syntax Lambda ::= "fun" KVar "->" Exp并添加Lambda到两者ValExp. 但是,这与Lambda.

4

1 回答 1

1

你可以这样做:

syntax Exp ::= Val
             | Exp Exp
             | Exp + Exp           [left, add] 
             | "(" Exp ")"         [bracket]
syntax Val ::= Int | Bool | "fun" KVar "->" Exp [binder, fun]
syntax priorities add > fun

编辑我已经更新了我的答案以包括@dwight.guth 的建议。

于 2020-06-04T23:34:43.650 回答