版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、实验一词法分析程序的实现一、实验目的掌握程序设计语言的词法分析程序的手工实现方法二、实验内容构造miniC语言的词法分析程序,程序要求能对输入的字符串流进行词法分析,并输出相应的单词。miniC语言的单词包括整数、标识符、分隔符、运算符和关键字,编制相应的词法分析程序。三、实验参考1根据以下的正规式,画出状态转换图;标识符ID=letter(letter|digit)*letter=a|.|z|A|.|Zdigit=0|.|9十进制整数0|(1|2|3|4|5|6|7|8|9)(0|1|2|3|4|5|6|7|8|9)*运算符+-*/<<=!=>>=分隔符();,关键字
2、ifelsereturnintvoidwhilemain2. 单词的分类可将所有标识符归为一类;将整数归为一类(或者每种进制的整数各为一类);运算符、关键字和分隔符则可采取一词一类。3. 建立符号表可事先建立一关键字表,以备在识别关键字时进行查询。变量名表及常数表则在词法分析过程中建立。4. 程序的输出形式所输出的每一单词,均按形如(TOKEN,VALUE)的二元式编码。对于变量标识符和常数,TOKEN字段为相应的类别码,VALUE字段则是该标识符、常数在其对应符号表中登记项的序号。或者采用三元式(TYPE,TOKEN,VALUE),如下表:单词符号种别编码助记符内码值while1whileM
3、l2ifeTSe3elseswitch4switchcase5case标识符6idid在符号表中的位置常数7numnum在符号表中的位置+8+9卡10*<=11relopLE<11relopLT11relopEQ12=I135根据状态图,设计词法分析函数intscan(),完成以下功能:1) 从键盘或文件读入源程序数据,逐个分析出单词并输出其二/三元式2) 建立符号表,打印符号表中的值以供查看分析是否正确。在编程之前需要从简到复杂,考虑好用到的数据结构:A:先写出各类单词的识别功能,即能对给定的单词识别出是不是标识符,关键字等。B:之后把所有识别功能连接起来,能识别给出的字符串是哪
4、个,打印提示(按二元式或三元式)C:从文件里读取字符串功能。识别出文件里所有单词类型,暂不考虑出错情况。D:设计符号表的数据结构,把识别到的标识符加入到符号表中。6给出一个测试程序,调用函数scan(),输出单词种别和属性。比如测试程序如下:voidmain()inta,b;b=a*2;四、实验报告要求1)词法的正规式描述2)画出状态转换图3) 单词种别码定义说明(参见课本50页)4) 词法分析程序使用的数据结构和主要算法说明。5) 测试程序及其词法分析结果的显示。#include<stdio.h>#include<string.h>#include<iostre
5、am.h>charprog80,token8;charch;intsyn,p,m=0,n,row,sum=0;char*rwtab6="begin","if","then","while","do","end"voidscaner()/*else共分为三大块,分别是标示符、数字、符号,对应下面的ifif和else*/for(n=0;n<8;n+)tokenn=NULL;ch=progp+;while(ch='')ch=progp;p+;if(ch&
6、gt;='a'&&ch<='z')|(ch>='A'&&ch<='Z')/可能是标示符或者变量名m=0;while(ch>='0'&&ch<='9')|(ch>='a'&&ch<='z')|(ch>='A'&&ch<='Z')tokenm+=ch;ch=progp+;tokenm+='0'
7、p-;syn=10;for(n=0;n<6;n+)/将识别出来的字符和已定义的标示符作比较if(strcmp(token,rwtabn)=0)syn=n+1;break;elseif(ch>='0'&&ch<='9')/数字sum=0;while(ch>='0'&&ch<='9')sum=sum*10+ch-'0'ch=progp+;p-;syn=11;if(sum>32767)syn=-1;elseswitch(ch)/其他字符case'
8、<':m=0;tokenm+=ch;ch=progp+;if(ch='>')syn=21;tokenm+=ch;elseif(ch='=')syn=22;tokenm+=ch;elsesyn=23;p-;break;case'>':m=0;tokenm+=ch;ch=progp+;if(ch='=')syn=24;tokenm+=ch;elsesyn=20;p-;break;case':':m=0;tokenm+=ch;ch=progp+;if(ch='=')syn=18;
9、tokenm+=ch;elsesyn=17;p-;break;case'*':syn=13;token0=ch;break;case'/':syn=14;token0=ch;break;case'+':syn=15;token0=ch;break;case'-':syn=16;token0=ch;break;case'=':syn=25;token0=ch;break;case'':syn=26;token0=ch;break;case'(':syn=27;token0=ch;bre
10、ak;case')':syn=28;token0=ch;break;case'#':syn=0;token0=ch;break;case'n':syn=-2;break;default:syn=-1;break;intmain()p=0;row=1;cout<<"Pleaseinputstring:"<<endl;docin.get(ch);progp+=ch;while(ch!='#');p=0;doscaner();switch(syn)case11:cout<<"("<<syn<<","<<sum<<")"<<endl;break;case-1:cout<<"Errorinrow"<<row<<"!"<<
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 东莞市房屋买卖合同
- 产品买卖合同范本
- 工程造价咨询企业资质(申报示范文本)指南
- 计算机软件著作权登记委托代理合同范本
- 山东省济南市莱芜区2024年七年级上学期中考试数学试卷【附答案】
- 第15课 货币的使用与世界货币体系的形成 课件-高二上学期历史统编版(2019)选择性必修1
- 专题161磁体与磁场
- 工程项目划分
- 高中英语人教版必修3Unit3TheMillionPoundBankNoteperiod3测试(教师版)
- 工程项目管理人员安全生产责任制
- pep四年级英语上册Unit4-my-home-B-lets-talk-优质课件
- 预防诺如病毒教案
- 如何做好船舶成本管理
- 超市财务部流程
- 小儿腹泻 课件
- 《新时代劳动教育》-02新时代劳动价值观课件
- 寝室矛盾情景剧剧本
- 第22课《梦回繁华》一等奖创新教学设计 部编版语文八年级上册
- 7以内的加减法练习题一(100题)
- 老城历史核心片区控制性详细规划
- 《疾病与人类健康》
评论
0/150
提交评论