编译原理实验报告.docx

上传人:b****6 文档编号:8622380 上传时间:2023-02-01 格式:DOCX 页数:5 大小:35.19KB
下载 相关 举报
编译原理实验报告.docx_第1页
第1页 / 共5页
编译原理实验报告.docx_第2页
第2页 / 共5页
编译原理实验报告.docx_第3页
第3页 / 共5页
编译原理实验报告.docx_第4页
第4页 / 共5页
编译原理实验报告.docx_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

编译原理实验报告.docx

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

编译原理实验报告.docx

编译原理实验报告

1、实验目的

通过本实验的编程实践,使学生了解词法分析的任务,掌握词法分析程序设计的原理和构造方法,使学生对编译的基本概念、原理和方法有完整的和清楚地理解,并能正确地、熟练地运用。

2、实验内容

要求能将用给定简单语言书写的源程序进行词法分析,通过输入源程序从左到右对字符串进行扫描和分解,依次输出各个单词的内部编码及单词符号自身值,即二元组;若遇到错误则显示“Error:

,同时输出错误单词在源程序中的行位置,即三元组;同时进行标识符登记符号表的管理。

(1)关键字

"begin","end","if","then","else","while","write","read",

"do","call","const","char","until","procedure","repeat"

(2)运算符:

"+","-","*","/","="

(3)界符:

"{","}","[","]",";",",",".","(",")",":

"

(4)其他标记如字符串,表示以字母开头的标识符。

(5)空格、回车、换行符跳过。

在屏幕上显示如下:

(1,无符号整数)

(begin,关键字)

(if,关键字)

(+,运算符)

(;,界符)

(a,普通标识符)

6.2程序调试

文件位置:

I:

bianyi.txt

目标程序如下:

Main()

{inta,b;

6;a;

b=b-1;

}

6.3运行结果

7、程序源代码

#include

#include

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

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

}

return0;

}

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

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

elsereturn0;

}

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

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

elsereturn0;

}

voidanalyse(FILE*fpin){

stringarr="";

while((ch=fgetc(fpin))!

=EOF){

arr="";

if(ch==''||ch=='\t'||ch=='\n'){}

elseif(IsLetter(ch)){

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

if((ch<='Z')&&(ch>='A'))ch=ch+32;

arr=arr+ch;

ch=fgetc(fpin);

}

fseek(fpin,-1L,SEEK_CUR);

if(Iskey(arr)){cout<

elsecout<

}

elseif(IsDigit(ch)){

while(IsDigit(ch)||ch=='.'&&IsDigit(fgetc(fpin))){

arr=arr+ch;

ch=fgetc(fpin);

}

fseek(fpin,-1L,SEEK_CUR);

cout<

}

elseswitch(ch){

case'+':

case'-':

case'*':

case'=':

case'/':

cout<

case'(':

case')':

case'[':

case']':

case';':

case'.':

case',':

case'{':

case'}':

cout<

case':

':

{ch=fgetc(fpin);

if(ch=='=')cout<<":

="<<"\t$运算符"<

else{cout<<"="<<"\t$运算符"<

fseek(fpin,-1L,SEEK_CUR);}

}break;

case'>':

{ch=fgetc(fpin);

if(ch=='=')cout<<">="<<"\t$运算符"<

if(ch=='>')cout<<">>"<<"\t$输入控制符"<

else{cout<<">"<<"\t$运算符"<

fseek(fpin,-1L,SEEK_CUR);}

}break;

case'<':

{ch=fgetc(fpin);

if(ch=='=')cout<<"<="<<"\t$运算符"<

elseif(ch=='<')cout<<"<<"<<"\t$输出控制符"<

elseif(ch=='>')cout<<"<>"<<"\t$运算符"<

else{cout<<"<"<<"\t$运算符"<

fseek(fpin,-1L,SEEK_CUR);}

}break;

default:

cout<

}

}

}

voidmain(){

charin_fn[30];

FILE*fpin;

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

";

for(;;){

cin>>in_fn;

if((fpin=fopen(in_fn,"r"))!

=NULL)break;

elsecout<<"文件路径错误!

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

";

}

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

analyse(fpin);

fclose(fpin);

}

八、实验心得

此次实验,我增长了调试程序的经验,明白了书写程序的良好习惯,进一步了解了如何去编写一个词法分析程序,加深对词法分析原理的理解;熟悉了构造词法分析程序的相关原理,并使用C语言直接编写此法分析程序。

体会到多动手写程序的必要性

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

当前位置:首页 > 高中教育 > 语文

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

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