词法分析器C++实现编译原理.doc

上传人:啊飒飒 文档编号:10266326 上传时间:2021-05-03 格式:DOC 页数:13 大小:61.50KB
返回 下载 相关 举报
词法分析器C++实现编译原理.doc_第1页
第1页 / 共13页
词法分析器C++实现编译原理.doc_第2页
第2页 / 共13页
词法分析器C++实现编译原理.doc_第3页
第3页 / 共13页
词法分析器C++实现编译原理.doc_第4页
第4页 / 共13页
词法分析器C++实现编译原理.doc_第5页
第5页 / 共13页
点击查看更多>>
资源描述

《词法分析器C++实现编译原理.doc》由会员分享,可在线阅读,更多相关《词法分析器C++实现编译原理.doc(13页珍藏版)》请在三一文库上搜索。

1、实验一 词法分析一、实验目的 (实验日期:2011.3.21)通过设计编制调试一个具体的词法分析程序,加深对词法分析原理的理解。并掌握在对程序设计语言源程序进行扫描过程中将其分解为各类单词的词法分析方法。二、实验要求编制一个读单词过程,源程序为一个文件,读取该文件,识别出各个具有独立意义的单词,并依次输出各个单词的内部编码及单词符号自身值。单词的内部编码如下:1、保留字:main、if、int、for、while、do、return、break、continue,单词种别码分别为19,输出的二元组形式为(单词种别码,0)2、标识符:除保留字外的以字母开头,后跟字母、数字的字符序列,单词种别码为

2、20,输出的二元组形式为(单词种别码,标识符的名字);3、常数为无符号整型数;单词种别码为30,输出的二元组形式为(单词种别码,常数值);4、运算符包括:+、-、*、/、=、=、46for4=48do6=49return7=50break8!=51continue9,61ID20;62NUM3063+4164-42(65*43)66三、预习提示1、模块结构参照教材105页图3.22。四、实验过程和指导1、准备(1) 课本有关章节;(2) 编制好程序;(3) 准备多组测试数据。2、为了能设计好程序,注意以下事情:(1) 模块设计:将程序分成合理的多个模块(函数),每个模块做具体的同一事情。(2)

3、 设计方案:模块关系简图、流程图、全局变量、函数接口等。(3) 编程时注意编程风格:空行的使用、注释的使用、缩进的使用等。五、举例源程序文件内容如下:main()int a, b;a = 10; b = a + 20;要求输出如下:(1,0)(65,0)(66,0)(63,0)(2,0)(20,“a”)(61,0)(20,“b”)(62,0)(20,”a”)(45,0)(30,10)(62,”;”)(20,”b”)(45,0)(20,”a”)(41,0)(30,20)(62,0)(66,0)程序实现#include#include#includeusing namespace std;/单词的

4、二元组描述typedef structchar *str;int code;/种别码Word;/关键字描述Word key9=main,1,int,2,if,3,for,4,while,5,do,6,return,7,break,8,continue,9;/运算符描述Word optr11=+,41,-,42,*,43,/,44,=,45,46,=,48,=,49,=,50,!=,51;/分界符描述Word separator6=,61,;,62,63,64,(,65,),66;char ch;/判断是否为保留字int IsKey(string ss)int i;for(i=0;i=a)&(c

5、=A)&(c=0&c=9)return 1;elsereturn 0;/判断是否为运算符int IsOptr(string ss)int i;for(i=0;i11;i+)if(!strcmp(optri.str,ss.c_str()return (optri.code);return 0;/判断是否为分界符int IsSeparator(string ss)int i;for(i=0;i6;i+)if(!strcmp(separatori.str,ss.c_str()return (separatori.code);return 0;/词法分析函数 void analyse(ifstream

6、 in) string st=; /char ch; while(ch=in.get()!=EOF) st=; if(ch= )|(ch=t)|(ch=n)/空格,tab健,换行,处理 else if(IsLetter(ch)/保留字、标识符的处理 while(IsLetter(ch)|IsDigit(ch) st+=ch; ch=in.get(); in.seekg(-1,ios:cur);/文件指针(光标)后退一个字节 if(IsKey(st)/为保留字 cout(IsKey(st),0)endl; else/为标识符 cout(20,st)endl; else if(IsDigit(ch

7、)/无符号整数处理 while(IsDigit(ch) st+=ch; ch=in.get(); in.seekg(-1,ios:cur); cout(30,st)=,=,=,!=”的情况(1)的处理 string sr(st);sr+=ch;if(IsOptr(sr)/是情况(1)cout(IsOptr(sr),0)endl;else/不是情况(1)cout(IsOptr(st),0),的处理 cout(IsOptr(st),0)endl; in.seekg(-1,ios:cur); else if(IsSeparator(st)/分隔符处理 cout(IsSeparator(st),0)endl; void main()ifstream in;in.open(test.txt);if(in.is_open()analyse(in);in.close();elsecout文件操作出错endl;coutzph1endl;

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

当前位置:首页 > 科普知识


经营许可证编号:宁ICP备18001539号-1