编译原理词法分析器实验报告Word下载.docx

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

编译原理词法分析器实验报告Word下载.docx

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

编译原理词法分析器实验报告Word下载.docx

保留字和分隔符则采取一词一类。

(2)符号表的建立。

可事先建立一保留字表,以备在识别保留字时进行查询。

变量名表及常数表则在词法分析过程中建立。

(3)单词串的输出形式。

所输出的每一单词,均按形如(CLASS,VALUE)的二元式编码。

对于变量标识符和常数,CLASS字段为相应的类别码,VALUE字段则是该标识符、常数在其符号表中登记项的序号(要求在变量名表登记项中存放该标识符的字符串,其最大长度为四个字符;

常数表登记项中则存放该整数的二进制形式。

)。

对于保留字和分隔号,由于采用一词一类的编码方式,所以仅需在二元式的CLASS字段上放置相应的单词的类别码,VALUE字段则为“空”。

不过,为便于查看由词法分析程序所输出的单词串,也可以在CLASS字段上直接放置单词符号串本身。

(4)可以仿照书上图3.3的实现程序的结构来编写上述词法分析程序,但其中的若干语义过程有待于具体编写。

2.能对任何S语言源程序进行分析

在运行词法分析程序时,应该用问答形式输入要被分析的S源语言程序的文件名,然后对该程序完成词法分析任务。

3.能检查并处理某些词法分析错误

词法分析程序能给出的错误信息包括:

总的出错个数,每个错误所在的行号,错误的编号及错误信息。

4.本实验要求处理以下两种错误(编号分别为1,2):

1:

非法字符:

单词表中不存在的字符处理为非法字符,处理方式给出错误信息,“xxiserror”。

2:

源程序文件结束而注释未结束。

注释格式为:

/*……*/

三、实验程序设计说明

1.实验方案设计

2.程序源代码

#include<

stdio.h>

string.h>

ctype.h>

stdlib.h>

intlen,locate;

intMAXLEN=10;

intMAXDLG=9;

charstr[100];

charremain[10][10]={"

if"

"

else"

int"

while"

do"

return"

break"

continue"

};

chargetche()

{

//str[locate]=fgetc(fp);

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

returnstr[locate];

}

intsearch(char*temp)//是否为保留字

inti;

for(i=0;

i<

8;

i++)

{

if(strcmp(remain[i],temp)==0)

printf("

(%s,%d)\n"

temp,1);

return1;

}

return0;

voidread()

chartemp[100];

intcnt=0;

charch;

while(ch=getche(),ch=='

'

||ch==9||ch=='

\0'

)//去除单词前面多余的空格和制表符

if(ch=='

return;

//如果读取结束还没出现有用的字符则返回

locate++;

if(isalpha(ch))//如果是英文开头的

do

temp[cnt++]=ch;

locate++;

}while(ch=getche(),isalpha(ch)||isdigit(ch)||ch=='

_'

);

//读入到非字母数字下划线为止

temp[cnt]='

;

if(cnt>

MAXLEN)

%sistoolong\n"

temp);

elseif(!

search(temp))

(%s,%d)\n"

temp,2);

}

elseif(isdigit(ch))//如果是数字开头,则必然不是标示符

{

}while(ch=getche(),isdigit(ch));

MAXDLG)

%sisbigerthanthemaxnumber\n"

else

(%s,%d)\n"

temp,3);

elseif(ch=='

'

||ch=='

'

('

)'

{'

}'

)//如果是分隔符

(%c,%d)\n"

ch,5);

+'

-'

*'

/'

='

>

<

!

)//运算符

)//判断是否为++

ch=getche();

{

++4\n"

}

}

)//判断是否为-

--4\n"

else//否则的话,任意运算符后面都能跟上=

)//判断是否为两个字符构成的运算符

if(strcmp(temp,"

"

)==0)

iserrorinput!

\n"

else

(%s,%d)\n"

temp,4);

%ciserrorinput!

ch);

voidmain()

intlinecnt=0;

charchoice;

flushall();

请输入字符串:

gets(str);

第%d行\n"

++linecnt);

len=strlen(str);

locate=0;

while(locate<

len)

read();

Doyouwanttocontinuetoinput?

Pleaseselectone:

(YorN)\n"

scanf("

%c"

&

choice);

}while(choice=='

Y'

3.程序的执行结果

图1程序输入文件内容

图2输出结果

4.实验程序的优点和特色

本程序分类清楚,出错处理能力强,任何非法字符输入,将会报错,而且可以多次输入

四、实验中出现的问题及解决方法

本程序的缺点就是没有用文件存储,需要每次运行手动输入,给用户带来不方便

五、体会、意见或建议

通过本次试验了解了词法分析程序的设计方法,以及编译程序,在设计之前首先要构思好设计方法,可事先建立一关键字表,以备在识别关键字时进行查询。

而且深切体会到学习过的东西要是长期不用就会淡忘,就像C语言一样,大一学过的,但之后就几乎没用过,忘记了好多,所以我们要温故而知新。

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

当前位置:首页 > 总结汇报 > 学习总结

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

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