7 个版本
| 0.3.0 | 2020 年 6 月 21 日 |
|---|---|
| 0.2.3 | 2020 年 6 月 3 日 |
| 0.2.2 | 2020 年 5 月 30 日 |
| 0.1.1 | 2020 年 5 月 23 日 |
#21 in #toy
54KB
1K SLoC
Yotc
为玩具语言 yot 提供的 LLVM 前端。
基于 LLVM Kaleidoscope
运行
- 安装 LLVM 9.0
- 使用
cargo install yotc安装 yotc - 对于自动链接(即默认输出格式 "可执行文件"),PATH 中需要包含
gcc - 用法:
yotc (文件路径) - 运行
yotc --help查看更多选项
Yot 语法
- 注意:每个变量都是 32 位
int,并且函数也必须返回int。比较运算符返回 1 或 0 - 函数
- 常规语法
@sum[a, b] { -> a + b // -> is the return keyword } - 仅返回语句的简写表示
@sum[a, b] -> a + b; - 外部函数
@!print[_, _]; - 调用函数
sum(a, b);
- 常规语法
- 变量
- 带值的声明
@a = 5; - 不带值的声明(将被分配垃圾值)
@a; - 引用变量
@b = a + 5;
- 带值的声明
- 操作
- 可用操作
=、+、-、*、/、==、!=、<、>、<=、>=。@a = (-b + 5) - 10 / -(5 - -2);
- 可用操作
- 注释
- 注释以
//开头,直到行尾的标记都被忽略
- 注释以
- 程序
- 程序仅由顶层函数组成(尚无全局变量)
main函数入口点
- 示例
- 参见
examples/ - 首先使用
yotc equals_ten.yot -f object-file生成equals_ten.yot的目标文件 - 使用
g++ io.cc equals_ten.o编译和链接io.cpp生成可执行文件
- 参见
待办事项
- if、for、while 语句
- LLVM IR优化
- 支持打印字符串字面量
- 更好的编译器错误
- 当前的错误要么含糊不清,要么完全错误,且没有任何行号信息
- 大多数错误都被LLVM捕获,这意味着会有更多丑陋且含糊的错误消息
- 更多数据类型(浮点数、布尔值、字符)
- 测试
依赖项
~3–12MB
~119K SLoC