词法分析
一、实验目的
设计、编制并调试一个词法分析程序,加深对词法分析原理的理解。
二、实验要求
21待分析的简单的词法(1)关键字:
begi
ifthe
whiledoe
d所有的关键字都是小写。
(2)运算符和界符:(3)其他单词是标识符(ID)和整型常数(SUM),通过以下正规式定义:
IDletterletterdigit
NUMdigitdigit(4)空格有空白、制表符和换行符组成。空格一般用来分隔ID、SUM、运算符、界符和关键字,词法分析阶段通常被忽略。
22各种单词符号对应的种别码:表21各种单词符号对应的种别码
单词符号
种别码
单词符号
种别码
bgi
1
:
17
If
2
:
18
The
3
20
wile
4
21
do
5
22
e
d
6
23
lettet(letterdigit)
10
24
dightdight
11
25
13
;
26
14
27
15
28
16
0
23词法分析程序的功能:输入:所给文法的源程序字符串。
输出:二元组(sy
toke
或sum)构成的序列。其中:sy
为单词种别码;
toke
为存放的单词自身字符串;sum为整型常数。例如:对源程序begi
x9ifx9the
x2x13e
d的源文件,经过词法分析后输出如下序列:
1begi
10x18119262if……
三、词法分析程序的算法思想:
算法的基本任务是从字符串表示的源程序中识别出具有独立意义的单词符号,其基本思想
是根据扫描到单词符号的第一个字符的种类,拼出相应的单词符号。
31主程序示意图:
f主程序示意图如图31所示。其中初始包括以下两个方面:⑴关键字表的初值。关键字作为特殊标识符处理,把它们预先安排在一张表格中(称为关键字表),当扫描程
序识别出标识符时,查关键字表。如能查到匹配的单词,则该单词为关键字,否则为一般标识符。关键字表为一个字符串数组,其描述如下:
Charrwtab6“begi
”“if”“the
”“while”“do”“e
d”
置初值
调用扫描子程序
输出单词二元组
否输入串结束是结束
图31(2)程序中需要用到的主要变量为sy
toke
和sum32扫描子程序的算法思想:
首先设置3个变量:①toke
用来存放构成单词符号的字符串;②sum用来整型单词;③sy
用来存放单词符号的种别码。扫描子程序主要部分流程如图32所示。
变量初始化忽略空格
是是否文件结束?
是返回
f字母拼字符串
是否关键字?是
sy
为对应关键字的单词种别码
否
数字
拼数否
sy
10
运算符、界符等符号
其他符号
对不同符号给出相应的sy
值
报错
sy
1111
返回
图32
四、词法分析程序的C语言程序源代码:
i
cludestdiohi
cludestri
ghcr