编译原理实验一Word格式文档下载.docx

上传人:b****2 文档编号:14207623 上传时间:2022-10-20 格式:DOCX 页数:30 大小:139.33KB
下载 相关 举报
编译原理实验一Word格式文档下载.docx_第1页
第1页 / 共30页
编译原理实验一Word格式文档下载.docx_第2页
第2页 / 共30页
编译原理实验一Word格式文档下载.docx_第3页
第3页 / 共30页
编译原理实验一Word格式文档下载.docx_第4页
第4页 / 共30页
编译原理实验一Word格式文档下载.docx_第5页
第5页 / 共30页
点击查看更多>>
下载资源
资源描述

编译原理实验一Word格式文档下载.docx

《编译原理实验一Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《编译原理实验一Word格式文档下载.docx(30页珍藏版)》请在冰豆网上搜索。

编译原理实验一Word格式文档下载.docx

2、以层次图模块的组成及调用关系

 

3、主要函数的设计要求(功能、参数、返回值):

isKey:

判断ch中的字符是否为关键字;

isLer和isNum:

布尔函数过程,分别判断ch中的字符是否为字母和数字;

isBoudany():

布尔函数过程,分别判断ch组成的字符否为边界符号;

check:

词法分析;

clock:

时间函数,计算程序运行所需的时间

main:

主函数。

4、状态转换图:

字母或数字

字母非字母或数字

数字数字

非数字

字符a

字符b

‘=’

字符c

字符a包括:

=,&

|,+,--

字符b包括:

--,<

>

|,*

字符c包括:

,:

(,),{,},[,],!

#,%,”,/,*,+,--,>

<

.

#include<

stdio.h>

#include<

string.h>

stdlib.h>

time.h>

ctype.h>

FILE*fr,*fw,*temp1,*temp2;

char*key0[]={"

main"

"

printf"

scanf"

else"

if"

auto"

double"

"

int"

struct"

break"

long"

switch"

case"

enum"

register"

typedef"

char"

extern"

return"

union"

const"

float"

short"

unsigned"

continue"

for"

signed"

void"

default"

goto"

sizeof"

volatile"

do"

while"

static"

};

/*关键字表*/

char*key1[]={"

\"

\\"

("

)"

["

]"

{"

}"

;

'

/*边界符表*/

intisLet(charc)//判断是否是字母

{

if(c>

='

a'

&

c<

z'

||c>

A'

c<

Z'

return1;

else

return0;

}

intisNum(charc)//判断是否是数字

if(c>

0'

9'

intisKey(char*word)

intm,i;

for(i=0;

i<

36;

i++)

if((m=strcmp(word,key0[i]))==0)

{

if(i==0)

return2;

else

}

return0;

intisBoudany(charc)

if(c=='

\\'

else

if(c=='

('

||c=='

)'

{'

}'

['

]'

'

\'

return1;

voidcheck(FILE*fr)

{

charword[30];

while(!

feof(fr))

memset(word,0,sizeof(word));

charch,temp;

ch=fgetc(fr);

//获取字符,指针fr并自动指向下一个字符

inti,c;

if(ch=='

#'

)//预处理

{

//temp=fgetc(fr);

while(ch!

>

ch=fgetc(fr);

ch=fgetc(fr);

fprintf(fw,"

*****************************************跳过头文件和文件宏定义\n"

);

}

else

if(ch=='

/'

)//跳过注释/**/类型

{

if(ch=='

)//跳过注释//类型

{

while(ch!

\n'

ch=fgetc(fr);

fprintf(fw,"

*********************************************************跳过注释\n"

}

else

if(ch=='

*'

{

temp=fgetc(fr);

do

{

ch=fgetc(fr);

temp=fgetc(fr);

}

while(ch!

||temp!

fprintf(fw,"

******************************************************跳过注释\n"

}

}

if(isLet(ch))

{

word[0]=ch;

ch=fgetc(fr);

i=1;

while(isNum(ch)||isLet(ch))//判断该字符是否是字母或数字

{

word[i]=ch;

i++;

word[i]='

\0'

//'

代表字符结束(空格)

fseek(fr,-1,1);

c=isKey(word);

//判断是否是关键字

if(c==0)//不是关键字

fprintf(temp1,"

%s"

word);

字符%s是:

标识符,种别编码为:

%d\n"

word,2);

else

if(ch!

)//判断是否是定义的字符

if(c==2)

fprintf(fw,"

***************************************************主函数,种别编码为:

word,0);

//主函数

else

关键字,种别编码为:

word,1);

//关键字

else

{

fprintf(fw,"

定义的字符常量,种别编码为:

%d\n\n"

word,32);

}

else//开始判断的字符不是字母

if(isNum(ch))

{//判断是否是数字

word[0]=ch;

i=1;

while(isNum(ch))

word[i]=ch;

i++;

word[i]='

fseek(fr,-1,1);

//回退

字符%s是:

常量,种别编码为:

word,3);

else

{

c=isBoudany(ch);

//开始判断的字符不是字母也不是数字

//边界符

if(c)

if(c==2)//判断是否是转义字符

word[0]=ch;

word[1]=ch;

word[2]='

转义字符,种别编码为:

word,4);

if(c==1)

{

字符%c是:

界符,种别编码为:

ch,5);

fprintf(temp2,"

%c"

ch);

}

switch(ch)

case'

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

当前位置:首页 > PPT模板 > 动物植物

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

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