前言
随着期末的到来,编译原理这门课也到了要提交大作业的时候了,因此在这里作一笔记。
开始写编译器
概览
- 首先本编译器是基于Micro C编译器写的,基于Micro C编译器改进并引入新特性
- Micro C源码
Micro C分析
- Micro C主要是由以下几部分组成
- 解释器
- Absyn.fs #抽象语法 (需要修改)
- grammar.txt #文法定义
- CLex.fsl #fslex词法定义 (需要修改)
- CPar.fsy #fsyacc语法定义 (需要修改)
- Parse.fs #语法解析器
- Interp.fs #解释器
- 编译器
- Machine.fs #VM 指令定义 (需要修改)
- Machine.java #使用Java作为编译器后端 (需要修改)
- Comp.fs #编译器 输出 stack vm 指令序列
- Backend.fs #编译器后端 翻译 stack vm 指令序列到 x86_64 (需要修改)
- 其他
- Debug.fs #debug模式相关文件
- microc.fs #定义了读入的文件格式
- microc.fsproj #项目构建相关
- ParseAndComp.fs #定义了一些接口
- 解释器
- 构建与运行指令
dotnet build
#构建项目dotnet fsi
#打开f#控制台#r \"nuget: FsLexYacc\";;
#导入库文件#load \"Absyn.fs\" \"CPar.fs\" \"CLex.fs\" \"Debug.fs\" \"Parse.fs\" \"Machine.fs\" \"Backend.fs\" \"Comp.fs\" \"ParseAndComp.fs\";;
open ParseAndComp;;
compileToFile (fromFile \"test\\\\test.c\") \"output\\\\ex\";;
#编译测试文件javac Machine.java
#编译器后端java Machine ./output/test.out 2
#运行测试文件dotnet run -p microc.fsproj ./test/test.c
#这种也可以一步编译到位,但是microc.fsproj要配置好- 解释器执行
- 'dotnet restore interpc.fsproj'
- 'dotnet clean interpc.fsproj'
- 'dotnet build -v n interpc.fsproj'
- 'dotnet run -p interpc.fsproj ex1.c 8'
- 了解了以上的文件结构后便可以开始着手修改Micro C编译器了