Notice:该项目应当运行于Linux系统(建议运行于Ubuntu系统)且支持至少C++11
完成三型文法至DFA的转换
代码存在部分问题,完成已知的bug修复
由于编译问题,暂时将所有文件放在new.cpp
和new.h
中
目前进展:可以将合法的字符组成(以下划线和字母为首)正确分割
修复编译问题,重新组织文件结构
.
├── convert.cpp
├── convert.h
├── header.h
├── lexer.cpp
├── lexer.h
├── README.md
├── simulation
│ ├── grammar.txt
│ └── test.txt
├── test
└── test.cpp
1 directory, 10 files
完成DFA最小化,并且可以输出具体的DFA列表,输出结果如图
新增加部分词法规则
- 科学计数法
- 复数常量
- 修复部分bug
- 需要添加运算epsilon-closure的功能,并修改数字的正则文法
- 完成添加epsilon-closure的功能
- 修改正则文法,以达到任务一目标
- 增加识别类型函数
- 增加识别运算符功能
- 添加运行脚本
run.sh
运行截图:
- 上个版本存在无法识别如1+3.4i一类的数字,已修复
- 修复第一个问题时出现段错误,经过gdb debug后发现,
addNode()
函数中使用了vector::insert()
方法,容易造成越界导致段错误,已更改为vector::push_back()
- 修改测试数据
运行结果:
- 调整文件结构
- 结果输出在终端改为dump到文件夹中
- 调整
run.sh
文件,增加运行多个task功能
运行结果:
- 增加语法分析器读取二型文法功能
文件结构:
.
├── image
│ ├── 2022.2.27.png
│ ├── run_3.27.png
│ ├── task one2.png
│ └── task one.png
├── lexical
│ ├── convert.cpp
│ ├── convert.h
│ ├── header.h
│ ├── lexer.cpp
│ ├── lexer.h
│ ├── lexical
│ ├── lexical.cpp
│ └── token.txt
├── parser
│ ├── header.h
│ ├── parser.cpp
│ └── parser.h
├── README.md
├── res
├── run.sh
└── simulation
├── grammar.txt
└── test.txt
5 directories, 19 files
- 修改文件路径和run.sh
- 修改chType类内成员及初始化函数
- 修改语法分析器读取二型文法功能,2022.3.27 15:21版本无法读取二型文法
- 增加新类
NonTerminal
- 添加函数声明
NonTerminal::getFirstUnion
、Parser::getFirstUnion
- 类
chType
中增加类成员nonTerminal
- 更新函数
getFirstUnion()
- 新增函数
breakFirstUnion()
,用于判断是否退出计算FIRST集合
- 完成计算FIRST集功能
- 经过测试,暂未发现问题
运行结果:
- 增加类
Closure
- 增加函数
Closure::initial()
- 调整FIRST集输出格式
- 更新
Closure::initial()
- 完成自动机的闭包运算
运行结果:
- 增加dump closure功能
运行结果:
- 更新dump closure,输出更多数据
- 完成action表与goto表
- closure类中增加下一个状态的相关信息
WARNING: 如果未执行过任务一,暂时需要先在目录中创建文件夹/res
运行结果:
- 增加python文件
dumpTable.py
,用于生成action&goto table.xls
- 更新自动化脚本,修复删除结果失败时无法运行的bug
- 修复未创建
res
文件夹时无法dump结果的bug - 调整dump结果文件结构
- 修复部分潜在的bug
- 完成语法分析基本功能
- 增加更多的dump结果
- 调整文件结构
-
增加更多的语法以支持预定的功能
if
语句switch
语句- 更多的赋值语句
-
增加更多的符号
-
支持简单的语法错误说明提示
运行结果:
- 词法分析器增加错误提示