词法分析报告.docx

上传人:b****8 文档编号:9443703 上传时间:2023-02-04 格式:DOCX 页数:13 大小:110.44KB
下载 相关 举报
词法分析报告.docx_第1页
第1页 / 共13页
词法分析报告.docx_第2页
第2页 / 共13页
词法分析报告.docx_第3页
第3页 / 共13页
词法分析报告.docx_第4页
第4页 / 共13页
词法分析报告.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

词法分析报告.docx

《词法分析报告.docx》由会员分享,可在线阅读,更多相关《词法分析报告.docx(13页珍藏版)》请在冰豆网上搜索。

词法分析报告.docx

词法分析报告

词法分析实验报告

班级:

学号:

姓名:

 

一、实验目的

设计、编制并调试一个词法分析程序,加深对词法分析原理的理解。

二、实验要求

2.1待分析的简单的词法

(1)关键字:

begin if then while do end

所有的关键字都是小写。

(2)运算符和界符

= + - * / < <= <> > >= = ;( ) #

(3)其他单词是标识符(ID)和整型常数(SUM),通过以下正规式定义:

ID=letter(letter|digit)*

NUM=digitdigit*

(4)空格有空白、制表符和换行符组成。

空格一般用来分隔ID、SUM、运算符、界符和关键字,词法分析阶段通常被忽略。

2.2各种单词符号对应的种别码:

表2.1各种单词符号对应的种别码

单词符号

种别码

单词符号

种别码

bgin

1

17

If

2

=

18

Then

3

<

20

wile

4

<>

21

do

5

<=

22

end

6

>

23

lettet(letter|digit)*

10

>=

24

dightdight*

11

=

25

+

13

26

14

27

*

15

28

/

16

#

0

 

 

 

 

2.3词法分析程序的功能:

输入:

所给文法的源程序字符串。

输出:

二元组(syn,token或sum)构成的序列。

其中:

syn为单词种别码;

token为存放的单词自身字符串;

sum为整型常数。

例如:

对源程序beginx:

=9:

ifx>9thenx:

=2*x+1/3;end#的源文件,经过词法分析后输出如下序列:

(1,begin)(10,x)(18,:

=)(11,9)(26,;)(2,if)……

三、词法分析程序的算法思想:

算法的基本任务是从字符串表示的源程序中识别出具有独立意义的单词符号,其基本思想是根据扫描到单词符号的第一个字符的种类,拼出相应的单词符号。

3.1主程序示意图:

主程序示意图如图3-1所示。

其中初始包括以下两个方面:

⑴关键字表的初值。

关键字作为特殊标识符处理,把它们预先安排在一张表格中(称为关键字表),当扫描程序识别出标识符时,查关键字表。

如能查到匹配的单词,则该单词为关键字,否则为一般标识符。

关键字表为一个字符串数组,其描述如下:

Char*rwtab[6]={“begin”,“if”,“then”,“while”,“do”,“end”,};

图3-1

(2)程序中需要用到的主要变量为syn,token和sum

3.2扫描子程序的算法思想:

首先设置3个变量:

①token用来存放构成单词符号的字符串;②sum用来整型单词;③syn用来存放单词符号的种别码。

扫描子程序主要部分流程如图3-2所示。

是            是

字母

数字                 其他

运算符、    符号

界符等符号

图3-2

四、词法分析程序的C语言程序源代码:

#include

#include

charprog[80],token[8],ch;

intsyn,p,m,n,sum;

char*rwtab[6]={"begin","if","then","while","do","end"};

scaner();

main()

{p=0;

printf("\npleaseinputastring(endwith'#'):

/n");

do{

scanf("%c",&ch);

prog[p++]=ch;

}while(ch!

='#');

p=0;

do{

scaner();

switch(syn)

{case11:

printf("(%-10d%5d)\n",sum,syn);

break;

case-1:

printf("youhaveinputawrongstring\n");

getch();

exit(0);

default:

printf("(%-10s%5d)\n",token,syn);

break;

}

}while(syn!

=0);

getch();

}

scaner()

{ sum=0;

for(m=0;m<8;m++)token[m++]=NULL;

ch=prog[p++];

m=0;

while((ch=='')||(ch=='\n'))ch=prog[p++];

if(((ch<='z')&&(ch>='a'))||((ch<='Z')&&(ch>='A')))

{while(((ch<='z')&&(ch>='a'))||((ch<='Z')&&(ch>='A'))||((ch>='0')&&(ch<='9')))

{token[m++]=ch;

ch=prog[p++];

}

p--;

syn=10;

for(n=0;n<6;n++)

if(strcmp(token,rwtab[n])==0)

{syn=n+1;

break;

}

}

elseif((ch>='0')&&(ch<='9'))

{while((ch>='0')&&(ch<='9'))

{sum=sum*10+ch-'0';

ch=prog[p++];

}

p--;

syn=11;

}

elseswitch(ch)

{case'<':

token[m++]=ch;

ch=prog[p++];

if(ch=='=')

{ syn=22;

token[m++]=ch;

}

else

{ syn=20;

p--;

}

break;

case'>':

token[m++]=ch;

ch=prog[p++];

if(ch=='=')

{syn=24;

token[m++]=ch;

}

else

{syn=23;

p--;

}

break;

case'+':

token[m++]=ch;

ch=prog[p++];

if(ch=='+')

{syn=17;

token[m++]=ch;

}

else

{syn=13;

p--;

}

break;

case'-':

token[m++]=ch;

ch=prog[p++];

if(ch=='-')

{syn=29;

token[m++]=ch;

}

else

{syn=14;

p--;

}

break;

case'!

':

ch=prog[p++];

if(ch=='=')

{syn=21;

token[m++]=ch;

}

else

{syn=31;

p--;

}

break;

case'=':

token[m++]=ch;

ch=prog[p++];

if(ch=='=')

{syn=25;

token[m++]=ch;

}

else

{syn=18;

p--;

}

break;

case'*':

syn=15;

token[m++]=ch;

break;

case'/':

syn=16;

token[m++]=ch;

break;

case'(':

syn=27;

token[m++]=ch;

break;

case')':

syn=28;

token[m++]=ch;

break;

case'{':

syn=5;

token[m++]=ch;

break;

case'}':

syn=6;

token[m++]=ch;

break;

case';':

syn=26;

token[m++]=ch;

break;

case'\"':

syn=30;

token[m++]=ch;

break;

case'#':

syn=0;

token[m++]=ch;

break;

case':

':

syn=17;

token[m++]=ch;

break;

default:

syn=-1;

break;

}

token[m++]='\0';

}

五、结果分析:

输入beginx:

=9:

ifx<0thenx:

=0-x+x*2=3/4;end#后经词法分析输出如下序列:

 如下图所示:

图5-1

六、总结:

词法分析的基本任务是从字符串表示的源程序中识别出具有独立意义的单词符号,其基本思想是根据扫描到单词符号的第一个字符的种类,拼出相应的单词符号。

通过本试验的完成,更加加深了对词法分析原理的理解。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1