- 运行环境为Microsoft Visual Studio Community 2019 + win10 LTSC
- 测试文件为本目录下test.txt
- 在2020李同学的基础上改进,代码量翻倍,并改用纯C编写
- 对于变量,定义即声明;对于函数,必须在调用前声明+定义(main函数默认已声明)
- 仅支持int short float char类型
- 使用哈希表提高查找token和标识符的效率
- 使用递归实现自扩展和模块化
- 使用栈进行变量、大括号、if else语句、表达式的分析
- 修复了一些BUG(部分是改C以后产生的),增加了一些注释
- 字符串比较和赋值全部改用str系列
- 栈用老师课上写的接口(带尾结点)
- 函数体内局部变量定义合法性分析
- 注释在词法分析中直接打出,不存储;支持多行注释
- 用宏减少了重复代码并提高了可读性
- 优化逻辑,尽量减少代码量
- 支持浮点数float的分析(不完善)
- 函数体内的变量定义和赋值可以是变量、常量、函数调用,以及上述三种的混合
- if、while小括号内布尔语句合法性判断
- 完善for小括号内三段语句合法性判断,第一段可以是定义,独立深度
- 完善break、continue(必须在循环内)、return(非void必须有返回值)
- return、if、else、for后无大括号单行语句合法性判断
- 支持else if
- 支持||、&&、!、sizeof
- 记录变量和函数返回值的数据类型,完善部分类型判断(变量和函数可以在表达式中)
- 增加对变量、函数重定义的报错
- 增加对同一函数多次声明不一致的报错
- 增加对变量、函数使用前未定义/声明的报错
- 函数嵌套调用
- 变量类型判断仅记录最浅一次,且退出函数后未销毁(需结合变量栈)
- main函数前定义同时声明,检测是否有main函数
- if else需结合大括号分析
- 死循环/死锁的初步判断
- 变量/函数未使用的提示
- 结构体/数组/字符串/二维数组/指针及指针相关操作
- 函数指针(在变量定义时)
- 函数重载
- 报错不够精准
- 自动缩进
- 最后缺}无法定位行数
- static extern
- 强制类型转换
- 中括号、小括号的嵌套
- 存在众多尚未检测出的bug
-
变量重定义栈(二维链栈)
-
已声明但定义在调用后