《编译原理》实验指导书.docx

上传人:b****8 文档编号:11404431 上传时间:2023-02-28 格式:DOCX 页数:13 大小:134.63KB
下载 相关 举报
《编译原理》实验指导书.docx_第1页
第1页 / 共13页
《编译原理》实验指导书.docx_第2页
第2页 / 共13页
《编译原理》实验指导书.docx_第3页
第3页 / 共13页
《编译原理》实验指导书.docx_第4页
第4页 / 共13页
《编译原理》实验指导书.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

《编译原理》实验指导书.docx

《《编译原理》实验指导书.docx》由会员分享,可在线阅读,更多相关《《编译原理》实验指导书.docx(13页珍藏版)》请在冰豆网上搜索。

《编译原理》实验指导书.docx

《编译原理》实验指导书

《编译原理》实验指导书

课程编码:

141402课程类别:

学科专业课

适用专业:

计算机科学与技术专业主要教学内容:

词法分析与语法分析

课程总学时:

64实验学时:

8

【实验目标要求】

《编译原理》课程是计算机专业的核心课程,是培养计算机技术高级人才的必修课程。

该课程通过程序设计语言和语言处理软件的理论与技术的教学,培养学生利用计算机语言处理技术进行系统分析和软件设计的能力。

<<编译原理>>是理论与实践并重的课程,这门实验课要综合运用一、二、三年级所学的多门课程的内容。

实验目标与要求;

1.学会用高级程序设计语言设计词法分析器。

2.学会用高级程序设计语言设计语法分析器。

【实验学习要求】

认真阅读《编译原理》教材中的与实验相关的章节内容,做到在每个实验前明确实验目的、掌握实验的内容,提前完成数据结构定义和算法设计;在实验中正确使用实验设备,认真设计与调试程序并分析实验结果;实验后要根据要求做好总结,上交实验报告。

【实验环境】

Windows操作系统,编程语言是C、C++集成调试环境采用TC或MicrosoftVisualStudio6。

【实验计划】

 

实验项目

名称

实验内容

学时

要求

性质

类别

所用主要仪

器及台套数

所在实验室

1

用C或者C++语言设计一个词法分析器

1.   确定编译中使用的表格、词法分析器的输出形式、标识符与关键字的区分方法。

2.    把词法分析器设计成一个独立的过程。

4

必做

设计

综合型

微机,每人一台。

计算机学院实验中心

2

用C或者C++语言设计一个语法分析器。

1. 词法分析和语法分析在一起实现。

2.把语法分析器设计成一个独的过程。

4

必做

设计

综合型

微机,每人一台。

计算机学院实验中心

【考核办法】

在机器上交作业,由实习教师给出优、良、中、及格、不及格。

 

【实验教材及主要参考资料】

 教材:

《编译原理》,蒋立源等编著,西北工业大学出版社。

  参考资料:

《编译原理实验》由清华大学编写。

 

实验一、词法分析器的设计

1.实验目的:

1.掌握词法分析的原理;

2.熟悉符号表的建立与单词的分类方法;

3.掌握词法分析器的设计与调试;

2.实验内容:

1.分析如表1所定义的PASCAL语言子集的语法,找出所有单词的组成及类别;

2.完成单词的分类及其编码;

3.完成保留字表、变量名表和常数表的结构设计;

4.建立识别单词符号集合的DFA;

5.由DFA设计词法分析程序;

6.调试并运行词法分析程序;

表1.PASCAL语言子集的语法定义

〈程序〉→〈变量说明〉BEGIN〈语句表〉END.

〈变量说明〉→VAR〈变量表〉:

〈类型〉;|〈空〉

〈变量表〉→〈变量表〉,〈变量〉|〈变量〉

〈类型〉→INTEGER

〈语句表〉→〈语句表〉;〈语句〉|〈语句〉

〈语句〉→〈赋值语句〉|〈条件语句〉|〈WHILE语句〉|〈复合语句〉|〈过程定义〉

〈赋值语句〉→〈变量〉∶=〈算术表达式〉

〈条件语句〉→IF〈关系表达式〉THEN〈语句〉ELSE〈语句〉

〈WHILE语句〉→WHILE〈关系表达式〉DO〈语句〉

〈复合语句〉→BEGIN〈语句表〉END

〈过程定义〉→PROCEDURE〈标识符〉〈参数表〉;BEGIN〈语句表〉END

〈参数表〉→(〈标识符表〉)|〈空〉

