2个版本

0.1.1 2023年10月27日
0.1.0 2023年10月26日

#846 in 编程语言


用于 mag_lang

MIT 许可证

85KB
2K SLoC

mag banner

简介

magc 是一个编译器库,它将 Mag 代码转换为 Strontium 机器的一系列可执行指令。

更具体地说,这个库中找到的 Compiler 结构体将 LexerParser 模块以及它自己的代码生成代码组合成一个管道。这个处理管道随后生成一系列代表 Mag 源字符串语义的字节码指令,最后在一个 strontium 虚拟机实例上执行。

请参阅 mag-lang crate 以获取 Mag 语言的代码示例。

我们进展如何?

当前的实现已经相当完整地实现了编译器的词法分析和解析阶段,因此从源字符串构建抽象语法树(AST)工作得相当好。尽管代码生成模块非常新,但目前在交互式解释器(REPL)中可用的函数集有限。已经可以处理具有两个操作符的简单算术运算符,如 +-*/。更多功能正在开发中。目前不要嵌套中缀表达式。这个项目还有很多粗糙的边缘。

鸣谢

Mag 基于 Google 的语言工程师 Robert Nystrom 的 Magpie 语言,他有一个博客和很多惊人的想法。他的各种博客文章是这个项目的起点和灵感来源,即使原始代码库不再进一步开发,我也计划继续他的遗志。

然而,由于与原始 Magpie 语言存在一些语法差异,这两种语言是 源不兼容 的,因此有不同的名称。特别是,Bob 的实现用空格(通常是一个无意义的字符)代替了通常用于在对象上调用方法的小数点,我觉得这相当不直观,尤其是对于新手程序员。

依赖关系

~12–24MB
~340K SLoC