词法分析器的构造南邮2016编译原理实验一报告.docVIP

  • 4
  • 0
  • 约3.6千字
  • 约 14页
  • 2023-08-22 发布于山东
  • 举报

词法分析器的构造南邮2016编译原理实验一报告.doc

实验报告 2015/2016学年第二学期) 课程名称编译原理 实验名称词法剖析器的结构 实验时间 2016 年 4月 29日 指导单位 计算机软件教课中心 指导教师 学生姓名 wujun 班级学号 学院(系) 计算机学院、软件 专 业 计算机科学 学院与技术 实验报告 实验名称  词法剖析器的结构  指导教师 实验种类  设计  实验学时  4  实验时间 一、实验目的和要求 1、实验目的: 设计、编制、调试一个词法剖析程序,对单词进行辨别和编码,加深对词法剖析原理的理解。 2、实验要求: 1)、同意用户自己输入源程序并保存为文件; 、系统可以输出经过预办理后的源程序(去掉说明、换行、空格 等); 、可以将该源程序中所有的单词依据其所属种类(整数、保存字、运算符、表记符等。定义的类C语言中的表记符只好以字母或下划线开 头)进行归类显示,比如:辨别保存字:if、int、for、while、do、return、 break、continue等,其余的都辨别为表记符;常数为无符号整形数; 运算符包含:+、-、*、/、=、、、=、=、!=等;分开符包含:,、;、 {、}、(、)等; 、实现文件的读取操作,而不是将文本以字符串形式预存于程序中。文本内容为待剖析的类C语言程序。 二、实验环境(实验设施) 硬件:计算机 软件:VisualC++ 二、实验原理及内容 1、实验内容: 设计并实现一个词法剖析器,实现对指定地点的类C语言源程序言本文 件的读取,并可以对该源程序中的所有单词进行分类,指出其所属种类,实 现简单的词法剖析操作。 比以下边为一段C语言源程序: main( ){ inta,b; a=10; b=a+20; } 要求输出以下: (2,’main’) (5,’(’) (5,’)’) (5,’)’) (5,’)’) (5,’)’) (5,’{’) (1,’int’) (2,’a’) (5,’,’) (2,’b’) (5,’;’) (2,’a’) (4,’=’) (3,’10’) (5,’;’) (2,’b’) (4,’=’) (2,’a’) (4,’+’) (3,’20’) (5,’;’) (5,’}’) 、实验原理状态变换图 3、实验代码: 实验代码: #include #include #includefstream #include #include #include structChar{|| ch==:||ch==\||ch==\||ch==[||ch==]||ch==#||ch==_) returntrue; returnfalse; } ==0){ returntrue; } returnfalse; } 预办理去掉说明、换行、空格等 voidScanner(chars[],chara[]){ inti=0,j=0,k=strlen(s); for(i;ik;i++){ if(s[i]==/s[i+1]==/){ do{ i++; }while(s[i]!=\n); i--; } elseif(s[i]==/s[i+1]==*){ do{ i++; }while(s[i]!=/||s[i-1]!=*); continue; } elseif(s[i]==\t||s[i]==\n||s[i]==) a[j++]=; else a[j++]=s[i]; } cout\n系统经过预办理后的输出(去掉说明和换行):endl; couta\n\n; cout系统经过预办理后的输出(去掉说明、换行、空格等):endl;for(i=0;istrlen(a);i++){ if(a[i]==) continue; else couta[i]; } coutendlendlendl; } voidHandle(chars[]){//词法剖析 charch; for(intj=0;jstrlen(s);j++){ charword[20]={\0}; inti=0; ch=s[j]; if(ch==) continue; elseif(IsLetter(ch)){ do{ word[i++]=ch; ch=s[++j]; }while(IsLetter(ch)||IsDigit(ch)||ch==_); j--; word[i]=\0; if(IsKeyWord(word)) cout(1,word)endl; else cout(2,word)endl; } elseif(IsDigit(ch)){ do{ word[i++]=ch; ch=s[++j]; }while(IsDigit(ch)); j--; word[i]=\0; cout(3,word)endl; } elseif(IsSeparator(ch)){

文档评论(0)

1亿VIP精品文档

相关文档