"哈工大编译原理实验二主要涉及语法分析,实验要求学生使用LL(1)、SLR(1)、LR(1)或LALR(1)等句法分析技术对类高级语言的基本语句进行分析。实验内容包括设计实现声明语句、表达式及赋值语句、分支语句、循环语句和过程调用语句的语法分析器。此外,还需要编写程序计算FIRST集和FOLLOW集(针对自顶向下分析)或CLOSURE(I)和GOTO函数(针对自底向上分析),生成相应的预测或LR分析表。实验要求具备语法错误处理能力,提供准确的错误定位和恢复策略。系统应支持文件导入文法和测试用例,同时能够显示和编辑测试用例。输出应包括分析表和语法分析结果,后者以先序遍历方式展示语法分析树,并附带相关信息如行号和属性值。"
在编译原理中,语法分析是将词法分析器生成的 token 流转换成抽象语法树的过程,它是编译器的重要组成部分。实验中提到的几种分析技术有:
1. LL(1):自顶向下的分析方法,L表示Left-to-right扫描输入串,L(1)表示仅使用当前符号和下一个符号的信息来决定如何分析。在LL(1)分析中,需要构建FIRST集和FOLLOW集来生成预测分析表。
2. SLR(1):简单左递归移进-归约分析,也是自顶向下的一种,与LL(1)类似,但处理左递归更简单。
3. LR(1):自底向上的分析方法,L表示Left-to-right扫描输入串,R表示右most衍生,(1)表示使用当前符号和查看一个符号后的信息。LR分析需要计算CLOSURE(I)和GOTO函数,以生成LR分析表。
4. LALR(1):LR(1)的一个优化版本,它减少了LR分析表中的冲突,使得分析器更易于实现。
实验的目标是设计一个能够处理类高级语言基本结构的语法分析器,这涵盖了程序设计语言中的常见元素,如声明、表达式、控制流语句和过程调用。为了实现这个目标,学生需要深入理解这些分析技术的原理,掌握如何构建和使用分析表,以及如何有效地处理语法错误。
此外,实验还强调了输入输出的格式化和用户友好性,要求通过文件导入文法规则和测试用例,方便测试和调试。错误处理能力是编译器的关键特性,能够提供准确的错误定位和友好的错误信息,有助于用户快速理解并修复问题。
这个实验旨在提升学生的实践能力,使他们能够在理论知识和实际应用之间建立桥梁,深入理解编译器的工作原理,特别是语法分析这一关键阶段。