Skip to content

Commit 51e7ba8

Browse files
committed
fix typo
1 parent d182969 commit 51e7ba8

File tree

6 files changed

+28
-30
lines changed

6 files changed

+28
-30
lines changed

README.md

+13-15
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
# SYsU-lang
22

3-
**[2024 中山大学春季学期实验入口](https://github.com/arcsysu/SYsU-lang2),我们将在经过一个学期的测试之后将其合并进入主线代码**
4-
53
SYsU 是一个教学语言,应用于中山大学(**S**un **Y**at-**s**en **U**niversity)[编译原理课程](https://xianweiz.github.io/teach/dcs290/s2022.html)的教学。本项目是该课程的实验模板,可以得到一个 SYsU language 的编译器组件。实验的设计目标包括:
64

75
1. 在兼容 [SysY](https://gitlab.eduxiji.net/nscscc/compiler2021/-/blob/master/SysY%E8%AF%AD%E8%A8%80%E5%AE%9A%E4%B9%89.pdf) 语言的基础上,增加最少的语法支持,使其可以编译 [Yat-sen OS](https://github.com/NelsonCheung-cn/yatsenos-riscv)
@@ -15,7 +13,7 @@ SYsU 是一个教学语言,应用于中山大学(**S**un **Y**at-**s**en **U
1513

1614
需要注意的是,[SysY](https://gitlab.eduxiji.net/nscscc/compiler2021/-/blob/master/SysY%E8%AF%AD%E8%A8%80%E5%AE%9A%E4%B9%89.pdf) 语言允许编译时能够求值的 `const int` 作为数组大小,导致部分算例不能通过 `gcc` 的编译,因此为保持兼容推荐使用 `clang` 编译。经过测试的实验环境为 `ubuntu:24.04`
1715

18-
```bash
16+
```shell
1917
# 安装依赖
2018
apt-get install -y --no-install-recommends \
2119
libantlr4-runtime-dev default-jre-headless pkg-config uuid-dev flex bison \
@@ -76,7 +74,7 @@ cmake --build $HOME/sysu-stage2/build -t install
7674

7775
对于使用其他操作系统的同学,我们准备了一份 [docker 开发环境](https://hub.docker.com/r/wukan0621/sysu-lang)
7876

79-
```bash
77+
```shell
8078
docker pull wukan0621/sysu-lang
8179
docker run \
8280
--name sysu-lang \
@@ -137,7 +135,7 @@ SYsU 编译器的上层驱动,类似于 `clang`。当前支持的额外功能
137135
- `--unittest`:单元测试
138136
- `--convert-sysy`:转换 SysY 到 SYsU
139137

140-
```bash
138+
```shell
141139
( export PATH=$HOME/sysu/bin:$PATH \
142140
CPATH=$HOME/sysu/include:$CPATH \
143141
LIBRARY_PATH=$HOME/sysu/lib:$LIBRARY_PATH \
@@ -151,7 +149,7 @@ SYsU 编译器的上层驱动,类似于 `clang`。当前支持的额外功能
151149

152150
SYsU 的预处理器。当前 `sysu-preprocessor` 直接调用 `clang --driver-mode=cpp`,学有余力的同学也可自行实现。
153151

154-
```bash
152+
```shell
155153
$ ( export PATH=$HOME/sysu/bin:$PATH \
156154
CPATH=$HOME/sysu/include:$CPATH \
157155
LIBRARY_PATH=$HOME/sysu/lib:$LIBRARY_PATH \
@@ -173,7 +171,7 @@ int main(){
173171

174172
SYsU 的新基于 antlr4 的文法分析器,用于代替被诟病已久的 flex+bison 旧实验,产生类似于 `clang -cc1 -dump-tokens 2>&1``clang -cc1 -ast-dump=json` 的输出。作为文法分析实验模块,本仓库中的 `sysu-grammar` 并不能处理完整的 SYsU,但提供了一个模板,需要学生将其文法分析规则补充完整([详细实验要求](grammar/README.md))。
175173

176-
```bash
174+
```shell
177175
$ ( export PATH=$HOME/sysu/bin:$PATH \
178176
CPATH=$HOME/sysu/include:$CPATH \
179177
LIBRARY_PATH=$HOME/sysu/lib:$LIBRARY_PATH \
@@ -194,7 +192,7 @@ eof '' Loc=<tester/functional/000_main.sysu.c:3:2>
194192

195193
<!-- {% raw %} -->
196194

197-
```bash
195+
```shell
198196
$ ( export PATH=$HOME/sysu/bin:$PATH \
199197
CPATH=$HOME/sysu/include:$CPATH \
200198
LIBRARY_PATH=$HOME/sysu/lib:$LIBRARY_PATH \
@@ -210,7 +208,7 @@ $ ( export PATH=$HOME/sysu/bin:$PATH \
210208

211209
SYsU 的旧词法分析器,产生类似于 `clang -cc1 -dump-tokens 2>&1` 的输出。作为词法分析实验模块,本仓库中的 `sysu-lexer` 并不能处理完整的 SYsU,但提供了一个模板,需要学生将其词法规则补充完整([详细实验要求](lexer/README.md))。
212210

213-
```bash
211+
```shell
214212
$ ( export PATH=$HOME/sysu/bin:$PATH \
215213
CPATH=$HOME/sysu/include:$CPATH \
216214
LIBRARY_PATH=$HOME/sysu/lib:$LIBRARY_PATH \
@@ -235,7 +233,7 @@ SYsU 的旧语法分析器,接受来自 `sysu-lexer` 的输入,输出一个
235233

236234
<!-- {% raw %} -->
237235

238-
```bash
236+
```shell
239237
$ ( export PATH=$HOME/sysu/bin:$PATH \
240238
CPATH=$HOME/sysu/include:$CPATH \
241239
LIBRARY_PATH=$HOME/sysu/lib:$LIBRARY_PATH \
@@ -250,7 +248,7 @@ $ ( export PATH=$HOME/sysu/bin:$PATH \
250248

251249
当然,也可以直接从 `clang -cc1 -dump-tokens 2>&1` 获得输入。
252250

253-
```bash
251+
```shell
254252
( export PATH=$HOME/sysu/bin:$PATH \
255253
CPATH=$HOME/sysu/include:$CPATH \
256254
LIBRARY_PATH=$HOME/sysu/lib:$LIBRARY_PATH \
@@ -264,7 +262,7 @@ $ ( export PATH=$HOME/sysu/bin:$PATH \
264262

265263
`sysu-generator``sysu-parser` 得到的语法分析树转换为 LLVM IR。作为代码生成实验模块,本仓库中的 `sysu-generator` 并不能处理完整的 SYsU,但提供了一个模板,需要学生将其补充完整([详细实验要求](generator/README.md))。
266264

267-
```bash
265+
```shell
268266
$ ( export PATH=$HOME/sysu/bin:$PATH \
269267
CPATH=$HOME/sysu/include:$CPATH \
270268
LIBRARY_PATH=$HOME/sysu/lib:$LIBRARY_PATH \
@@ -287,7 +285,7 @@ entry:
287285

288286
注意在以下的输出中,`; ModuleID = '<stdin>'` 前的输出来自 `stderr`,包含了一个来自 [banach-space/llvm-tutor](https://github.com/banach-space/llvm-tutor/blob/main/lib/StaticCallCounter.cpp)`StaticCallCounter` Pass,可以统计生成代码中包含哪些 `call` 调用。
289287

290-
```bash
288+
```shell
291289
$ ( export PATH=$HOME/sysu/bin:$PATH \
292290
CPATH=$HOME/sysu/include:$CPATH \
293291
LIBRARY_PATH=$HOME/sysu/lib:$LIBRARY_PATH \
@@ -314,7 +312,7 @@ entry:
314312

315313
同时提供了一个 LLVM 插件 `libsysuOptimizer.so`,可以使用 `opt` 直接加载。这意味着 `sysu-optimizer` 中的 pass 也可直接用于 LLVM 生态。
316314

317-
```bash
315+
```shell
318316
( export PATH=$HOME/sysu/bin:$PATH \
319317
CPATH=$HOME/sysu/include:$CPATH \
320318
LIBRARY_PATH=$HOME/sysu/lib:$LIBRARY_PATH \
@@ -350,7 +348,7 @@ entry:
350348

351349
大算例以 `git submodule` 的形式存放在 `tester/third_party`。加载方式:
352350

353-
```bash
351+
```shell
354352
git submodule update --init --recursive --depth 1
355353
```
356354

generator/README.md

+5-5
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
在本次 IR(中间代码)生成实验中,你被希望完成一个 IR 生成器,接受来自 `sysu-parser``clang -cc1 -ast-dump=json` 的语法树输入,产生 LLVM IR。预期的代码行数为 1500 行,预期的完成时间为 36 小时 ~ 108 小时。
66

7-
```bash
7+
```shell
88
$ ( export PATH=$HOME/sysu/bin:$PATH \
99
CPATH=$HOME/sysu/include:$CPATH \
1010
LIBRARY_PATH=$HOME/sysu/lib:$LIBRARY_PATH \
@@ -35,7 +35,7 @@ attributes #0 = { noinline nounwind optnone "correctly-rounded-divide-sqrt-fp-ma
3535

3636
注意,你的输出不必与 `clang -cc1 -O0 -S -emit-llvm` 完全相同,只要你的 LLVM IR 在经过编译后与其有相同的输出与返回值。
3737

38-
```bash
38+
```shell
3939
$ ( export PATH=$HOME/sysu/bin:$PATH \
4040
CPATH=$HOME/sysu/include:$CPATH \
4141
LIBRARY_PATH=$HOME/sysu/lib:$LIBRARY_PATH \
@@ -54,7 +54,7 @@ entry:
5454

5555
至此一个初级的 SYsU 编译器就完成了!你可以使用 `lli` JIT 地执行编译出来的代码。
5656

57-
```bash
57+
```shell
5858
$ ( export PATH=$HOME/sysu/bin:$PATH \
5959
CPATH=$HOME/sysu/include:$CPATH \
6060
LIBRARY_PATH=$HOME/sysu/lib:$LIBRARY_PATH \
@@ -74,7 +74,7 @@ $ echo $? # 在 Unix & Linux 中,可以通过 echo $? 来查看最后运行的
7474

7575
你可以像这样,借助 `opt -dot-cfg` 选项,生成一个输入的 CFG 可视化。终端执行下述指令,将在目录下生成 `.main.dot` 文件,对应源代码中 `main` 函数的 CFG 图。
7676

77-
```bash
77+
```shell
7878
( export PATH=$HOME/sysu/bin:$PATH \
7979
CPATH=$HOME/sysu/include:$CPATH \
8080
LIBRARY_PATH=$HOME/sysu/lib:$LIBRARY_PATH \
@@ -101,7 +101,7 @@ $ echo $? # 在 Unix & Linux 中,可以通过 echo $? 来查看最后运行的
101101

102102
本次实验的评测项目为 `benchmark_generator_and_optimizer_[0-1]``benchmark_generator_and_optimizer_0` 仅用于证明模板(代码与评测脚本)可以正确工作,不计入成绩;其他评测项详见[评测脚本](../compiler/sysu-compiler)以了解检查算法,但不得修改评测逻辑而投机取巧。你也可以像这样调用评测脚本,单独执行其中的一个评测项。
103103

104-
```bash
104+
```shell
105105
( export PATH=$HOME/sysu/bin:$PATH \
106106
CPATH=$HOME/sysu/include:$CPATH \
107107
LIBRARY_PATH=$HOME/sysu/lib:$LIBRARY_PATH \

grammar/README.md

+3-3
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
注意,以下 log 省略了无关内容。
88

9-
```bash
9+
```shell
1010
$ ( export PATH=$HOME/sysu/bin:$PATH \
1111
CPATH=$HOME/sysu/include:$CPATH \
1212
LIBRARY_PATH=$HOME/sysu/lib:$LIBRARY_PATH \
@@ -147,7 +147,7 @@ $ ( export PATH=$HOME/sysu/bin:$PATH \
147147
148148
考虑到 json 格式不方便肉眼调试,你可以像这样,输出更加符合人眼阅读方式的语法树,辅助调试。
149149
150-
```bash
150+
```shell
151151
$ ( export PATH=$HOME/sysu/bin:$PATH \
152152
CPATH=$HOME/sysu/include:$CPATH \
153153
LIBRARY_PATH=$HOME/sysu/lib:$LIBRARY_PATH \
@@ -303,7 +303,7 @@ Visitor 有更强的可定制性,但是需要自行实现每个节点到子节
303303

304304
评测脚本忽略空白符,可以查看[评测脚本](../compiler/sysu-compiler)以了解检查算法,但不得修改评测逻辑而投机取巧。你也可以像这样调用评测脚本,单独执行其中某一个评测项。
305305

306-
```bash
306+
```shell
307307
( export PATH=$HOME/sysu/bin:$PATH \
308308
CPATH=$HOME/sysu/include:$CPATH \
309309
LIBRARY_PATH=$HOME/sysu/lib:$LIBRARY_PATH \

lexer/README.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
在本次词法分析实验中,你被希望完成一个词法分析器,产生与 `clang -cc1 -dump-tokens 2>&1` 相当的内容。预期的代码行数为 250 行,预期的完成时间为 2 小时 ~ 6 小时。
66

7-
```bash
7+
```shell
88
$ ( export PATH=$HOME/sysu/bin:$PATH \
99
CPATH=$HOME/sysu/include:$CPATH \
1010
LIBRARY_PATH=$HOME/sysu/lib:$LIBRARY_PATH \
@@ -51,7 +51,7 @@ eof '' Loc=<tester/functional/000_main.sysu.c:3:2>
5151

5252
评测脚本忽略空白符,可以查看[评测脚本](../compiler/sysu-compiler)以了解检查算法,但不得修改评测逻辑而投机取巧。你也可以像这样调用评测脚本,单独执行其中某一个评测项。
5353

54-
```bash
54+
```shell
5555
( export PATH=$HOME/sysu/bin:$PATH \
5656
CPATH=$HOME/sysu/include:$CPATH \
5757
LIBRARY_PATH=$HOME/sysu/lib:$LIBRARY_PATH \

optimizer/README.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
在本次 IR(中间代码)优化实验中,你被希望完成一个 IR 优化器,接受来自 `sysu-generator``clang -cc1 -O0 -S -emit-llvm` 的 LLVM IR,输出优化后的 LLVM IR。本实验为开放性实验,没有预期完成时间与代码行数。
66

7-
```bash
7+
```shell
88
( export PATH=$HOME/sysu/bin:$PATH \
99
CPATH=$HOME/sysu/include:$CPATH \
1010
LIBRARY_PATH=$HOME/sysu/lib:$LIBRARY_PATH \
@@ -76,7 +76,7 @@ Pass/PassManager 是 LLVM 里最重要的核心组件之一,自 LLVM 诞生以
7676

7777
本次实验的评测项目仍然为 `benchmark_generator_and_optimizer_[0-1]``benchmark_generator_and_optimizer_0` 仅用于证明模板(代码与评测脚本)可以正确工作,不计入成绩;其他评测项详见[评测脚本](../compiler/sysu-compiler)以了解检查算法,但不得修改评测逻辑而投机取巧。你也可以像这样调用评测脚本,单独执行其中的一个评测项。
7878

79-
```bash
79+
```shell
8080
( export PATH=$HOME/sysu/bin:$PATH \
8181
CPATH=$HOME/sysu/include:$CPATH \
8282
LIBRARY_PATH=$HOME/sysu/lib:$LIBRARY_PATH \

parser/README.md

+3-3
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
注意,以下 log 省略了无关内容。
88

9-
```bash
9+
```shell
1010
$ ( export PATH=$HOME/sysu/bin:$PATH \
1111
CPATH=$HOME/sysu/include:$CPATH \
1212
LIBRARY_PATH=$HOME/sysu/lib:$LIBRARY_PATH \
@@ -131,7 +131,7 @@ $ ( export PATH=$HOME/sysu/bin:$PATH \
131131
132132
考虑到 json 格式不方便肉眼调试,你可以像这样,输出更加符合人眼阅读方式的语法树,辅助调试。
133133
134-
```bash
134+
```shell
135135
$ ( export PATH=$HOME/sysu/bin:$PATH \
136136
CPATH=$HOME/sysu/include:$CPATH \
137137
LIBRARY_PATH=$HOME/sysu/lib:$LIBRARY_PATH \
@@ -277,7 +277,7 @@ flowchart TD;
277277

278278
评测脚本忽略空白符,可以查看[评测脚本](../compiler/sysu-compiler)以了解检查算法,但不得修改评测逻辑而投机取巧。你也可以像这样调用评测脚本,单独执行其中某一个评测项。
279279

280-
```bash
280+
```shell
281281
( export PATH=$HOME/sysu/bin:$PATH \
282282
CPATH=$HOME/sysu/include:$CPATH \
283283
LIBRARY_PATH=$HOME/sysu/lib:$LIBRARY_PATH \

0 commit comments

Comments
 (0)