实现C语言小子集程序的词法分析.docx

上传人:b****3 文档编号:4140435 上传时间:2022-11-28 格式:DOCX 页数:14 大小:166.39KB
下载 相关 举报
实现C语言小子集程序的词法分析.docx_第1页
第1页 / 共14页
实现C语言小子集程序的词法分析.docx_第2页
第2页 / 共14页
实现C语言小子集程序的词法分析.docx_第3页
第3页 / 共14页
实现C语言小子集程序的词法分析.docx_第4页
第4页 / 共14页
实现C语言小子集程序的词法分析.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

实现C语言小子集程序的词法分析.docx

《实现C语言小子集程序的词法分析.docx》由会员分享,可在线阅读,更多相关《实现C语言小子集程序的词法分析.docx(14页珍藏版)》请在冰豆网上搜索。

实现C语言小子集程序的词法分析.docx

实现C语言小子集程序的词法分析

 

航空航天大学

 

编译实验报告

实验名称:

实现C语言小子集程序的词法分析

 

院(系):

计算机学院

专业:

计算机科学与技术

班级:

学号:

姓名:

完成日期:

一.实验要求:

(1)功能:

实现C语言小子集程序的词法分析。

(2)输入:

C语言小子集的程序片段。

(3)输出:

单词序列。

二.单词的属性和表格

单词的属性主要分为五大部分:

1.关键字,是由程序语言定义的具有固有意义的标示符。

有时称为保留字或基

本字。

如:

void,int,float,char,if,else,while,do,return。

2.标识符,用来表示各种名字,如变量名,数组名等。

3.常量,常量的类型一般有整型,实型,布尔型,文字型等等。

4.运算符,如+,-,*,/,%等

5.界符,如逗号,分号,括号等等。

表1C语言小子集的定义表

种别码

符号

种别码

符号

种别码

符号

0

无定义

11

>=

22

}

1

标示符

12

==

23

;

2

整数

13

!

=

24

3

+

14

&&

25

void

4

-

15

||

26

int

5

*

16

=

27

float

6

/

17

28

char

7

%

18

29

if

8

<

19

[

30

else

9

<=

20

]

31

while

10

>

21

{

32

do

33

return

 

三.总控流程图

 

N

 

Y

 

主程序流程图

 

在主程序中,打开文件,调用函数,当文件中的读完后,结束程序。

 

关键码流程图

 

字母流程图

 

N

 

Y

 

数字流程图

 

N

 

Y

 

四.测试运行

1.屏幕输出

2.文件源代码如下

 

3.编码实现词法分析程序

 

5.程序源代码

#include

#include

#include

 

char*g[9]={"void","int","float","char","if","else","while","do","return"};

intnm[9]={25,26,27,28,29,30,31,32,33};

FILE*fP;

intikey(charstr[])

{

inti,m;

for(i=0;i<9;i++)

{

if(strcmp(str,g[i])==0)

{

m=nm[i];

returnm;

}

}

return0;

}

 

intword(charc)

{

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

return1;

else

return0;

}

 

intnum(charc)

{

if(c>='0'&&c<='9')

return1;

else

return0;

}

 

voidap()

{

intn;

charc;

inti=0;

charstr[100];

while((c=fgetc(fP))!

=EOF)

{

if(c==''||c=='\t')

continue;

elseif(c=='\n')

printf("\n");

elseif(num(c)==1)

{

while(num(c))

{

str[i]=c;

i++;

c=fgetc(fP);

}

str[i]='\0';

fseek(fP,-1,SEEK_CUR);

printf("<2,");

printf("%s",str);

printf(">,");

}

elseif(word(c))

{

i=0;

while(word(c)||num(c))

{

str[i]=c;

i++;

c=fgetc(fP);

}

str[i]='\0';

i=0;

fseek(fP,-1,SEEK_CUR);

n=ikey(str);

if(n!

=0)

{

printf("<");

printf("%d",n);

printf(",->,");

}

else

printf("<1,%s>,",str);

 

}

else

{

switch(c)

{

case'+':

printf("<3,->,");

break;

case'-':

printf("<4,->,");

break;

case'*':

printf("<5,->,");

break;

case'/':

printf("<6,->,");

break;

case'%':

printf("<7,->,");

break;

case'<':

printf("<8,->,");

break;

case'<=':

printf("<9,->,");

break;

case'>':

printf("<10,->,");

break;

case'>=':

printf("<11,->,");

break;

case'==':

printf("<12,->,");

break;

case'!

=':

printf("<13,->,");

break;

case'&&':

printf("<14,->,");

break;

case'||':

printf("<15,->,");

break;

case'=':

printf("<16,->,");

break;

case'(':

printf("<17,->,");

break;

case')':

printf("<18,->,");

break;

case'[':

printf("<19,->,");

break;

case']':

printf("<20,->,");

break;

case'{':

printf("<21,->,");

break;

case'}':

printf("<22,->,");

break;

case';':

printf("<23,->,");

break;

case',':

printf("<24,->,");

break;

}

}

}

}

 

intmain(intargc,charargv[])

{

 

fP=fopen("test1.txt","r");

ap();

return0;

}

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

当前位置:首页 > 小学教育 > 语文

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

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