- 4
- 0
- 约5.33千字
- 约 9页
- 2017-06-09 发布于北京
- 举报
“编译原理”实验说明书2012
PAGE
PAGE 9
《编译原理》
实验指导书
执笔人:王一宾
2012年2月
实验一 词法分析器的设计
一、实验目的和要求
加深对状态转换图的实现及词法分析器的理解。熟悉词法分析器设计的主要算法及实现过程。要求学生掌握词法分析器的设计过程,并实现词法分析。
二、实验基本内容
给出一个简单语言的词法规则,画出状态转换图,并依据状态转换图编制出词法分析程序,词法规则如下:
单词符号 种别码 内码
break 1
char 2
continue 3
do 4
double 5
else 6
extern 7
float 8
for 9
int 10
if 11
long 12
short 13
static 14
switch 15
void 16
while 17
< 30
<= 31
<> 32
> 33
>= 34
= 35
( 36
) 37
** 38
* 39
:= 40
+ 41
- 42
? 43
, 44
; 45
标识符 70
常数 80 二进制形式
三、问题描述及基本算法提示
状态转换图的实现
让每个结点对应一小段程序。 需引进一组全局变量和过程
(1)ch 字符变量,存放最新读进的源程序字符。
(2)strToken 字符数组,存放构成单词符号的字符串。
(3)GetChar 子程序过程,将下一输入字符读到ch中,搜索指示器前移一字符位置。
(4)GetBC 子程序过程,检查ch中字符是否为空白。若是,则调用GetChar直至ch中进入一个非空白字符。
(5)Concat 子程序过程,将ch中的字符连接到strToken之后。例如, 假定strToken 原来的值为“AB”,而ch中存放着’C’,经调用Concat后,strToken的值就变为”ABC”。
(6)IsLetter和IsDigit 布尔函数过程,它们分别判断ch中的字符是否为字母和数字。
(7)Reserve 整型函数过程,对strToken中的字符找保留字表,若它是一个保留字,则返回它的编码,否则返回0值。
(8)Retract 子程序过程,将搜索指示器回调一个字符位置,将ch置为空白字符。
(9)DTB 把strToken中数字串译成标准二进制码,并作为函数值返回(十进制转换为二进制)
(10)Ainput 输入源程序(键盘直接输入或以文件形式输入)
2.词法分析器构造基本算法
int code,value;
strToken:=“”; 置strToken为空串*/
GetChar();GetBC();
if (IsLetter())
begin
while (IsLetter() or IsDigit())
begin
Concat();GetChar();
end
Retract();
code : = Reserve();
if(code = 0)
begin
value : = InsertId(strToken);
return($ID,value);
en
原创力文档

文档评论(0)