Skip to content

rocketeerli/Compilation-Principle

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

----------------------------------

代码无用,无参考价值,望周知

----------------------------------

词法分析

设计实现类高级语言的词法分析器,基本功能为识别以下几类单词:

  • 标识符(由大小写字母、数字以及下划线组成,但必须以字母或者下划线开头)
  • 关键字(①类型关键字:整型、浮点型、布尔型、记录型;②分支结构中的if和else;③循环结构中的do和while;
  • 运算符(①算术运算符;②关系运算符;③逻辑运算)
  • 界符(①用于赋值语句的界符,如“=”;②用于句子结尾的界符,如“;”;
  • 常数(无符号整数和浮点数等)
  • 注释(/……/形式)

语法分析 (LR(1))

在词法分析器的基础上设计实现类高级语言的语法分析器,基本功能如下:

(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日更新

老师给的分数太低了,刷新了大学以来考试课最低;唉,也怪自己没好好学,不想说啥

About

编译原理实验

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages