requirements: win10,电脑得装得下wsl
-
微软商店中的任意Linux子系统(Ubuntu,debian,centos均可,需要开启wsl子系统功能)
-
vscode,官网自寻
- 步骤3、4、5次序可以交换
-
下载完成wsl后启动,配置用户名密码等。并更换apt源 (清华 阿里)
-
打开vscode 安装汉化插件 安装remote-wsl
-
microsoft/WSL#2468 配置wsl 支持32bit程序。
每次使用需要开启binfmt-support服务
sudo start binfmt-support start
-
安装flex bison
-
将cool文件夹放入~目录
- 可以在wsl中使用mv、cp等指令
- 可以查询wsl所在文件在系统中的位置直接移动
- 亦可以将cool文件夹放在任意位置,但是注意CLASSDIR应该设置为/mnt/(盘符)/...
-
在vscode中打开wsl子系统。ctrl+`打开控制台。之后使用和指导书一致。
西安交通大学 编译原理 实验
由于老师给的文件中有过多干扰,故建立此repo
修改中难免有错误,请以各个PA中的readme为准
配置环境(见上)
PA1
编写编译运行coolc程序
PA1
目标 | 文件 |
---|---|
统计行数,列数和字数 | Lex1.l |
记录行数,列数和字数 | Lex2.l |
magic多入口 | Lex3.l |
统计if个数 | Lex4.l |
- 编译命令
# flex 识别
flex ${file}.l
# gcc 生成.out可执行文件
gcc -o ${file}.out lex.yy.c -lfl
PA2
目标 | 文件 |
---|---|
coolc的词法分析器编写 | cool.flex |
PA3
目标 | 文件 |
---|---|
多位计算(加减乘除括号) | task1.l task1.y联合编译 |
double计算(加减乘除括号) | task1p.l task1p.y联合编译 |
布尔运算(与或非括号) | task2.l task2.y联合编译 |
一位数计算器(减法、乘法、赋值) | task3.y 单文件编译 |
一位数计算器(加减乘除括号赋值) | task4.y 单文件编译 |
多位数计算器(加减乘除括号赋值) | task5.y 单文件编译 |
- 联合编译命令
# flex 识别token
flex -o ${file}.yy.c ${file}.l
# bison生成.tab.h 定义token
bison -d ${file}.y
# bison生成.tab.c
bison -o ${file}.tab.c ${file}.y
# 生成可执行文件
gcc -o ${file}.out ${file}.yy.c ${file}.tab.c
- 单文件编译命令
# bison生成.c
bison -o ${file}.c ${file}.y
# 生成可执行文件
gcc -o ${file}.out ${file}.c
PA3
cool.y为原语法分析器 cool.ans.y即为语法分析器,可替换cool.y编译使用,增加了对let的支持
请务必仔细阅读相应的readme 如有必要,请学习编写修改Makefile文件