3个不稳定版本
0.2.1 | 2019年7月9日 |
---|---|
0.2.0 | 2019年7月9日 |
0.1.0 | 2019年6月30日 |
#2674 in 解析器实现
在 3 个crate中使用
54KB
1.5K SLoC
Scdlang
Statecharts Description Language
🚧状态: 🗶实验性 4ever🤞
关于
Scdlang(发音为 /ˈesˌsi:ˈdi:ˈlæŋ/
)是一种用于描述状态图的描述性语言,之后可以用于生成代码或将代码转换成其他格式。本项目更关注如何通用地描述状态图,以便在另一种语言/平台上使用,而不是绘制状态图。关于绘制,请参阅 状态机猫。
哲学
- 可读性就像您阅读并可视化状态图一样
- 可写性就像您编写简洁、清晰且可重构的代码一样
- 可移植性到任何实现(例如平台、编程语言、运行时等)
功能和 愿望列表
- CLI工具(见 用法)
- 语法灵感来自各种绘图语言,如 mermaid、Graphviz、PlantUML 等
- 合理的错误信息
- 通过语义分析避免无效和歧义性转换
- 规则定义用于静态分析和形式验证
- 转换为其他格式
- 编译成其他格式(需要此功能以使其成为可嵌入的领域特定语言)
- WebAssembly(使用 parity-wasm)
- LLVM IR 🤔(打开将其编译为wasm、dynlib和静态库的可能性)
- 代码生成 🤔(不确定是否需要此功能,但为什么不要呢?)
- Julia 通过
@generated
实现,作为 参数方法 多分派 函数对象 - Rust通过
#[proc_macro_attribute]
实现为状态编程?(我还是担心它是否会与其他crate冲突) - Elixir通过
use
宏,它解析为gen_statem 💪 - Flutter通过
builder_factories
(等待FFI稳定)
- Julia 通过
更多信息,请参阅发布页面中的变更日志
入门指南
目前,本项目为每个操作系统提供二进制CLI。请访问发布页面下载并解压。它还附带了适用于您首选shell的自动完成脚本。
安装
只需从发布页面下载二进制文件或按照以下说明操作 👇
Linux🐧
TODO: (AUR, DEB, RPM)或通过shellscript安装,就像安装rustup一样
MacOS🍏
TODO: brew或通过shellscript安装,就像安装rustup一样
Windows🗔
TODO: chocolatey或通过msi安装程序安装,就像安装rustup一样
使用Docker🐳
smcat、dot和graph-easy已预安装在Docker镜像中
docker pull scdlang/scrap
通过Cargo📦
cargo install s-crap
贡献
只要遵循行为准则,任何贡献都受欢迎。
如果您有任何问题或需要讨论的内容,请随时私信或在任何有我头像的平台中提及我 👹。
许可
本项目根据通用许可1.0版授权 - 更多详细信息请参阅LICENSE文件。
资源
- Statecharts in the Making: A Personal Account by David Harel
- 欢迎来到状态图表的世界
依赖项
~2.2–3MB
~59K SLoC