跳到主要内容

语法设计

提示
  • 盘古 OS 的设计仍在逐步改进与完善中,本文将随时发生变化,感兴趣的朋友们可以时刻保持关注;
  • 在下方的版权声明中有本文作者的联系方式,有不同意见和相关建议的朋友可以与其保持联系;
  • 也可在本文底部的评论区登录 Github 后,直接发表您的观点;
版权声明
  • 在语言层面支持差量
  • 领域描述式语言,与具体的实现无关,实现由目标解释器处理
    • 仅描述状态,如何从一种状态迁移到另一种状态,是具体的处理逻辑实现, 由虚拟机确定,也可以以描述方式阐述、分解执行过程,再由虚拟机确定实现并执行
  • 文本形式的 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
}