- 1、本文档共37页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
《编译原理》实验指导书2016课案
编 译 原 理
实验与课程设计指导书
2016年10月
目录
一、课程简介 2
二、实验目的 2
三、实验环境 2
四、实验任务 2
五、实验项目 3
实验一. 词法分析 3
实验二. 自顶向下语法分析 8
实验三. 自底向上语法分析 10
实验四. 语义分析 11
实验五. 中间代码生成 12
六、课程设计 13
七、考核方式 13
八、参考文献 14
九、附录——PL0语言编译源程序清单(部分) 15
编译原理实验与课程设计指导
一、课程简介
课程名称:编译原理(Principle of Compiler)
课程总学时: 64 学时[理论: 48 学时;实验: 16 学时
课程总学分: 4 学分
二、实验目的
编译原理是计算机类专业特别是计算机软件专业的一门重要专业课。设置该课程的目的在于系统地向学生讲述编译系统的结构、工作流程及编译程序各组成部分的设计原理和实现技术,使学生通过学习既掌握编译理论和方法方面的基本知识,也具有设计、实现、分析和维护编译程序等方面的初步能力。编译原理是一门理论性和实践性都比较强的课程。进行上机实验的目的是使学生通过完成上机实验题目加深对课堂教学内容的理解。同时培养学生实际动手能力。
三、实验环境
微机CPU P4以上,256M以上内存,安装好C语言,或C++,或Visual C++开发环境。
四、实验任务
用C/C++/Visual C++语言编写某语言的词法分析程序、语法分析程序、语义分析程序、中间代码生成程序。
五、实验项目
实验一. 词法分析
实验目的
根据PL/0语言的文法规范,编写PL/0语言的词法分析程序。
通过设计调试词法分析程序,实现从源程序中分出各种单词的方法;加深对课堂教学的理解;提高词法分析方法的实践能力。
掌握从源程序文件中读取有效字符的方法和产生源程序的内部表示文件的法。
掌握词法分析的实现方法。
上机调试编出的词法分析程序。
实验准备
微机CPU P4以上,256M以上内存,安装好C语言,或C++,或Visual C++.
实验时间
4学时
实验内容
试用手工编码方式构造识别以下给定单词的某一语言的词法分析程序。
语言中具有的单词包括五个有代表性的关键字begin、end、if、then、else;标识符;整型常数;六种关系运算符;一个赋值符和四个算术运算符。参考实现方法简述如下。
单词的分类:构造上述语言中的各类单词符号及其分类码表。
表 语言中的各类单词符号及其分类码表
:= 14 IS + 15 PL - 16 MI * 17 MU / 18 DI
实验方法与处理过程
在一个程序设计语言中,一般都含有若干类单词符号,为此可首先为每类单词建立一张状态转换图,然后将这些状态转换图合并成一张统一的状态图,即得到了一个有限自动机,再进行必要的确定化和状态数最小化处理,最后据此构造词法分析程序。在此为了使词法分析程序结构比较清晰,且尽量避免某些枝节问题的纠缠,假定要编译的语言中,全部关键字都是保留字,程序员不得将它们作为源程序中的标识符;在源程序的输入文本中,关键字、标识符、整常数之间,若未出现关系运算符,则至少须用一个空白字符加以分隔。作了限制,就可以把关键字和标识符的识别统一进行处理。即每当开始识别一个单词时,若扫视到的第一个字符为字母,则把后续输入的字母或数字字符依次进行拼接,直至扫视到非字母、数字字符为止,以期获得一个尽可能长的字母数字字符串,然后以此字符串查所谓保留字表此保留字表已事先造好,若查到此字符串,则取出相应的类别码;反之,则表明该字符串应为一标识符。)图及程序中所出现的语义变量及语义函数的含义和功能说明如下。函数GETCHAR每调用一次,就把扫描指示器当前所指示的源程序字符送入字符变量ch,然后把扫描指示器前推一个字符位置。字符数组TOKEN用来依次存放一个单词词文中的各个字符。函数CAT每调用一次,就把当前ch中的字符拼接于TOKEN中所存字符串的右边。函数LOOKUP每调用一次,就以TOKEN中的字符串查保留字表,若查到,就将相应关键字的类别码赋给整型变量c;否则将c置为零。函数RETRACT每调用一次,就把扫描指示器回退一个字符位置即退回多读的那个字符。函数OUT一般仅在进入终态时调用此函数,调用的形式为OUT(c,VAL)。其中,实参c为相应单词的类别码或其助记符;当所识别的单词为标识符和整数时,实参VAL为TOKEN即词文分别为字母数字串和数字串,对于其余种类的单词,VAL均为空串。函数OUT的功能是,在送出一个单词的内部表示之后,返回到调用该词法分析程序的那个程序。程序根据图编写的扫描器
# include stdio.h# include ctype.h
# include string.h
# de
文档评论(0)