〈标识符表〉→〈标识符表〉,〈标识符〉|〈标识符〉

〈算术表达式〉→〈算术表达式〉+〈项〉|〈项〉

〈项〉→〈项〉*〈初等量〉|〈初等量〉

〈初等量〉→(〈算术表达式〉)|〈变量〉|〈无符号数〉

〈关系表达式〉→〈算术表达式〉〈关系符〉〈算术表达式〉

〈变量〉→〈标识符〉

〈标识符〉→〈标识符〉〈字母〉|〈标识符〉〈数学〉|〈字母〉

〈无符号数〉→〈无符号数〉〈数字〉|〈数字〉

〈关系符〉→=|<|<=|>|>=|<>

〈字母〉→A|B|C|…|X|Y|Z

〈数字〉→0|1|2|…|8|9

〈空〉→

提示:

(1)单词的分类。

可将所有标识符归为一类;将常数归为另一类;保留字和分隔符则可采取一词一类。

(2)符号表的建立。

可事先建立一保留字表,以备在识别保留字时进行查询。

变量名表及常数表则在词法分析过程中建立。

(3)单词串的输出形式。

所输出的每一单词,均按形如(CLASS,VALUE)的二元式编码。

对于变量标识符和常数,CLASS字段为相应的类别码,VALUE字段则是该标识符、常数在其符号表中登记项的序号(要求在变量名表登记项中存放该标识符的字符串,其最大长度为四个字符;常数表登记项中则存放该整数的二进制形式)。

对于保留字和分隔号,由于采用一词一类的编码方式,所以仅需在二元式的CLASS字段上放置相应的单词的类别码,VALUE字段则为“空”。

不过,为便于查看由词法分析程序所输出的单词串,也可以在CLASS字段上直接放置单词符号串本身。

3.测试用输入

测试用输入程序为。

Procedureprogram1(a,b);

Begin

Varxyz=50;

Whilea>bdo

begin

Ifxyz=0then

xyz=50;

xyz:

=xyz-a;

a:

=a-1;

end

End

4.实验扩充:

构造语言的词法分析程序,要求识别出变量类型并记录相关信息。

5.实验说明:

实验环境:

WINDOWS下,工具为TurboC2.0或VisualC6.0。

6.实验考核方式:

1.提交实验报告

2.演示程序和答辩(抽查)

7.实验辅导

(1)词法分析程序的功能

词法分析程序又称为扫描器,其功能在于依次扫视字符串形式源程序中的各个字符,逐个识别出其中的单词,并将其转换为内部编码形式的单词符号串作确为输出。

通常,可采用二元式

(class,value)

来表示一个单词符号的内部编码,其中:

class为一整数码,用于表示该单词的类别;value则是该单词之值(如变量名在符号表中序号,常数的二进制表示,以及运算符和分隔符的编码等等)。

概括地说,扫描器在其工作过程中,一般应完成下列的任务:

(1)识别出源程序中的各个单词符号,并将其转换为内部编码形式;

(2)删除无用的空白字符、回车字符以及其它非实质性字符;

(3)删除注释;

(4)进行词法检查,报告所发现的错误。

此外,视编译工作流程的组织,一些编译程序在进行词法分析时,还要完成将所识别出的标识符登录到符号表的工作。

(2)实例分析

对于表2所列的各类单词符号,词法分析程序可按图1所示的状态转换图来构造。

表2一个语言的单词符号及分类码表

图1识别表2所列语言单词的DFA及相关的语义过程

相关变量和子程序说明如下:

◆函数GETCHAR每调用一次,就把扫描指示器当前所指示的源程序字符送入字符变量ch,然后把扫描指示器前推一个字符位置。

◆字符数组TOKEN用来依次存放一个单词词文中的各个字符。

◆函数CAT每调用一次,就把当前ch中的字符拼接于TOKEN中所存字符串的右边。

◆函数LOOKUP每调用一次,就以TOKEN中的字符串查保留字表,若查到,就将相应关键字的类别码赋给整型变量c;否则将c置为零。

◆函数RETRACT每调用一次,就把扫描指示器回退一个字符位置(即退回多读的那个字符)。

◆函数OUT一般仅在进入终态时调用此函数,调用的形式为OUT(c,VAL)。

其中,实参c为相应单词的类别码或其助记符;当所识别的单词为标识符和整数时,实参VAL为TOKEN(即词文分别为字母数字串和数字串),对于其余种类的单词,VAL均为空串。

