语法设计
提示
盘古 OS
的设计仍在逐步改进与完善中,本文将随时发生变化,感兴趣的朋友们可以时刻保持关注;- 在下方的版权声明中有本文作者的联系方式,有不同意见和相关建议的朋友可以与其保持联系;
- 也可在本文底部的评论区登录 Github 后,直接发表您的观点;
版权声明
- 文章作者: flytreeleft - flytreeleft@crazydan.org
- 文章链接: https://studio.crazydan.org/docs/pangu-os/program-language/dan-lang/syntax
- 版权声明: 本文章采用许可协议《署名 4.0 国际 (CC BY 4.0)》。 转载或商用请注明来自 Crazydan Studio!
- 在语言层面支持差量
- 领域描述式语言,与具体的实现无关,实现由目标解释器处理
- 仅描述状态,如何从一种状态迁移到另一种状态,是具体的处理逻辑实现, 由虚拟机确定,也可以以描述方式阐述、分解执行过程,再由虚拟机确定实现并执行
- 文本形式的 DSL 是用于开发者编写的,在代码中直接操作的是 DSL 的 AST 结构
模式 - Schema
- Schema 用于定义 DSL 的结构,相当于 Java 等语言中的 interface/class 类型定义, 而 DSL 则相当于类型的实例化
- Schema 与 DSL 在形式上是同构的
- Schema 会对应具体的解释和驱动引擎,以实现具体的执行逻辑
- Schema 将被翻译为 JS、Java 等不同的目标通用语言
- Schema 和 DSL 以相同语义做差量
hello.dan.s
hello {
title: String
message: String
action: Function
}
hello.dan
schema hello.def.dan
namespace log.dan as log
namespace text.dan as text
hello {
x::gen-extends {
//
}
x::post-extends {
//
}
{{{
hello = '你好,世界!'
}}}
title = 'Hello, world!'
message = {{{ hello }}}
action {
log::info {
code = text::INFO_HELLO_WORLD
data = {
msg = {{{ hello }}}
}
}
}
}
hell-ext.dan
schema hello.def.dan
extends hello.dan
hello {
delete action
}