编译原理课程的设计构造LR分析法语法分析器

太 原 学 院

课程设计报告书

课程名称

设计题目 构造LR(0)分析法语法分析器 专业班级

学 号

姓 名

指导教师

2016年 12 月 15日

目 录

一、课题概述1

二、系统分析2

2.1 本课程设计的知识点2

2.1.1 词法编译器功能2

2.1.2 词法分析器的设计2

2.1.3 动态模拟算法的基本功能2

2.1.4 LR分析器的构成2

2. 2解决问题的基本思路3

2.3 需解决的关键技术3

2.4 功能模块框图3

三、系统设计4

3.1 算法描述4

3. 2 实现方法6

3.2.1 构造分析表6

3.2.2程序设计关键6

3.2.3 LR(0)项目集规范族的构造6

3.3 详细流程图7

四、代码编写8

4. 1 生成分析表代码8

4. 2分析句子代码10

五、调试分析14

六、运行与调试15

总 结 17

参考文献18

课题概述

《编译原理》是计算机专业的一门重要的专业课程,其中包含大量软件设计思想。通过课程设计,实现一些重要的算法,或设计一个完整的编译程序模型,能够进一步加深理解和掌握所学知识,对提高自己的软件设计水平具有十分重要的意义。语法分析是编译过程的第二阶段,是编译器前端的核心组成部分,在编译系统中起到了至关重要的作用。自底向上的语法分析与自顶向下的语法分析相比,对将要分析的源程序有着更大的分析空间,从而受到了广泛的运用。

本次课程设计的目标即是利用所学过的编译原理的知识,利用LR(0)分析法,用C语言写出一个简单的LR(0)语法分析器。该语法分析器所要完成的功能是,对录入的文法判断它是否为LR(0)文法,如果是输出LR?(0)分析表;在给定文法的情况下,能够利用LR(0)分析表,对用户输入的一串字符串用LR(0)分析法进行分析,判断该字符串是否为符合给定文法的一个句子,建立文法及其LR分析表表示的数据结构,设计并实现一个LR(0)的分析器。编译器设计的编译程序涉及到编译五个阶段中的三个,即词法分析器、语法分析器和中间代码生成器。编译程序的输出结果包括词法分析后的二元式序列、变量名表、状态栈分析过程显示及四元式序列程序。整个编译程序分为三部分:词法分析部分、语法分析处理及四元式生成部分、输出显示部分。一个程序设计语言就是一个记号系统,如同自然语言一样,它的完整的定义应包括语法和语义两个方面。所谓一个语言的语法是指一组规则,用它可以形成和产生一个合适的程序。目前广泛使用的手段是上下文无关文法,即用上下文无关文法作为程序设计语言语法的描述工具。LR分析法正是给出一种能根据当前分析栈中的符号串(通常以状态表示)和向右顺序查看输人串的k个(k>=0)符号就可惟一地确定分析器的动作是移进还是归约和用哪个产生式归约,因而也就能惟一地确定句柄。LR分析法的归约过程是规范推导的逆过程,所以LR分析过程是一种规范归约过程。

二、系统分析

2.1 本课程设计涉及的知识点

2.1.1 词法编译器功能

(1)导入任意文法,也可以自己输入。

(2)输出文法的分析过程,以及判断是否为LR?(0)文法,输出分析表。

(3)输入句子,进行语法分析。

(4)输出结构树。

2.1.2 词法分析器的设计

(1)写出该语言的词法规则。

(2)把词法规则转换为相应的状态转换图。

(3)把各转换图的初态连在一起,构成识别该语言的自动机。

(4)设计扫描器;把扫描器作为语法分析的一个过程,当语法分析需要一个单词时,就调用扫描器。扫描器从初态出发,当识别一个单词后便进入终态,送出二元式。

2.1.3 动态模拟算法的基本功能

(1)输入LR分析表和一个句子。

(2)输出LR总控程序。

(3)输出依据句子构对应的语法树的过程。

(4)设计一个给定LR分析表,输入一个句子,能由依据LR分析表输出与句子对应的语法树,能对语法树生成过程进行模拟。

(5)输入句子:bccd#。

(6)根据文法产生的LR分析表。

(7)输出结果

2.1.4 LR分析器的构成

一个LR分析器由3个部分组成

(1)总控程序,也可以称为驱动程序。对所有的LR分析器,总控程序都是相同的。

(2)分析表或分析函数。不同的文法分析表将不同,同一个文法采用的LR

分析器不同时,分析表也不同,分析表又可以分为动作(ACTION)表和状态(GOTO)表两个部分,它们都可用二维数组表示。

(3)分析栈,包括文法符号和相应的状态栈。它们均是先进后出栈。分析器的动作由栈顶状态和当前输入符号所决

