2个不稳定版本

0.2.0 2020年11月2日
0.1.0 2020年10月31日

#341编程语言

自定义许可

275KB
4K SLoC

包含 (静态库,120KB) lib/src/zig-cache/lib/libstd.a

ezc

https://github.com/g-w1/ezc/workflows/Rust/badge.svg

ez语言的编译器。

这是学校独立学习的一部分。

目标

  • 学习很多
  • ez 应该类似英语
  • 仅使用Rust标准库
  • 编写一个(最小化)可工作的编译器。可能是u64,也可能是数组
  • 用另一种语言(zig,rust,c,汇编等)为 ez 编写一个(最小化)标准库

说明

要运行,只需执行 ezc 文件,使用 -g 标志以获取调试信息(它将生成一个out.asm文件)。然后您可以在gdb或lldb中打开它。

要获取标准库,将 -stdlib-path /path/to/stdlib 传递给编译器。要编译标准库,进入此编译器中的lib目录。然后在那个目录中运行 zig build,并在 zig-cache/lib/libstd.a 中查找库。您可能需要接近zig的master分支。您可以在以下位置找到它:https://ziglang.org/download/

要测试代码: cargo test 要测试生成的代码,可以执行 cd tests; ./test.sh。注意:这需要 gcc

依赖关系

  • Zig (master)。注意:如果您想在没有zig的情况下构建,请执行 HAS_NO_ZIG=1 cargo ...(您想要的任何命令)。这可能对在没有zig的系统上构建或在提供您自己的标准库时很有用。
  • nasm
  • cargo
  • gcc(仅用于测试)

资源

功能

  • 词法分析器

  • 抽象语法树(AST 项目结构体)

  • 解析器

  • 代码生成

  • 不可变赋值

  • 可变变量

  • 语义分析。

  • 表达式(递归解析的开始)

  • if 语句

  • 循环

  • 花哨的编译错误(带有箭头)

  • 函数

  • 模块

  • 字符字面量

  • 标准库

  • 输入/输出

  • 数组和字符串字面量

  • 完成博客文章

  • 完成文档

  • 删除所有 TODO

无运行时依赖