实验一 简单样本语言的词法分析器_第1页
实验一 简单样本语言的词法分析器_第2页
实验一 简单样本语言的词法分析器_第3页
实验一 简单样本语言的词法分析器_第4页
实验一 简单样本语言的词法分析器_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、昆明理工大学信息工程与自动化学院学生实验报告( 2014 2015 学年 第 1 学期 )课程名称:编译原理 开课实验室:信自楼机房444 2014年11月20日年级、专业、班学号姓名成绩实验项目名称简单样本语言的词法分析器指导教师李亚教师评语该同学是否了解实验原理:A.了解B.基本了解C.不了解该同学的实验能力:A.强 B.中等 C.差 该同学的实验是否达到要求:A.达到B.基本达到C.未达到实验报告是否规范:A.规范B.基本规范C.不规范实验过程是否详细记录:A.详细B.一般 C.没有 教师签名: 年 月 日一、 实验目的及内容实验目的:能够采用C编程语言实现简单的词法分析程序,设计、编制

2、并调试一个词法分析程序,加深对词法分析原理的理解。实验内容:实现我们定义的语言的词法分析器。这种语言的程序结构很简单,语法相当于c的函数体,即由一对大括号括起来的语句序列,没有过程或函数。声明语句、表达式语句及控制语句的写法都与c类似,但规定:一条声明语句只能声明一个整型变量,没有数组;控制语句只是if、for和while三个语句,这三个语句本身也可以包含语句序列;表达式仅局限于布尔表达式和整型算术表达式,布尔表达式由对两个算术表达式的比较组成,该比较使用<,>,<=,>=,= =,!=比较运算符;算术表达式可以包括整型常数、变量以及+,*,/这四个运算符。另外,还可以

3、有复合语句。用read和write语句实现输入输出。注释用/*和*/括起来,但注释不能嵌套。二、 实验原理及基本技术路线图(方框原理图或程序流程图)词法分析器流程图:三、所用仪器、材料(设备名称、型号、规格等或使用软件)1台PC及VISUAL C+6.0软件。四、实验方法、步骤(或:程序代码或操作过程)源代码:#include <iostream>#include<string>using namespace std;#define MAX 22 char ch =' 'string key15="begin","end&q

4、uot;,"if","then","else","while","write","read","do", "call","const","char","until","procedure","repeat"int Iskey(string c) /关键字判断 int i; for(i=0;i<MAX;i+) if(p

5、are(c)=0) return 1; return 0;int IsLetter(char c) /判断是否为字母 if(c<='z')&&(c>='a')|(c<='Z')&&(c>='A') return 1; else return 0;int IsDigit(char c) /判断是否为数字 if(c>='0'&&c<='9') return 1; else return 0;void analyse(FI

6、LE *fpin) string arr="" while(ch=fgetc(fpin)!=EOF) arr="" if(ch=' '|ch='t'|ch='n') else if(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 (

7、Iskey(arr)cout<<arr<<"t$关键字"<<endl; else cout<<arr<<"t$普通标识符"<<endl; else if(IsDigit(ch) while(IsDigit(ch)|ch='.'&&IsDigit(fgetc(fpin) arr=arr+ch; ch=fgetc(fpin); fseek(fpin,-1L,SEEK_CUR); cout<<arr<<"t$无符号实数&qu

8、ot;<<endl; else switch(ch) case'+': case'-' : case'*' : case'=' : case'/' :cout<<ch<<"t$运算符"<<endl;break; case'(' : case')' : case'' : case'' : case'' : case'.' : case','

9、 : case'' : case'' :cout<<ch<<"t$界符"<<endl;break; case':' :ch=fgetc(fpin); if(ch='=') cout<<":="<<"t$运算符"<<endl; else cout<<"="<<"t$运算符"<<endl; fseek(fpin,-1L,SEEK_

10、CUR); break;case'>' :ch=fgetc(fpin); if(ch='=') cout<<">="<<"t$运算符"<<endl; if(ch='>')cout<<">>"<<"t$输入控制符"<<endl; else cout<<">"<<"t$运算符"<<endl;

11、 fseek(fpin,-1L,SEEK_CUR); break; case'<' :ch=fgetc(fpin); if(ch='=')cout<<"<="<<"t$运算符"<<endl; else if(ch='<')cout<<"<<"<<"t$输出控制符"<<endl; else if(ch='>') cout<<"

12、<>"<<"t$运算符"<<endl; elsecout<<"<"<<"t$运算符"<<endl; fseek(fpin,-1L,SEEK_CUR); break; default : cout<<ch<<"t$无法识别字符"<<endl; void main() char in_fn30; FILE * fpin; cout<<"请输入源文件名(包括路径和后缀名):&q

13、uot; for(;) cin>>in_fn; if(fpin=fopen(in_fn,"r")!=NULL) break; else cout<<"文件路径错误!请输入源文件名(包括路径和后缀名):" cout<<"n*分析如下*"<<endl; analyse(fpin); fclose(fpin);五、实验过程原始记录( 测试数据、图表、计算等)六、实验结果、分析和结论(误差分析与数据处理、成果总结等。其中,绘制曲线图时必须用计算纸或程序运行结果、改进、收获)通过本次实验,我明白了词法分析程序又称扫描器,是编译过程的第一步,是下一步进行语法分析的基础

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论