编译原理 词法分析实验报告完整版可运行Word文件下载.docx

上传人:b****6 文档编号:15909702 上传时间:2022-11-17 格式:DOCX 页数:13 大小:134.12KB
下载 相关 举报
编译原理 词法分析实验报告完整版可运行Word文件下载.docx_第1页
第1页 / 共13页
编译原理 词法分析实验报告完整版可运行Word文件下载.docx_第2页
第2页 / 共13页
编译原理 词法分析实验报告完整版可运行Word文件下载.docx_第3页
第3页 / 共13页
编译原理 词法分析实验报告完整版可运行Word文件下载.docx_第4页
第4页 / 共13页
编译原理 词法分析实验报告完整版可运行Word文件下载.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

编译原理 词法分析实验报告完整版可运行Word文件下载.docx

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

编译原理 词法分析实验报告完整版可运行Word文件下载.docx

(2)掌握词法分析程序的作用。

3、实验要求

(1)对任给的一个C语言源程序,能够滤掉空格、回车换行符、tab键及注释。

(2)识别各类单词符号,如关键字、标识符、运算符、常数、界符,结果以二元式形式输出,并构造符号表。

(3)输出有词法错误的单词及所在行号。

(在此阶段只能识别有限的词法错误)

4、实验原理

根据扫描到的单词符号的第一个字符的种类,分别转到相应的程序进行处理。

这些程序的功能就是识别以相应字符开头的各类单词符号。

5、实验步骤

(1)根据C语言各类单词的正规式,构造能识别各类单词的状态转换图。

(2)根据状态转换图,构造识别各类单词的词法分析器。

6、状态转换图及词法分析程序

(1)状态转换图

(2)程序源代码

#include<

iostream>

#include<

string>

usingnamespacestd;

#defineMAX22

charch='

'

;

stringkey[15]={"

begin"

"

end"

if"

then"

else"

while"

write"

read"

"

do"

"

call"

const"

char"

until"

procedure"

repeat"

};

intIskey(stringc){//关键字判断

inti;

for(i=0;

i<

MAX;

i++){

if(key[i].compare(c)==0)return1;

}

return0;

}

intIsLetter(charc){//判断是否为字母

if(((c<

='

z'

)&

&

(c>

a'

))||((c<

Z'

A'

)))return1;

elsereturn0;

intIsDigit(charc){//判断是否为数字

if(c>

0'

c<

9'

)return1;

voidanalyse(FILE*fpin){

stringarr="

while((ch=fgetc(fpin))!

=EOF){

arr="

if(ch=='

||ch=='

\t'

\n'

){}

elseif(IsLetter(ch)){

while(IsLetter(ch)||IsDigit(ch)){

if((ch<

(ch>

))ch=ch+32;

arr=arr+ch;

ch=fgetc(fpin);

}

fseek(fpin,-1L,SEEK_CUR);

if(Iskey(arr)){cout<

<

arr<

\t$关键字"

endl;

}

elsecout<

\t$普通标识符"

elseif(IsDigit(ch)){

while(IsDigit(ch)||ch=='

.'

IsDigit(fgetc(fpin))){

cout<

\t$无符号实数"

elseswitch(ch){

case'

+'

:

-'

:

*'

/'

cout<

ch<

\t$运算符"

break;

('

)'

['

]'

'

'

{'

}'

\t$界符"

{ch=fgetc(fpin);

)cout<

="

else{cout<

}break;

case'

>

)cout<

\t$输入控制符"

elseif(ch=='

\t$输出控制符"

else{cout<

default:

\t$无法识别字符"

voidmain(){

charin_fn[30];

FILE*fpin;

请输入源文件名(包括路径和后缀名):

for(;

){

cin>

in_fn;

if((fpin=fopen(in_fn,"

r"

))!

=NULL)break;

文件路径错误!

\n********************分析如下*********************"

analyse(fpin);

fclose(fpin);

getchar();

7、测试及结果

8、心得

通过本次试验我对编译原理这门课程有了一种不一样的感觉,我发现在编写程序之前应该要有一个整体的规划,然后在考虑细节问题,不断地发现问题,修改程序,使之精益求精。

通过实验,我对词法分析有了更进一步的认识和了解,在实验中还遇到了许多问题,通过不断地解决遇到的问题,我的能力也得到了提高。

另外,编写代码时一定要有耐心,不怕错,只要有了这种精神什么困难都可以克服。

在实验过程中我遇到许多问题,衷心感谢在这过程中帮助我的老师和同学们,谢谢你们,我会更加努力学习这门课程,迎难而上,学好这门课程!

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

当前位置:首页 > 成人教育 > 成考

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

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