函数OUT的功能是,在送出一个单词的内部表示之后,返回到调用该词法分析程序的那个程序。

 

实验二、语法分析器的设计

1.实验目的:

1.掌握利用预测分析法进行语法分析的原理;

2.熟悉文法的机内表示;

3.掌握语法分析器的设计与调试;

2.实验内容:

1.分析如下表3所定义PASCAL语言子集的语法,改写文法使其成为LL

(1)文法;

2.构造文法的预测分析表;

3.设计堆栈和预测分析表的机内表示;

4.设计并书写语法分析程序;

5.调试并运行语法分析程序;

表3.PASCAL语言子集的语法定义

〈程序〉→PROGRAM〈标识符〉;〈分程序〉

〈分程序〉→〈变量说明〉BEGIN〈语句表〉END

〈变量说明〉→VAR〈变量说明表〉;

〈变量说明表〉→〈变量表〉:

〈类型〉|〈变量表〉:

〈类型〉;〈变量说明表〉

〈类型〉→INTEGER|REAL

〈变量表〉→〈变量〉|〈变量〉,〈变量表〉

〈语句表〉→〈语句〉|〈语句〉;〈语句表〉

〈语句〉→〈赋值语句〉|〈条件语句〉|〈WHILE语句〉|〈复合语句〉

〈赋值语句〉→〈变量〉∶=〈算术表达式〉

〈条件语句〉→IF〈关系表达式〉THEN〈语句〉ELSE〈语句〉

〈WHILE语句〉→WHILE〈关系表达式〉DO〈语句〉

〈复合语句〉→BEGIN〈语句表〉END

〈算术表达式〉→〈项〉|〈算术表达式〉+〈项〉|〈算术表达式〉-〈项〉

〈项〉→〈因式〉|〈项〉*〈因式〉|〈项〉/〈因式〉

〈因式〉→〈变量〉|〈常数〉|(〈算术表达式〉)

〈关系表达式〉→〈算术表达式〉〈关系符〉〈算术表达式〉

〈变量〉→〈标识符〉

〈标识符〉→〈标识符〉〈字母〉|〈标识符〉〈数字〉|〈字母〉

〈常数〉→〈整数〉|〈浮点数〉

〈整数〉→〈数字〉|〈数字〉〈整数〉

〈浮点数〉→·〈整数〉|〈整数〉·〈整数〉

〈关系符〉→<|<=|=|>|>=|<>

〈字母〉→A|B|C|…|X|Y|Z

〈数字〉→0|1|2|…|9

提示:

对于所选定的分析方法,如有需要,应选择一种合适的数据结构,以构造所给文法的机内表示。

3.实验说明:

实验环境:

WINDOWS下,工具为TurboC2.0或VisualC6.0。

4.实验考核方式:

(1)提交实验报告

(2)演示程序和答辩(抽查)

5.实验辅导

(1)文法的机内表示形式

举例说明文法的的机内表示。

对于如下文法,其计算机内部的表示可采用如图2所示的数据结构。

椭圆表示指针变量,矩形表示结构体类型变量。

E->EAT|T

T->TMF|F

F->(E)|I

A->+|-

M->*|/

 

图2.文法的机内表示形式

(2)预测分析器的工作流程

分析器对每个输入串的分析在控制程序的控制下进行,其大致步骤如下:

第一步初始化。

分析开始时,首先将栈底符号#及文法的开始符号S推入分析栈,并对各指示器置初值。

然后反复执行第二步所列的操作。

第二步设在分析的某一时刻,可视分析栈顶的文法符号Xm的不同情况,分别作如下的处理:

◆若Xm∈VT∪{#},且Xm=ai,则表明栈顶符号已与当前正扫视的输入符号(请注意,包括句尾标志符号#在内)相匹配,此时应将Xm从栈中退出,并将输入串指示器向前推进一个位置,否则(即Xm≠ai)进行语法错误处理;

◆若Xm∈VN,则以符号对(Xm,ai)查分析表,设表元素A[Xm,ai]为产生式Xm→Y1Y2…Yk,则将Xm从栈中退出,并将Y1Y2…Yk按反序推入栈中(即用该产生式推导一步)。

但若A[Xm,ai]为“出错”,则进行语法错误处理;

◆若Xm=ai=#(即分析栈将被拆空),则表明输入串已完全得到匹配,此时可宣告分析成功而结束工作。

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 电力水利

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1