编译原理词法分析实验报告Word格式文档下载.docx

上传人:b****5 文档编号:20724285 上传时间:2023-01-25 格式:DOCX 页数:16 大小:17.04KB
下载 相关 举报
编译原理词法分析实验报告Word格式文档下载.docx_第1页
第1页 / 共16页
编译原理词法分析实验报告Word格式文档下载.docx_第2页
第2页 / 共16页
编译原理词法分析实验报告Word格式文档下载.docx_第3页
第3页 / 共16页
编译原理词法分析实验报告Word格式文档下载.docx_第4页
第4页 / 共16页
编译原理词法分析实验报告Word格式文档下载.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

编译原理词法分析实验报告Word格式文档下载.docx

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

编译原理词法分析实验报告Word格式文档下载.docx

a"

;

a<

z"

)return1;

/_添加了判断是否为英文字母的函数_/

A"

Z"

return0;

}

intisDigit(chara)

//判断是否是数字{

if((a-"

0"

)>

=0;

(a-"

)<

=9)return1;

/_添加了判断是否为数字的函数_/

elsereturn0;

intalpha(intst)

//识别保留字和标识符,给此函数的的语句加上注释。

{

charwordbuf[20]=“”;

//定义一个字符数组,用来存放需要得判断字符。

intn=0;

//指针只向第一位。

for(;

wordbuf[n]=rz[st];

//吧要判断的字符赋值给字符数组。

st++;

//指针往下一位指。

n++;

if((isDigit(rz[st])==1)||(isLetter(rz[st])==1)||(rz[st]=="

_"

))

//判断是否符合首字母为字母,数字或下划线。

//符合就赋值,继续匹配。

else

break;

//不符合就跳出函数。

}

intflag=0;

for(intk=0;

k<

20;

k++)//判断上步所匹配的字符串是否为关键字。

是的话则将flag置1,否则继续匹配

if(strcmp(keywords[k].c_str,wordbuf)==0)//判断字符串是否相等。

flag=1;

//相等将flag赋值为1。

if(flag==0)

intflagg=-1;

for(intt=0;

t<

pp;

t++)//判断是否重复出现过,并且标记flag。

if(strcmp(id[t].c_str,wordbuf)==0)//判断字符串是否相等。

flagg=t;

if(flagg!

=-1)//如果不存在直接输出。

printf(“(id,%d)”,flagg);

id[pp]=wordbuf;

//若存在输出原编号

printf(“(id,%d)”,pp);

pp++;

//下表加一。

Else//输出匹配到的关键字。

printf(“(”);

for(inti=0;

i<

n;

i++)

printf(“%c”,wordbuf[i]);

printf(“,-)”);

returnst;

//返回下标}

intnumber(intst)

//识别整数{

charnumbuf[20]=“”;

//定义一个数组存数字

intk=0;

numbuf[n]=rz[st];

if(isDigit(rz[st])==1)//如果是数字存入数组

elseif((k==0);

(rz[st]=="

."

))//否则

k++;

elseif(isLetter(rz[st])==1)

{

continue;

qq;

t++)

if(strcmp(nu[t].c_str,numbuf)==0)

=-1)

printf(“(nu,%d)”,flagg);

nu[qq]=numbuf;

printf(“(nu,%d)”,qq);

qq++;

}

else{

printf(“%c”,numbuf[i]);

printf(“,errordigital!

)”);

}intanotation(intst)

//处理除号/和注释,给此函数的语句加上注释

chartabuf[9999]=“”;

//定义字符数组,用来存放需要判断的字符。

//指针指向第一位

if(rz[st]=="

/"

//形成单行注释

printf(“

(//,-)”);

//将其输出

//指针指向下一位

while(rz[st]!

=10)

//当遇到换行符时跳出,否则持续赋值注释内容

tabuf[n]=rz[st];

//赋值

printf(“\n注释”);

i++)//输出注释的信息

printf(“%c”,tabuf[i]);

elseif(rz[st]=="

//形成多行注释

(/_,-)

”);

intstt=st+1;

while

(1)

;

rz[st+1]=="

)//遇到_/跳出循环

//赋值

//指针指向下一位

if(rz[st+1]=="

\0"

)//空格就报错!

printf(“(/_

error!

!

\n)”);

returnst+1;

//返回

i++)//输出注释的内容

(_/,-)

st=st+2;

elseprintf(“

(/,-)

//返回下标}intother(intst)

//函数识别其他特殊字符{

switch(rz[st])

case"

:

printf(“(rlop,==)

printf(“(rlop,=)

+"

(+=,-)

(++,-)

(+,-)

-"

(-=,-)

(--,-)

(-,-)

(_=,-)

(_,-)”);

>

"

printf(“(rlop,>

=)

elseprintf(“(rlop,>

<

printf(“(rlop,<

%"

(\%=,-)”);

(\%,-)

(!

=,-)

wrongthing!

printf(“(;

-)

elseprintf(“(;

worngword!

|"

(||,-)

(|,worngword!

{"

({,-)

}"

(},-)

("

((,-)

)"

["

([,-)

]"

(],-)

(:

#"

(#,-)

(;

(.,-)

"

(,,-)

"

case"

case10:

printf(“\n”);

case34:

printf(“(\”,-)

“);

case39:

printf(”

default:

(%c,worngthing)“,rz[st]);

}intchoice(intst)

//根据读入的单词的第一个字符确定调用不同的单词识别函数{

if(isLetter(rz[st])==1)

st=alpha(st);

elseif(isDigit(rz[st])==1)

st=number(st);

/_调用函数_/

st=anotation(st);

/_调用函数_/

st=other(st);

}intmain{

inti=0;

FILE_

fp;

charname[10];

printf(”请输入文件名:

\n“);

scanf(”%s“,;

name);

if((fp=fopen(name,”r“))==NULL)

printf(”Openerror!

e_it(0);

charch=fgetc(fp);

while(ch!

=EOF)

rz[i]=ch;

i++;

ch=fgetc(fp);

fclose(fp);

intj=0;

while(rz[j]!

="

j=choice(j);

cout<

endl<

程序中标示符如下“<

endl;

for(i=0;

“<

id[i]<

”程序中数字如下“<

for(j=0;

j<

j++)

nu[j]<

system(”pause;

);

}五.运行结果及分析

六.实验心得

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

当前位置:首页 > 初中教育 > 数学

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

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