1 / 9
文档名称:

编译原理语法分析实验报告.doc

格式:doc   大小:168KB   页数:9页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

编译原理语法分析实验报告.doc

上传人:小雄 2021/7/20 文件大小:168 KB

下载得到文件列表

编译原理语法分析实验报告.doc

相关文档

文档介绍

文档介绍:编译原理实验报告
LR语法分析过程模拟
******@ (: 121250083)
目录
目标 1
内容概述 1
假设与依赖 2
3. 1实验环境 2
3. 2其他假设 2
思路和方法 2
主要数据结构描述 2
5. 1输入带 2
5. 2状态栈和符号栈 3
5. 3分析表项 3
核心算法 3
测试用例 5
7. 1测试输入 5
7. 1. 1 LR分析表 5
7. 1. 2 上下文无关文法 6
7. 2测试输出 7
困难与解决方案 8
总结与收获 8
参考资料 8
目标
本次实验的目的是对编译器进行词法分析的过程进行模拟,我选择了在实际中更为通用 的自底向上的词法分析器的分析过程,最终产生规约序列。对于LR(0)和LR(1)问题,我的 程序对于LR(0)和LR⑴是通用的,因为只要给出合法的parsing table和上下文无关文法,程 序就能进行相应的词法分析,而parsing table和文法都是用户输入文件给出。
内容概述
本文档描述了编译原理课程实验中,语法分析器部分的实验内容,实验方案以及结果。


操作系统
Ubuntu LTS
编译器
gcc (Ubuntu/Linaro -lubuntu5)
其他工具
Gnu make, Vim, Git
编码格式
Utf-8

假设用户确保自己做为输入的parsing table和文法是正确的,并且是非二义性的,即LR 的
所有的非终结符和终结符都是单个字符
用户给出的输入文件是合乎系统定义的,具体格式将在下文叙述。
思路和方法
思路很直观,构建符号带,符号栈,状态栈,建立parsing table在程序当中的映射,方 便查询处理
读入用户输入的待分析的表达式,依次移动读头,如果根据当前栈顶的情况和读头下的 符号来决定当前的动作。根据当前状态栈顶的状态号和读头下的符号查parsing table, 如果查到的是Si即Shift操作,则将读头下的符号压入符号栈,将i压入状态栈,移动 读头到下一个字符;如果查到的是ri即Reduce操作,则将栈顶的所有与文法表达式i 右边相同的部分一次弹出,同时将状态栈一起弹出,将文法表达式i左边的符号X压入 符号栈,查当前状态栈栈顶的项I在GOTO表当中的GOTO(I,X),将所得的状态号压 入状态栈;如果读到rO,则分析成功;如果有其他读入,则不合法
在读入过程中,如果出现查找不到Action或者GOTO表项,则报错,终止语法分析
具体的输入文件的格式描述请参见源代码(位于/compiler_lab_private/lr 1 _simple/)中的
主要数据结构描述

定义一个类表示输入带,类定义如下: class InputStrip{
public:
vector<char> inputs;
string str;
int index;
Inputstrip(string s);
string get_current_string();
char get_current_char()