词法分析器实验报告.doc
文本预览下载声明
PAGE
PAGE 1
杭州电子科技大学 班级专业:计算机科学与技术
实 验 报 告
【实验名称】 实验一词法分析实验
一、实验目的
设计、编制并调试一个词法分析程序,加深对词法分析原理的理解。
二、实验内容
2.1 待分析的简单词法
(1)关键字:所有的关键字都是小写
begin if then while do end
(2)运算符和界符
:= + - * / = = = ; ( ) $
(3)其他单词是标识符(ID)和整型常数(NUM),通过以下正规式定义:
ID = letter (letter | digit)*
NUM = digit digit*
(4)空格有空白、制表符和换行符组成。空格一般用来分隔ID、NUM、运算符、界符和关键字,词法分析阶段通常被忽略。
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
$
0
/
16
2.3 词法分析程序的功能:
输入:所给文法的源程序字符串。
输出:二元组(编码,值)构成的序列。
其中:syn为单词种别码;
token为存放的单词自身字符串;
num为整型常数。
例如:对源程序begin x:=9; if x9 then x:=2*x+1/3; end $的源文件,经过词法分析后输出如下序列:
(1,begin) (10,x) (17,:=) (11,9) (25,;) (2,if)……
三、算法思想框图
算法的基本任务是从字符串表示的源程序中识别出具有独立意义的单词符号,其基本思想是根据扫描到单词符号的第一个字符的种类,拼出相应的单词符号。在这里用”#”代替”$”。
实验要求
写出程序框图、自动机。
2.写出程序源代码,并调试通过,输出实验结果。
3.完成实验报告及总结。
五、个人心得
通过该实验,主要有以下几方面收获:
对实验原理有更深的理解。
二、 对词法分析在实践中的应用有深刻的理解。在实践的基础上,把所学过的知识应用于实际应用,更深刻的理解了词法分析以及编译原理的实际应用。
三、 通过本次编译原理课程设计,激发了我学习的积极性,培养了我独立发现问题、分析问题,解决问题的能力。更增强我与同学交流沟通和共同解决问题合作的能力。
四、验收时有少许错误,问题在于最后输出结果是时候,是输入相同大小的字符数组,导致出现空格。
六、代码与运行结果
(1)源代码
#includestdio.h
#includestring.h
#includeiostream.h
char prog[80],token[8];
char ch;
int syn,p,i,n,row,num=0;
char *s[6]={begin,if,then,while,do,end};
void scaner()
{
for(n=0;n8;n++)
token[n]= ;
ch=prog[p++];
while(ch== )
{
ch=prog[p];
p++;
}
//判断是标示符或者变量名
if((ch=ach=z)||(ch=Ach=Z)) //可能是标示符或者变量名
{
i=0;
while((ch=0ch=9)||(ch=ach=z)||(ch=Ach=Z))
{
token[i++]=ch;
ch=prog[p++];
}
token[i++]=\0;
p--;
syn=10;
for(n=0;n6;n++) //将识别出来的字符和已定义的标示符作比较,
if(strcmp(token,s[n])==0)
{
syn=n+1;
break;
}
}
//数字
else if((ch=0ch=9))
{
{
显示全部