编译原理实验指导书(2015)

  • 格式:doc
  • 大小:580.50 KB
  • 文档页数:23

下载文档原格式

  / 23
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

LIAOCHENG UNIVERSITY

编译原理实验指导书

聊城大学计算机学院

2011年3月

目录

《编译原理》课程实验教学大纲 (1)

实验一词法分析器的设计 (3)

基本信息 (3)

实验目的 (3)

实验内容 (3)

实验扩充 (5)

5

5

5

10

10

10

10

10

10

11

19

19

《编译原理》课程实验教学大纲

课程名称:编译原理

英文名称:Compile principles

设置形式:非独立设课课程模块:专业方向课实验课性质:专业实验课程编号:509615

课程负责人:姜华大纲主撰人:姜华

大纲审核人:左风朝

一、学时、学分

课程总学时:72实验学时:8课程学分:4二、适用专业及年级

六、考核方式及成绩评定

根据学生实验出勤情况、实验态度、实验报告成绩等方面评定实验成绩。实验报告平均成绩(含实验理论)占实验成绩的50%,实验技能平均成绩(含实验态度)占实验成绩的50%。实验成绩占该课程考试总成绩的10%—20%。在机器上将程序及运行结果上传至服务器,由实习教师给出优、良、中、及格、不及格。

七、实验教科书、参考书

1.实验教科书

自编实验指导书。

2.实验参考书

实验一词法分析器的设计

基本信息

实验课程:编译原理设课形式:非独立

课程学分:4 实验项目:词法分析器的设计

项目类型:设计项目学时:4

实验目的

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

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

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

实验内容

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

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

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

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

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

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

7. 实验结果分析。分析结果含义并写出自己的心得体会。

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

提示:

(1) 单词的分类。

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

(2) 符号表的建立。

可事先建立一保留字表,以备在识别保留字时进行查询。变量名表及常数表则在词法分析过程中建立。

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

所输出的每一单词,均按形如(CLASS,V ALUE)的二元式编码。对于变量标识符和常数,CLASS字段为相应的类别码,V ALUE字段则是该标识符、常数在其符号表中登记项的序号(要求在变量名表登记项中存放该标识符的字符串,其最大长度为四个字符;常数表登记项中则存放该整数的二进制形式)。对于保留字和分隔号,由于采用一词一类的编码方式,所以仅需在二元式的CLASS字段上放置相应的单词的类别码,V ALUE字段则为“空”。不过,为便于查看由词法分析程序所输出的单词串,也可以在CLASS字段上直接放置单词符号串本身。

测试用输入:

测试用输入程序为。

Procedure program1(a, b);

Begin

Var xyz=50;

While a>b do

begin

If xyz=0 then

xyz=50;

xyz:=xyz-a;

a:=a-1;

end

End

实验扩充

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

实验说明

实验环境:WINDOWS下,工具为Turbo C2.0或Visual C 6.0。

实验考核方式

1.提交实验报告

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

实验辅导

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的功能是,在送出一个单词的内部表示之后,返回到调用该词法分析程序的那个程序。