- 1、本文档共10页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
编译原理实验指导编译原理实验指导高丽淮阴工学院计算机工程系1.doc
编译原理实验指导
高丽
淮阴工学院计算机工程系
内容简介
编译原理是计算机专业中的一门专业必修课程,在理论上它要求学生掌握有关形式语言和自动机的抽象概念,在技术上要求学生能够熟练地利用各种数据结构进行编程,很具有挑战性。我们希望学生在学习完本课之后,能够对形式语言和其内部结构有一个较深刻的认识。
本书包含三个实验:词法分析器,递归下降分析、语义与代码生成。这三个实验构成了编译器的主要组成部分,全部在VC++6.0环境下完成。
目 录
实验一 词法分析实验 1
实验二 递归下降分析 4
实验一 词法分析实验
1、实验目的
加深对词法分析器的工作过程的理解;加强对词法分析方法的掌握;能够采用一种编程语言实现简单的词法分析程序;能够使用自己编写的分析程序对简单的程序段进行词法分析。
2、实验内容
对源程序进行词法分析:要求识别出关键字、标识符、数字和符号,并以(单词类别,单词值)二元组的形式显示。如int a;经过词法分析程序后得到的二元组为:
int int
ID a
; ;
以下为词法分析程序的测试数据
main()
{
int a,b;
a = 10;
b = a + 20;
}
请对以上代码利用词法分析程序分析并得到相应的二元组。
3、实验分析
在本次实验中是对一个简化的c语言程序进行分析,它的单词符号有:
● 标识符:字母打头,后接字母数字,识别出的标识符用ID标记。
● 保留字(它是标识符的子集): if,else,for,while,do,int,write,read,识别出的保留字直接用该保
留字标记。
● 无符号整数:由数字组成,用NUM标记。
● 分界符:+、-、*、/、(、)、;、,、、{、}、!等单分界符,直接用单分界符标记。=、=、!=、==等双字符分界符,直接用双分界符标记。
● 注释符:用/*….*/括起
为了从源程序字符流中正确识别出各类单词符号,相邻的标识符、整数或保留字之间至少要用一个空格分开。
此语言的各类单词符号的正则文法规则如下:
identifier∷=letter|IDletter|IDdigit
number∷=digit|number digit
letter∷= a|b|…|z|A|B|…|Z
digit∷=1|2|…|9|0
singleword∷=+|-|*|/|=|(|)|{|}|:|,|;|<|>|!
doubleword∷=>=|<=|!=|==
commend_first∷=/*
commend_last∷=*/
图1 单词符号的状态图
根据状态图,分析相应动作就可以构造出词法分析程序的算法流程图,如下图所示,在程序开始时,首先读入一个字符,若为空字符,则继续读,直到读进一个非空字符,读进的字符有如下6种情况,要进行不同的处理。
(1) 字母。继续读,直到遇见空格、分界符、文件尾或非字母数字字符。组合标记符,查保留字表。若为保留字,输出相应单词记号;若不是,输出标记符的单词记号及单词值(标识符)。
(2) 数字。继续读,直到遇见空格、或非数字字符出现或文件尾。输出无符号整数的单词记号及数字串。
(3) =、、、!。读入下一个字符,判断是否为双字符分界符,若是,组成双字符分界符,输出相应单词记号及双分界符;若不是,输出单分界符记号。
(4) 非=、、、/等与双分界符首字符不同的单分界字符。输出相应单词记号及单分界符。
(5) /。读入下一个字符。若不是“*”,输出/的单词记号;若是“*”,进行注释处理。词法分析不输出“/*”,并要跳过整个注释内容直到遇到“*/”为止,然后返回开始状态,继续识别下一个单词符号。
(6) 非法字符。如果读进的字符不属于上面任意情况,则说明词法分析程序从源程序读入了一个不合法的字符,即该字符不属于程序语言所定义的所有单词符号首字符集合。词法分析程序在遇到不合法字符时要进行错误处理,报告错误信息,跳过这个字符,然后转入开始状态,继续识别下一个单词符号。
图2 词法分析程序流程图
4、实验步骤
(1)启动Visual C++系统,新建一个工程;
(2)新建一个源程序文件;
(3)编译,调试该程序;
(4)运行该程序,输入测试数据,观察输出数据;
(5)分析实验结果。
实验二 递归下降分析
1、实验目的
详细了解递归子程序方法对源程序的具体分析处理
2、实验内容
类C语言的语法规则如下:
1)program::={declaration_liststatement_list}
2)declaration_list::=declaration_listdeclaration_stat|declaration_stat
3)declaration_stat:
文档评论(0)