设计实现类高级语言的词法分析器,基本功能为识别以下几类单词:
- 标识符(由大小写字母、数字以及下划线组成,但必须以字母或者下划线开头)
- 关键字(①类型关键字:整型、浮点型、布尔型、记录型;②分支结构中的if和else;③循环结构中的do和while;
- 运算符(①算术运算符;②关系运算符;③逻辑运算)
- 界符(①用于赋值语句的界符,如“=”;②用于句子结尾的界符,如“;”;
- 常数(无符号整数和浮点数等)
- 注释(/……/形式)
在词法分析器的基础上设计实现类高级语言的语法分析器,基本功能如下:
(1)能识别以下几类语句:
- 声明语句(变量声明)
- 表达式及赋值语句(简单赋值)
- 分支语句:if_then_else
- 循环语句:do_while
(2)要求编写自动计算CLOSURE(I)和GOTO函数的程序,并自动生成LR分析表。(选做)
(3)具备简单语法错误处理能力,能准确给出错误所在位置,并采用可行的错误恢复策略。输出的错误提示信息格式如下: Error at Line [行号]:说明文字
(4)系统的输入形式:要求可以通过文件导入文法和测试用例,测试用例要涵盖“实验内容”第(1)条中列出的各种类型的语句,并设置一些语法错误。
(5)系统的输出分为两部分:一部分是打印输出语法分析器的LR分析表。另一部分是打印输出语法分析结果,既输出归约时的产生式序列.
在语法分析器的基础上设计实现类高级语言的语义分析器,基本功能如下:
(1)能分析以下几类语句,并生成中间代码(三地址指令和四元式形式):
- 声明语句(变量声明)
- 表达式及赋值语句分支语句:if_then_else
- 循环语句:do_while
(2)具备语义错误处理能力,包括变量或函数重复声明、变量或函数引用前未声明、运算符和运算分量之间的类型不匹配(如整型变量与数组变量相加减)等错误,能准确给出错误所在位置,并采用可行的错误恢复策略。输出的错误提示信息格式如下: Error at Line [行号]:[说明文字]
(3)系统的输入形式:要求能够通过文件导入测试用例。测试用例要涵盖第(1)条中列出的各种类型的语句,以及第(2)条中列出的各种类型的错误。
(4)系统的输出分为两部分:一部分是打印输出符号表。另一部分是打印输出三地址指令或四元式序列
代码运行是没问题的,但由于语法分析部分的产生式设计有缺陷,求 First 集函数功能受限,导致程序的功能不全。因此,语义分析部分只写了声明和赋值语句的翻译。回填的实现还需要将语法部分完善后才能实现。
虽然代码功能受限,但毕竟是自己一行一行码出来的,放上来留作以后回忆。
-- 2019年7月27日更新
老师给的分数太低了,刷新了大学以来考试课最低;唉,也怪自己没好好学,不想说啥