没有合适的资源?快使用搜索试试~ 我知道了~
180110115-方澳阳-实验二语法分析1
需积分: 0 0 下载量 196 浏览量
2022-08-08
22:04:17
上传
评论
收藏 32KB DOCX 举报
温馨提示
试读
11页
第一个阶段是不清楚自己要做什么,按照书上源码实现了算法 第二阶段是逐渐了解到自己要做什么,并且设计了简单的文法,在软件上测试之后,尝试读入分析表,但是会有很多错
资源详情
资源评论
资源推荐
哈尔滨工业大学(深圳) 《编译原理》实验报告-2020 秋
编译原理
实
验
报
告
实验名称:实验二:自底向上的语法分析 LR(1)
姓名: 方澳阳
学号: 180110115
学院: 计算机科学与技术
专业: 计算机类
哈尔滨工业大学(深圳) 《编译原理》实验报告-2020 秋
一、 实验目的与方法
(1)深入了解语法分析程序实现原理及方法
(2)理解 LR(1)分析法是严格的从左向右扫描和自底向上的语法分析方法
实现语言: C++
环境: Clion2020.2, linux+windows
(如果运行有问题请在 linux 环境下运行)
二、 实验总体流程与函数功能描述
流程:
1. 自行设计文法,定义一种类 C 语言的文法
2. 将由软件生成的 LR(1)分析表读入程序中
3. 根据 LR(1)的推导规约过程编写程序,输出推导过程中所用的产生式序列
并保存在 producer.txt 中
三、 实验内容
1. 有穷自动机的图片过大, 请到文件夹内自行查看。
2. LR(1)分析表也请到文件夹内自行查看。
数据结构设计
这里先给出词法分析时的数据结构设计。
Token 串和符号表的逻辑结构及存贮结构
Token 串的存储使用一个动态数组存储,定义为
vector<pair<int,string>>
哈尔滨工业大学(深圳) 《编译原理》实验报告-2020 秋
数组中的每一个元素为一个 pair,pair.first 代表种类,pair.second 表
示具体的串。当 pair.first 为标识符时,可以通过 pair.second 去符号表中索
引到对应的信息。
符号表使用 Map 作为存储结构。通过设置对应的 string 串作为 key,可以
在 Map 中得到其对应的 value。符号表定义为
map<string,SYSTABLE> sysMap
其中,SYSTABLE 为一个类,里面存储了对应标识符的 type 和 address。
为了使词法分析和语法分析的接口对应,因此语法分析的输入数据的数据结
构与 token 串相同,即为 vector<pair<int,string>>。
LR 分析表数据结构设计
由于 LR(1)分析表可以分为两个表,即 Action 表和 Goto 表,因此我将两个表分开存
储。
观察 csv 文件中的分析表可知,action 表中的值的类型为字符串,而 goto 表中的为数字,
因此声明部分为:
vector<vector<string>> actionMap;
vector<vector<int>> gotoMap;
由于 C++没有像 python 一样的可以处理 frame 类型的数据,因此我将 action 表和 goto 表的
索引单独存放,可以将字符串类型映射为数字类型,从而在上面的二维数组中找到对应的值:
map<string, int> index;
map<string, int> NoEndIndex;
算法描述
LR(1)分析算法伪代码为:
输入:文法 G 的 LR 分析表和输入串 input
输出:如果 input 属于 L(G),则输出 input 的自底向上分析,否则报错。
剩余10页未读,继续阅读
首席程序IT
- 粉丝: 31
- 资源: 305
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0