词法分析器c++实现编译原理

词法分析器c++实现编译原理

ID:11801221

大小:61.50 KB

页数:12页

时间:2018-07-14

词法分析器c++实现编译原理_第1页
词法分析器c++实现编译原理_第2页
词法分析器c++实现编译原理_第3页
词法分析器c++实现编译原理_第4页
词法分析器c++实现编译原理_第5页
资源描述:

《词法分析器c++实现编译原理》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

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

2、数字的字符序列,单词种别码为20,输出的二元组形式为(单词种别码,标识符的名字);3、常数为无符号整型数;单词种别码为30,输出的二元组形式为(单词种别码,常数值);4、运算符包括:+、-、*、/、=、>、<、>=、<=、==、!=;单词种别码为41~51,输出的二元组形式为(单词种别码,0);5、分隔符包括:,、;、{、}、(、);单词种别码为61~66,输出的二元组形式为(单词种别码,0)。单词符号种别码单词符号种别码main1/44int2=45if3>46for4<47while5>=48do6<=49return7==50break8!=51contin

3、ue9,61ID20;62NUM30{63+41}64-42(65*43)66三、预习提示1、模块结构参照教材105页图3.22。四、实验过程和指导1、准备(1)课本有关章节;(2)编制好程序;(3)准备多组测试数据。2、为了能设计好程序,注意以下事情:(1)模块设计:将程序分成合理的多个模块(函数),每个模块做具体的同一事情。(2)设计方案:模块关系简图、流程图、全局变量、函数接口等。(3)编程时注意编程风格:空行的使用、注释的使用、缩进的使用等。五、举例源程序文件内容如下:main(){inta,b;a=10;b=a+20;}要求输出如下:(1,0)(65,0

4、)(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#includeusingnamespacestd;//单词的二元组描述typedefstruct{char*str;intcode;//种别码}Word;//关键字描述Wordkey[9]={{"main",1},{"int",2

5、},{"if",3},{"for",4},{"while",5},{"do",6},{"return",7},{"break",8},{"continue",9}};//运算符描述Wordoptr[11]={{"+",41},{"-",42},{"*",43},{"/",44},{"=",45},{">",46},{"<",47},{">=",48},{"<=",49},{"==",50},{"!=",51}};//分界符描述Wordseparator[6]={{",",61},{";",62},{"{",63},{"}",64},{"(",65},{")",66

6、}};charch;//判断是否为保留字intIsKey(stringss){inti;for(i=0;i<9;i++){if(!strcmp(key[i].str,ss.c_str()))return(key[i].code);}return0;}//判断是否字母intIsLetter(charc){if(((c>='a')&&(c<='z'))

7、

8、((c>='A')&&(c<='Z')))return1;elsereturn0;}//判断是否为数字intIsDigit(charc){if(c>='0'&&c<='9')return1;elsereturn0;}

9、//判断是否为运算符intIsOptr(stringss){inti;for(i=0;i<11;i++){if(!strcmp(optr[i].str,ss.c_str()))return(optr[i].code);}return0;}//判断是否为分界符intIsSeparator(stringss){inti;for(i=0;i<6;i++){if(!strcmp(separator[i].str,ss.c_str()))return(separator[i].code);}return0;}//词法分析函数voidanalyse(ifstreamin){s

10、tring

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。