kframework - 如何正确重用其他类型的产品?
问题描述
我有一个语法:
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
的一部分的正确方法是什么?Exp
Val
我尝试创建一个新的排序syntax Lambda ::= "fun" KVar "->" Exp
并添加Lambda
到两者Val
和Exp
. 但是,这与Lambda
.
解决方案
你可以这样做:
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 的建议。
推荐阅读
- java - 找不到客户端生成器
- python-3.x - 如何在pycharm中设置手动下载Spark的路径
- db2 - 如何知道当前加载操作正在生成哪些加载副本文件
- reactjs - 在 REACT 中检测鼠标滚轮事件
- mysql - 如何在 MySQL CREATE TABLE 语句中创建“multipleOf”约束?
- python - 使用无头铬和硒(python)下载文件并不总是有效
- ios - 从 Objective C ViewController 调用 Swift ViewController
- django - TypeError:“播放列表”和“播放列表”实例之间不支持“<”得到此错误
- bash - Ubuntu 16.04 上的 Youtube-dl 没有将缩略图嵌入到 mp3,而是在使用 bash 脚本时创建 mp3
- mysql - 在 SQL 中使用条件连接三个表