一、实验目的
通过设计、开发一个高级语言的词法分析程序,加深对课堂教学内容(包括正规文法、正规表达式、有限自动机、NFA到DFA的转换、DFA的最小化)的理解,提高词法分析方法的实践能力。
二、实验要求
(1)深入理解、掌握有限自动机及其应用;
(2)掌握根据语言的词法规则构造识别其单词的有限自动机的方法;
(3)掌握NFA到DFA的等价变换方法、DFA最小化的方法;
(4)掌握设计、编码、调试词法分析程序的技术与方法,具体实现S语言的词法分析程序。
2.1 待分析的简单的词法
(1)关键字:
begin if then while do end 所有的关键字都是小写。
(2)运算符和界符
: : = + - * /
<
<=
<>
>
>= = ; ( ) #
(3)其他单词是标识符(ID)和整型常数(SUM),通过以下正规式定义:
ID = letter (letter |
digit)*
NUM = digit
digit*
(4)空格有空白、制表符和换行符组成。空格一般用来分隔ID、SUM、运算符、界符和关键字,词法分析阶段通常被忽略。
2.2 各种单词符号对应的种别码
表2.1 各种单词符号对应的种别码
单词符号
种别码
单词符号
种别码
begin
1
:
17
if
2
:
=
18
then
3
<
20
while
4
<>
21
do
5
<=
22
end
6
>
23
letter
(letter | digit)*
10
>=
24
digit
digit*
11
=
25
+
13
;
26
-
14
(
27
*
15
)
28
/
16
#
0
2.3 词法分析程序的功能
输入:所给文法的源程序字符串。
输出:二元组(syn,token或sum)构成的序列。
其中:syn为单词种别码;
token为存放的单词自身字符串;
sum为整型常数。
例如:对源程序
begin x:=9: if x>9 then x:=2*x+1/3; end
#的源文件,经过词法分析后输出如下序列: