- 词法分析程序的设计
- 文法的I/O
- LL(1)文法构造
- 语法分析程序的设计-自上而下(LL(1)分析)
- 语法分析程序的设计-自下而上(SLR分析)
- 逆波兰式的翻译和计算
- 报告/模块介绍见
- 项目文件config(VS)
- 在 .vcxproj文件中完成vs逻辑和物理文件的映射
- 在 .vcxproj.filters 中配置文件在VS中的逻辑组织
- 详细配置方式__见文档_./doc/config.md
- 使用
- VS2022
- 文件GBK2319编码
- STL操作+OOP封装
git clone https://github.com/AaalexMTX/Compilation_Principle_Algorithm.git
cd Compilation_Principle_Algorithm/Release
./Compilation_Principle_Algorithm.exe
包括 左递归消除+提公因式
可识别的结构包括
//直接左递归
A->Abc|d
//间接左递归
S->Qc|c|cab;
Q->Rb|b;
R->Sa|a;
//多组直接公因式
A->an|ab|c|cba|d
//隐含公因式
A->ad|Bc;
B->aA|bB;
//这是一个表达式的识别文法
E->T|E+T;
T->F|T*F;
F->i|(E);
最终实现对表达式结构正误的识别
1+2; //yes
(1+2)*3+(5+6*7); //yes
((1+2)*3+4; //no
1+2+3+(*4+5); //no
- 文件管理略显潦草
- 头文件和源文件起码得分开
- 规范化各个实验的文件名 (如优)
- 不同后缀文件的位置(.h .cpp .txt)
- VS提供的过滤器只是逻辑上分的,实际文件的包含关系需要在 .vcxproj中手动设置
- 例如:右击新建.cpp项目(默认项目根下新建) -> 卸载项目 -> 修改.vcxproj中文件的路径为实际路径 -> 重新加载项目
- 用类思想封装 抽象
- 实验1-6的关联性是重合了部分公用数据结构和函数 可以抽象一下
- 使用不同的类,把不同的实验函数封装起来(现在方法直接暴露在源文件中)
- ...
- 用cpp新特性(移动、智能指针)来规范简化操作
- 几个实验间的方法和结构间有联系,可以考虑OOP用基类和虚函数再抽象一下
- 中文乱码:默认使用GBK2319编码、输出改英文
- 编译期间的警告warning