欢迎来到天天文库
浏览记录
ID:45609423
大小:286.96 KB
页数:13页
时间:2019-11-15
《编译原理试验指导》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、编译原理实验指导高丽淮阴工学院计算机工程系内容简介编译原理是计算机专业屮的一门专业必修课程,在理论上它要求学生掌握有关形式语言和自动机的抽象概念,在技术上要求学生能够熟练地利用各种数据结构进行编程,很具有挑战性。我们希望学生在学习完本课之厉,能够对形式语言和具内部结构有一个较深刻的认识。本卩包含三个实验:词法分析器,递归下降分析、语义与代码牛成。这三个实验构成了编译器的主要组成部分,全部在VC卄6.0环境下完成。目录实验一词法分析实验1实验二递归下降分析4实验三语义及代码生成8实验一词法分析实验1、实验目的加深对词法分析器的工作
2、过程的理解;加强对词法分析方法的掌握;能够采用一种编程语言实现简单的词法分析程序;能够使用自己编写的分析程序对简单的程序段进行词法分析。2、实验内容对源程序进行词法分析:要求识别出关键字、标识符、数字和符号,并以(单词类别,单词值)二元组的形式显示。女Uinta;经过词法分析程序后得到的二元组为:intintIDa••以下为词法分析程序的测试数据main(){inta,b;a=10;b=a+20;}请对以上代码利用词法分析程序分析并得到相应的二元组。3、实验分析在本次实验中是对一个简化的c语言程序进行分析,它的单词符号有:•标识
3、符:字母打头,后接字母数字,识别出的标识符用ID标记。•保留字(它是标识符的子集):if,else,for,while,do,int,write,read,识别出的保留字直接用该保留字标记。•无符号整数:由数字组成,用NUM标记。•分界符:+、・、*、/、(、)、;、,>、<、{、}、!等单分界符,直接用单分界符标记。>=、<=、!=、=二等双字符分界符,直接用双分界符标记。•注释符:用/*・・・产/括起为了从源程序字符流中正确识别出各类单词符号,相邻的标识符、整数或保留字之间至少要用一个空格分开。此语言的各类单词符号的止则文法
4、规则如F:**=IIDIID::=l::=albl-lzlAIBI・・・IZ::=1121-1910::=+l-l*l/l=l(l)l{l}l:I,I;ll!::=〉=1V=1!=l==::=/*::=*/图1单词符号的状态图根据状态图,分析相应动作就可以构造出词法
5、分析程序的算法流程图,如下图所示,在程序开始时,首先读入一个字符,若为空字符,则继续读,百到读进一个非空字符,读进的字符有如下6种情况,要进行不同的处理。(1)字母。继续读,直到遇见空格、分界符、文件尾或非字母数字字符。组合标记符,查保貂字表。若为保留字,输出相应单词记号;若不是,输出标记符的单词记号及单词值(标识符)。(2)数字。继续读,直到遇见空格、或非数字字符出现或文件尾。输出无符号整数的单词记号及数字串。(3)二、V、>、!。读入下一个字符,判断是否为双字符分界符,若是,组成双字符分界符,输出相应单词记号及双分界符;若不
6、是,输出单分界符记号。(4)非二、V、>、/等与双分界符首字符不同的单分界字符。输出和应单词记号及单分界符。(5)/。读入下一个字符。若不是“*”,输出/的单词记号;若是“*”,进行注释处理。词法分析不输出“/*”,并耍跳过整个注释内容直到遇到“*/”为止,然后返回开始状态,继续识别下一个单词符号。(6)非法字符。如果读进的字符不属于上而任意情况,则说明词法分析程序从源程序读入了一个不合法的字符,即该字符不属于程序语言所定义的所冇单词符号首字符集合。词法分析程序在遇到不合法字符时要进行错误处理,报告错误信息,跳过这个字符,然后转
7、入开始状态,继续识别下一个单词符号。图2词法分析程序流稈图4、实验步骤(1)启动VisualC++系统,新建一个工程;(2)新建一个源程序文件;(3)编译,调试该程序;(4)运行该程序,输入测试数据,观察输出数据;(5)分析实验结呆。实验二递归下降分析1、实验目的详细了解递归子程序方法对源程序的具体分析处理2、实验内容类C语言的语法规则如下:1)::={}2)::=8、tionstat>l3)::=intID;4)::=vsta(ement_list>vstatement>lvstatement>5)::=
8、tionstat>l3)::=intID;4)::=vsta(ement_list>vstatement>lvstatement>5)::=
此文档下载收益归作者所有