# Chigusa
Chigusa 是一个用 Rust 写成的 C0 编译器。使用了手写的递归下降分析。
## 编译与使用
### 编译
```sh
cargo build --release
```
编译产物路径是 `target/release/chigusa`。
### 使用
```
chigusa 0.1.0
A compiler that parses c0 grammar and compiles it into o0 binary format.
C0: https://github.com/BUAA-SE-Compiling/c0-handbook
O0: https://github.com/BUAA-SE-Compiling/c0-vm-standards
USAGE:
chigusa [FLAGS] [OPTIONS] [file]
FLAGS:
-h, --help Prints help information
-s, --s0 Emit C0 assembly file, same as `--emit s0`
-c, --o0 Emit C0 binary file, same as `--emit o0`
--stdout Write result to stdout. Overwrites `output-file`.
-V, --version Prints version information
OPTIONS:
--emit <emit> The type of code to emit. Allowed are: token, ast, s0, o0 [default: o0]
-o, --out <output-file> Output file. [default: out]
-v, --verbosity <verbosity> Verbossity. Allowed values are: debug, trace, info, warn, error, off. [default: warn]
ARGS:
<file> Input file. Defaults to stdin if no file were supplied.
```
> 与预期的不同的东西:使用的 `clap` 不支持在没有参数的情况下默认输出帮助。
## 完成的实验内容
本实验完成的内容包括:
- 基础实验 ~~(废话)~~
- 注释
- 字符与字符串 char
- 双精度浮点数 double
- 作用域
- 类型转换
- `break` 语句
## 语法的改写
### 等价改写
为了使得编译器实现更简便,实验中进行了如下的语法等价改写:
- 不区分二元运算符语句和一元运算符语句中的各个种类(如将 A + B 和 A * B 都解析为 `BinaryOp`),内部使用运算符优先级确定解析顺序
- 对所有语句提取相同前缀,使得各语句的前缀不重合;这个不细讲了
- (编译器内)将可被赋值的非终结符类型由 `Identifier` 提升至 `LValue`,以提高可扩展性(虽然大概率不会扩展)
### 不等价改写
见 [grammar-changes.md](./grammar-changes.md).
## 未定义行为
对于实验指导书中提到的的未定义行为,本次实验中处理如下:
- `UB 3.2.2.4`: 数字字面量在溢出时不会报错,且会被从允许的最高位截断。字面量本身的承载类型是支持无限精度的。
- `UB 3.2.2.5`: 关系表达式以所有非 0 值为真,以 0 为假
- `UB 3.2.2.7`: 任何未初始化的 const 变量会引起编译时错误 (`ParseErrVariant::ConstTypeNeedExplicitInitialization`)
- `UB 3.2.2.8`: 非 void 函数中的所有控制流都必须有返回语句,没有返回语句的控制流是编译时错误(`CompileErrorVar::ControlReachesEndOfNonVoidFunction`)
- ~~`UB 3.2.2.11`: 不归我管)~~
- `UB 3.2.3.2`: `char` 字面量与 `int` 相同
- ~~`UB 3.2.3.4`: 没做~~
没有合适的资源?快使用搜索试试~ 我知道了~
A C0 compiler for homework - C0 编译器 - 北航软院编译原理大作业+源代码+文档说明
共58个文件
rs:27个
c:13个
png:3个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 8 浏览量
2024-01-07
19:18:20
上传
评论
收藏 911KB ZIP 举报
温馨提示
A C0 compiler for homework | C0 编译器 | 北航软院编译原理大作业+源代码+文档说明 - 小白不懂运行,下载完可以私聊问,可远程教学 该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 --------
资源推荐
资源详情
资源评论
收起资源包目录
chigusa-master.zip (58个子文件)
chigusa-master
Cargo.toml 1KB
.vscode
settings.json 108B
.github
workflows
rust.yml 316B
src
main.rs 3KB
c0
type_checker.rs 0B
mod.rs 147B
parser.rs 36KB
err.rs 5KB
ast.rs 20KB
lexer.rs 26KB
lib.rs 455B
opt.rs 3KB
tests
mod.rs 52B
parser_test.rs 2KB
compiler_test.rs 0B
lexer_test.rs 3KB
prelude.rs 6KB
err_disp.rs 2KB
minivm
mod.rs 107B
err.rs 2KB
instgen.rs 5KB
codegen.rs 48KB
cranelift
mod.rs 67B
translate.rs 0B
err.rs 586B
codegen.rs 13KB
readme.md 2KB
res
img
chigusa_pub.png 34KB
chigusa_the_c0_compiler.png 24KB
docs
grammar-changes.md 5KB
readme.md 3KB
c0_grammar.txt 5KB
deps.png 936KB
grammar_notation.txt 2KB
grammar_official.txt 5KB
Cargo.lock 47KB
.gitignore 28B
crates
minivm
Cargo.toml 234B
src
lib.rs 35B
s0
mod.rs 8KB
out.rs 5KB
vm
mod.rs 5KB
test_progs
fastpow.c 201B
c3 455B
c1 109B
test.c 1KB
char.c 43B
functions.c 239B
c2 218B
iff.c 258B
print.c 169B
pi.c 657B
double.c 60B
tower.c 295B
3.c 172B
comment.c 174B
hello.c 174B
params.c 172B
共 58 条
- 1
资源评论
机智的程序员zero
- 粉丝: 2265
- 资源: 4311
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功