parsing - AST类型可以在ocaml中递归吗?
问题描述
我试图将我的语法翻译成 AST。
AST 类型可以递归吗?例如,我有一个生产eprime -> PLUS t eprime | MINUS t eprime | epsilon
. 将其翻译为:
type eprime =
| Add of t eprime
| Minus of t eprime
| Eempty
解决方案
简短的回答是肯定的。这或多或少正是您定义树形数据结构的方式。
语法正确的定义看起来更像这样:
type eprime =
| Add of t * eprime
| Minus of t * eprime
| Empty
如果您假设t
是int
(为简单起见),您可以像这样创建这种类型的值:
# Add (3, Add (4, Empty));;
- : eprime = Add (3, Add (4, Empty))
推荐阅读
- laravel - 我是否在正确考虑 Redis::throttle ?
- linux - 将文件夹中的所有文件复制到另一个以 . 到文件名并将其重命名回原始文件名
- java - Web如何防止修改元素属性值引起的安全问题?如禁用或隐藏
- c# - NLog 没有使用 LogManager.GetCurrentClassLogger 中最衍生的类
- sql - 通过 Apache Phoenix 向表中添加默认值等于 HBase 中现有列的值的列
- azure - 解压缩存储在 Azure Databricks FileStore 中的文件夹
- powerbi - 如何使用 WEEKNUM 获取周一到周五的计数?
- cplex - Cplex Studio 不支持 dvar 浮点数
- google-chrome-devtools - 像在 Firefox 中一样在 Chrome 上突出显示元素
- java - 回收recyclerview时应用的布局被破坏