石凤贵
摘要:《编译原理》课程是高校计算机专业一门核心专业课,培养学生熟悉编译程序的内部结构及原理,为从事软件开发奠定基础,从而提升软件人员的素质和能力。LR(0)分析是构造其他LR分析器的基础。该文介绍了LR(0)语法分析可视化动态演示系统的分析与设计。
关键词:编译原理;LR(0);文法
中图分类号:TP311
文献标识码:A
文章编号:1009-3044(2020)03-0083-02
1 背景
《编译原理》是高等学校计算机专业的一门必修课,理论性比较强,主要介绍程序设计语言翻译的原理、技术及实现。计算机只能识别0和1所构成的指令序列,高级计算机语言编写的程序不能直接在机器上运行,需要将源程序转换为等价的目标程序,这个转换过程就是编译。从源程序到目标程序转换的过程就是编译过程,过程比较复杂,需要划分为多个阶段将源程序由一种表现形式转换为另一种形式,每个阶段的操作在逻辑上是紧密相连的。编译过程分为六个阶段(如图1所示):
2 LR(0)
LR(0)是一种“移进一规约”自底向上的分析文法,当栈顶符号串形成句柄时就采取规约,因此这种分析方法的关键是如何确定句柄。LR(k)分析方法是1965年Knuth提出的,参数k表示向右查看输入串符号的个数。
LR(0)分析器由总控程序、分析表或分析函数、分析栈3个部分组成,其工作过程如图2所示[1]。
LR(0)分析实例:
A.对文法G的产生式编号:
(0)S-→E (4)A→d
(1) E→Aa
(5)B→Cb
(2) E→Bb
(6)B→d
(3) A→Ca
B.构造这个文法的LR(O)分析表(如表1)[2][3]:C.对字符串bccd#用LR(O)分析器进行分析(如表2):
3 系统总体设计
3.1 系统功能分析
本系统完成了对编译原理相关知识的基本操作,采用人机交互界面,有一定的规范性,操作方便,比较直观。主要功能有:
1)新建窗口,用于創建新的工程,也可打开演示工程。
2)在主窗口(一个类似VC的界面)中,可以编辑文法和源文件,系统并根据格式标准检查输入文档是否有错,若出错则产生提示。
3)生成对应文法的分析表和状态机,并可以对状态机进行显示类型的操作。
4)利用对应文法的分析表对相应的源文件进行动态分析,在这里显示四个窗口——语法树、源文件、堆栈、分析表,还可以进行单步显示,这样利于观察其变化;还可以通过窗口操作对窗口进行“层叠”“平铺”等操作。
3.2系统功能模块框图
3.3系统总体流程图
4 系统详细设计
4.1 生成LR(O)状态机的程序流程图
4.2 LR(O)分析过程程序流程图
参考文献:
[1]姜淑娟,张辰,刘兵.编译原理及实现[M].北京:清华大学出版社,2016.
[2]康慕宁,林奕,编译原理[M].北京:人民邮电出版社,2010.
[3]黄贤英,王柯柯,曹琼,编译原理及实践教程[M].北京:清华大学出版社,2019.