前言
随着期末的到来,编译原理这门课也到了要提交大作业的时候了,因此在这里作一笔记。
开始写编译器
概览
- 首先本编译器是基于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编译器了