Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/wangwangwang23333/Compile-Homework
编译原理大作业——自下而上
https://github.com/wangwangwang23333/Compile-Homework
Last synced: about 1 month ago
JSON representation
编译原理大作业——自下而上
- Host: GitHub
- URL: https://github.com/wangwangwang23333/Compile-Homework
- Owner: wangwangwang23333
- Created: 2021-12-04T06:39:13.000Z (about 3 years ago)
- Default Branch: main
- Last Pushed: 2022-02-10T09:20:30.000Z (almost 3 years ago)
- Last Synced: 2024-08-02T03:02:29.739Z (5 months ago)
- Language: Python
- Size: 286 KB
- Stars: 11
- Watchers: 1
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
- awesome-tjsse-project - wangwangwang23333/Compile-Homework
README
## 简介
本项目为软件工程专业编译原理课程大作业,完成内容为自下而上语法分析章节中的算法。项目演示视频:https://www.bilibili.com/video/BV1Rq4y1y7z4
我们使用Python作为各个算法的编程语言。同时,我们采用了PyQt5作为可视化界面,使用了包括QTableWidget在内的控件实现输入输出的展示。为了实现语法树和DFA图的生成,我们使用了Graphviz包作为有向图(DFA图和语法树)绘制的工具。
## 环境需求
要运行本项目,请先保证电脑中已有Graphviz环境(配置在环境变量中)
通过python运行main.py文件即可
需要python库已添加在requirement.txt中## 实验内容
- 实验3.1为FIRSTVAL/LASTVAL集合构造算法,要求接收文法产生式,输出文法符号的FIRSTVT和LASTVT集合元素。
- 实验3.2为优先关系表构造算法,要求接收算符文法产生式,输出算符优先关系表。
- 实验3.3为算符优先分析算法,接收算符文法和算符优先分析表,输出算符优先语法分析程序。
- 实验3.4为识别文法活前缀的DFA构造算法,接收上下文无关文法,输出LR(0)和LR(1)项目的DFA图和状态转移矩阵。
- 实验3.5为LR(0)分析表构造算法,接收文法产生式和基于LR(0)项目构造的DFA图或状态转移矩阵,输出LR(0)分析表。
- 实验3.6为SLR分析表构造算法,接收文法产生式和基于LR(0)项目构造的DFA图或状态转移矩阵,输出SLR分析表。
- 实验3.7为LR(1)分析表构造算法,接收文法产生式和于LR(1)项目构造的DFA图或状态转移矩阵,输出LR(1)分析表。
- 实验3.8为LALR分析表构造算法,接收文法产生式和基于LALAR的DFA图或状态转移矩阵,输出LALR分析表。
- 实验3.9为基于LR分析表的语法分析总控程序,接收文法产生式和LR分析表,输出语法分析程序。
- 综合实验为基于LR(1)分析法的语法分析程序生成器,是实验3.4~3.8的综合性实验,接收上下文无关文法,输出语法分析程序。## 小组分工
- 汪明杰完成了算法3.2、3.4、3.9和综合性实验与界面设计
- 卓正一完成了算法3.7和3.8
- 王立友完成了算法3.1和3.5
- 梁乔完成了算法3.3和3.6## 实验亮点
- 完成了模块要求的全部算法和综合性实验;
- 通过PyQt5界面,更好的实现了不同算法的输入和输出,让结果呈现更加清晰;
- 通过Graphviz绘制DFA图和语法树,更好的展现了算法的输出;
- 代码逻辑清晰,不同功能的算法定义在了不同的类中(如GrammarManager负责词法分析,LR0类和LR1类等);
- 有错误捕捉机制,当出现输入错误时程序能够体现在界面上。