syntax - Xtext:为 DSL 定义语法糖
问题描述
是否可以为 Xtext DSL 的语法糖定义某种重写规则?(例如类似于Spoofax 的处理方式)
让我用一个例子来演示一下:假设我们有一个用于布尔值和列表的虚拟表达式语言。非正式地:
- 布尔文字:
True
和False
- 布尔否定:
not <E>
- 条件表达式:
if <E> then <E> else <E>
- 列出文字:
[<E>, ..., <E>]
- 检查非空列表:
<E> exists
一个示例程序将类似于
if [] exists then [not True] else [if True then False else True, [False, True]]
我可以将三种语法糖添加到这种语言中。
- 同义词:写
empty
而不是[]
。 - 默认值:自动转换
if <E> then <E>
为if <E> then <E> else empty
. 即else
分支应该默认包含值empty
。 - 根据其他定义新的句法结构:例如定义
<E> is absent
为not (<E> exists)
。
这个想法是,在编写代码生成器或类型系统时,我不必担心后续步骤中的这些构造。例如,术语的类型[] is absent
应该由 和 的键入规则自动键入not <E>
,<E> exists
而不必为此定义单独的键入规则。
使用 Xtext 实现这一目标的最佳方法是什么?
解决方案
推荐阅读
- css - Angular 8 - 如何根据用户所在的组件动态设置正文标签的样式?::ng-deep 在视图更改时被覆盖
- javascript - UWP javascript 崩溃
- python - 如何重置海龟并擦除海龟图形中的文本?
- android - 在android中安装ttf文件
- angular - 错误类型错误:无法读取未定义的属性“clothing_products”
- tomcat - 如何将 TOMCAT 管理器页面路由到自定义错误页面
- java - 如何将 kx.Flip 对象中的数据检索为 Java 中更易读的形式?
- java - 如何使用 selenium 处理移动 OTP
- excel - VBA 相交行和列
- xamarin.forms - 如何在 Xamarin 表单的集合视图上添加 Click 事件