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