实验二:LR(1)语法分析实现 - C++编程

需积分: 0 0 下载量 50 浏览量 更新于2024-08-04 收藏 32KB DOCX 举报
"180110115-方澳阳-实验二语法分析1" 实验报告详细探讨了编译原理中的一个重要概念——自底向上的语法分析LR(1)方法,由学生方澳阳完成。实验目标是深入理解语法分析程序的实现原理和LR(1)分析法,这是一种从左向右扫描、自底向上的分析技术。实验使用C++编程语言,在Clion 2020.2环境下进行,适用于Linux和Windows系统,但推荐在Linux环境下运行。 实验流程主要包括设计一个类C语言的文法,读取软件生成的LR(1)分析表,并根据LR(1)推导规约过程编写程序。实验内容中提到了有穷自动机的图片和LR(1)分析表,但由于大小原因,需在文件夹内查看。 在数据结构设计部分,实验首先介绍了词法分析时使用的数据结构。Token串采用动态数组存储,每个元素是一个pair,包含种类(int)和具体的串(string)。标识符信息存储在符号表中,使用Map数据结构,键为标识符,值为SYSTABLE对象,包含了标识符的类型和地址。 接着,实验阐述了LR分析表的数据结构设计。由于LR(1)分析表通常包含Action表和Goto表,所以它们被分别存储。Action表使用vector<vector<string>>存储,而Goto表使用vector<vector<int>>。考虑到C++不支持像Python那样的灵活数据处理,实验将行动(action)和转移(goto)的索引分开管理,将字符串类型的Action表值转换为数字类型,以便于处理。 整个实验报告揭示了编译器设计中从词法分析到语法分析的关键步骤,以及如何利用数据结构有效地存储和处理这些信息。通过这样的实践,学生能够深入理解编译器构造的核心概念,如LR(1)分析和自定义文法的设计。