C++词法分析器_第1页
C++词法分析器_第2页
C++词法分析器_第3页
C++词法分析器_第4页
C++词法分析器_第5页
免费预览已结束,剩余7页可下载查看

下载本文档

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

文档简介

1、编译原理词法分析器实验报告张雅梅()一、实验目的: 1设计、编制、调试一个词法分析子程序识别单词,加深对词法 分析原理的理解。2掌握在对程序设计语言的源程序扫描的过程中,将其分解后各类 单词的语法分析方法。二、实验要求:1. 对给定的程序通过词法分析器弄够识别一个个单词符号,并以二 元式 (单词种别码,单词符号的属性值 )显示。而本程序则是通过对给 定路径的文件的分析后以单词符号和文字提示显示。2. 本程序自行规定:(1)关键字 "begin","end","if","then","else",

2、"while","write","read","do", "call","const","char","until","procedure","repeat"(2)运算符:"+","-","*","/","=""","","","

3、","",",","."(3) 界符:(4) 其他标记 如字符串,表示以字母开头的标识符(5) 空格、回车、换行符跳过。在屏幕上显示如下:( 1 , 无符号整数 )( begin , 关键字 )( if , 关键字 )( +, 运算符 )( ; , 界符 )( a , 普通标识符 )三、使用环境:Window vista 下的 Visual Studio 2008;四、实验步骤1. 查询资料,了解词法分析器的工作过程与原理。2. 分析题目,整理出基本设计思路。3. 实践编码,将设计思想转换用 c 语言编码实现,编译运行。4.

4、 测试功能,多次设置包含不同字符,关键字的待解析文件,仔细察 看运行结果, 检测该分析器的分析结果是否正确。 通过最终的测试发 现问题, 逐渐完善代码中设置的分析对象与关键字表, 拓宽分析范围 提高分析能力。五、流程图五、调试程序:1.举例说明文件位置: C:TEST.txt 目标程序如下:Int main()? i=10;j=100;n=1;sum=0;mult=1;while (i>0) n=n+1;i=i-1;if (j>=50) then sum=sum+j; else mult=mult*(j+1);sum=sum+i;if (i<=10) then sum=sum

5、-i; else mult=mult+i/2;if (i=j) then sum=sum-j; else mult=mult-j/2;if (n>1) then n=n-1; else n=n+1;if (n<2) then n=n+2; else n=n-2;2.运行结果:六、程序源代码: #include <iostream> #include <string> using namespacestd;#define MAX 22char ch = ' ' ;stringkey15= "begin" , "en

6、d" ,"if" , "then" , "else" , "while" , "write" ," read" ,"do" , "call" , "const" , "char" , "until" , "procedure" , "repeat" ;int i;for (i=0;i<MAX;i+) if (keyi.co

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

8、d analyse(FILE *fpin)string arr= "" ;while (ch=fgetc(fpin)!=EOF) 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);

9、if (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

10、$ 无符号实数 " <<endl;else switch (ch)case'+' :case'-' :caseEcase/caseT do&AAOAA>®w苹 UAAend-八 break- case(case-)-case.r case- cas5 case: cas5 case.rcasp-y ho&aao-aa>苹 UAAend-八 break 八 easy 几 chHfgefc(fpin=if (Chun ) COUAC =-H= AA>S®*苹 UAAend-八e-se 宀 C

11、OUAC =H= AA/fsw苹= AAend-r:fseek(fpin1 厂 SEEKICUR) break -case.v八 chHfgefc(fpin=if (chHH -H- ) COUAC =VH= AA>fs®* UAAend-八if (ch= '>' )cout<< ">>" <<"t$ 输入控制符" <<endl;else cout<< ">" <<"t$ 运算符" <<e

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

13、out<< "<>" <<"t$ 运 算符" <<endl;else cout<< "<" <<"t$ 运算符" <<endl;fseek(fpin,-1L,SEEK_CUR);break ;default : cout<<ch<< "t$ 无法识别字符 " <<endl;void main()char in_fn30;FILE * fpin;cout<< &

14、quot; 请输入源文件名(包括路径和后缀名) :" ; for (;)cin>>in_fn;if (fpin=fopen(in_fn, "r" )!=NULL) break ;else cout<< " 文件路径错误!请输入源文件名(包括路径和 后缀名) :" ;cout<<分析如下*" <<endl;analyse(fpin);fclose(fpin);cout<<endl;cout<< " 按任意键结束 " <<endl;int a;cin>>a;六、实验心得:? ?通过此次实验,让我了解到如何设计、编制并调试词法分析程序, 加深对词法分析原理的理解; 熟悉了构造词法分析程序的手工方式的 相关原理,使用某种高级语言(例如 C+语言)直接编写此法分析程 序。另外,也让我重新熟悉了 C+语言的相关内容,加深了对 C

温馨提示

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

评论

0/150

提交评论