编译原理实验指导书(2015)
- 格式:doc
- 大小:580.50 KB
- 文档页数:23
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的功能是,在送出一个单词的内部表示之后,返回到调用该词法分析程序的那个程序。