lr1分析器c语言实验报告怎么写,编译原理课程的设计构造LR分析法语法分析器.doc...相关推荐

  1. 编译原理中词法分析的递归下降分析法实例--能被5整除的二进制数---c语言实现

    一.前言 又到了一周一度的编译原理实验课,一次实验课上完了,又是大学生必备技能-写实验报告.行了,废话不多说,我直接展现,如何实现编译原理中词法分析的递归下降分析法实例–能被5整除的二进制数的思路.作 ...

  2. 预测分析法语法分析器的设计

    文章目录 一.实验目的 二.实验内容 三.实验要求 四.实验设计方案 五.测试方案及测试结果 结语 附录 一.实验目的 根据文法编制预测分析法语法分析程序,以便对输入的符号串进行语法分析.通过编写预测 ...

  3. 语法分析器c语言实验报告,词法分析实验报告(C++)..doc

    词法分析实验报告(C). 词法分析实验报告 一.实验目的 1. 掌握词法分析的原理. 2. 熟悉保留字表等相关的数据结构与单词的分类方法. 3. 掌握词法分析器的设计与调试. 二.实验内容 根据编译中 ...

  4. C语言上机报告例文,c语言上机实验报告_大一c语言上机实验报告_c语言实验报告怎么写...

    计算机的同学会进行上机实验,包括ERP,JA,C语言等等.下面是出国留学网为大家整理的上机实验心得体会,供大家参考. 上机实验心得体会(一) 通过该实验,对所学的知识有了进一步的了解.在实验的过程中, ...

  5. 是栈还是队列c语言实验报告怎么写,队列和栈(C语言)

    栈和队列的基本性质 栈是先进后出的结构(弹夹) 队列是先进先出的(排队) 栈和队列在实现结构上可以有数组和链表两种方式 栈结构的基本操作: 1.弹栈 2.访问栈顶元素 3.压栈操作 4.返回当前栈中的 ...

  6. c语言实验报告实验要求,c语言实验报告格式要求.doc

    c语言实验报告格式要求.doc 下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览.不比对内容而直接下载带来的问题本站不予受理. 2.下载的文档,不会出现我们的网址水印. 3.该文档 ...

  7. 编译原理课程实践——实现一个初等函数运算语言的解释器或编译器

    编译原理课程实践--实现具有初等函数运算语言的解释器或编译器 作者:Sylvan Ding |转载请注明文章出处! 摘要:本文主要内容是设计词法分析器.语法分析器(LL(1).SLR(1))和语义分析 ...

  8. c语言实现编译器编译原理,编译原理课程设计--C语言编译器实现.doc

    编译原理课程设计--C语言编译器实现 甘肃政法学院 编译原理课程设计 题 目 C语言编译器实现 计算机科学学院计算机科学与技术专业10 级 计本 班 学 号: 201081010137 姓 名: 杨青 ...

  9. 华北水利水电大学计算机实验报告怎么写,考试类:华北水利水电大学C语言实验报告.doc...

    <考试类:华北水利水电大学C语言实验报告.doc>由会员分享,可在线阅读,更多相关<考试类:华北水利水电大学C语言实验报告.doc(4页珍藏版)>请在七彩学科网上搜索. 1.第 ...

最新文章

  1. wpf计算字符大小占像素_[读书笔记]《计算机科学速成课》——23 屏幕与2D图像显示...
  2. ajax对象状态0,ajax返回readyState为0?
  3. android之ListView和adapter配合显示图片和文字列表
  4. SSM实现导出报表为Excel
  5. Spring Statemachine TODO
  6. P2305 [NOI2014] 购票(点分治、斜率优化)
  7. 信息学奥赛一本通 1090:含k个3的数 | OpenJudge NOI 1.5 30
  8. KNN分类python实现
  9. Java面试通关要点汇总整理
  10. 编曲时如何在FL Studio卷帘窗口修改单个音符音量
  11. 亚马逊云平台采集转单机采集实现
  12. matlab 保存成csv,怎么将matlab中数据保存为csv或xls格式
  13. SEO入门:网站站内优化流程
  14. 京东评论爬虫(详解)
  15. model.evaluate中的verbose的作用
  16. 【调剂】北京语言大学 SAIT 智能语音习得技术实验室
  17. 传奇脚本显示服务器开区时间代码,GOM引擎活动页面脚本,传奇私服服务端添加开即时真假半兽人脚本...
  18. 电子计算机应用是啥,第二代电子计算机使用的电子元件是什么
  19. 附着流程(Attach)
  20. 5.4 Penalty-Based Local Search Algorithms基于惩罚的局部搜索算法

热门文章

  1. 全国计算机等级三级网络技术试卷详解(二)
  2. 如何监控工程项目进度?
  3. Unity + SteamVR + VIVE Pro进行动作捕捉
  4. [emWin]利用内存设备加速GIF图片显示——2021.03
  5. GRUB2配置文件grub.cfg详解
  6. Aurora 8B/10B光口通信
  7. 使用pyTorch搭建自己的facenet
  8. Vue2积分商城PC端项目(六)
  9. 2021年煤矿安全监测监控最新解析及煤矿安全监测监控考试试卷
  10. 自动驾驶笔记-轨迹跟踪之①纯跟踪算法(Pure Pursuit)