编译原理完整解析

上传人:奇异 文档编号:250337343 上传时间:2022-02-07 格式:DOCX 页数:26 大小:393.75KB
返回 下载 相关 举报
编译原理完整解析_第1页
第1页 / 共26页
编译原理完整解析_第2页
第2页 / 共26页
编译原理完整解析_第3页
第3页 / 共26页
编译原理完整解析_第4页
第4页 / 共26页
编译原理完整解析_第5页
第5页 / 共26页
点击查看更多>>
资源描述

《编译原理完整解析》由会员分享,可在线阅读,更多相关《编译原理完整解析(26页珍藏版)》请在金锄头文库上搜索。

1、天津大学仁爱学院编译原理实验报告计算机科学与技术系学生姓名:王玲玲指导教师:孙林娟班 级:计科四班实验日期:2015年12月22日实验名称:词法分析器的实现过程实 名模拟词法分析器的转化过程二、实验目的1、学习各个词法分析器的装换过程2、掌握状态转换图的画法3、合并各个状态转换图,使之合并成完整的状态转换图。4、根据状态装换图,用代码实现词法分析器的编译过程设计、编制、调制一个词法分析子程序-识别单词,加深对词法分析原理的理解。三、实验工具VC+6.0四、实验描述对不同的关键字,表示符,无符号整常数,运算符或分解符进行区分。1、用状态装画图,表示每一项固定符号2、合并所有的状态转换,完成完整的

2、状态装换图3、通过状态转换图,写出相应的代码4、测试代码正确性程序实现的是一个读单词过程,从输入的源程序中,识别出各个具有独立意义的单词, 即基本保留字,标识符,常数,运算符,分隔符五大类,并依次输出各个单词的内部编码及单 词符号自身值五、设计思想设计词法分析器的过程中,虽然没有实际将所有的状态转换图建立,但是所用的思想是根 据状态转换表实现对单词的识别,首先构造一个保留字表,然后,没输入一个字符就检测应该 进入什么状态。根据不同的装换识别单词, 六、实验过程实验1:I、C语言子集关键字:begin if then while do end所有关键字都是小写运算符和界符::= + -/= =

3、;()#(3)其他单词是标识符(ID)和整型常数(NUM),通过以下正规式定义:ID=letter (letter| digit) *NUM=digit digit *(4)空格由空白、制表符和换行符组成空格一般用来分隔ID、NUM,运算符、界符和关键 字,词法分析阶段通常被忽略。2、各种单词符号对应的种别码单词符号种别码单词符号种别码begin1 17if2一一18then320while421do5=22end6=24digit digit *1125.13* 926/14(27+15)28.16#0单词符号种别码begin117if 218then320while421do 5=22en

4、d6= 24253、词法分析程序的功能输入:所给文法的源程序字符串,输出:二元组(syn, token或sum)构成的序列。其中:syn为单词种别码:token为存放的单词自身字符串; sum为整型常数。4、状态装换图- ,、-M15、实验方法、步骤(或: 程序代码 #include #include #include char prog80,token8;char ch;int syn/p,m=0,n,rowsum=0; char *rwtab6=begin,/,if, void scaner()一程序代码或操作过程)/,then,7,while,/,do,/,endH;for(n=0;n=

5、a,&ch=IA,&ch=,0,&ch=,a,&ch=,A,&ch=lZ,) (tokenm+=ch;ch=progp+;tokenm+=l0*;P-;syn=10;for(n=0;n=,0,&ch=0,&ch32767)syn=-l;)else switch(ch)case,)(syn=21;tokenm+=ch;)else if(ch=,)syn=22;tokenm+=ch;)elsesyn=23;P-;)break;case,:m=0;tokenm+=ch;ch=progp+;if(ch=i=,)(syn=24;tokenm+=ch;)else(syn=20;P-;)break;case

6、,:,:m=0;tokenm+=ch;ch=progp+;if(ch=)syn=18;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;break; case),:

7、syn=28;token0=ch;break; case#,:syn=0;token0=ch;break;casen:syn=-2;break;default: syn=-l;break;)void main()P=0;row=l;coutPlease input string:Hendl;do cin.get(ch);progp+=ch;)while(ch!=,#,);P=0; do scaner(); switch(syn) ( case 11: cout,(,syn,,suml,),,endl; break; case -1: coutnError in row ,lrow,!,endl

8、; break;case -2: row=row+; break;default: cout,(,lsyn,tokenl,)l,endl;break;)while (syn!=O);创建编辑程序(3)连接、编译和调试程序 xhiihw b nc f x - rroxf f 9 i xtwl C-W-文仲 史)*/) a a 工 12 k)ot察sj XMa *1)m初 qp. Gta rs |- | O3iPD w 41=W I (4)运行程序-npq乂 zXDOCUIEIiTS AID SETTIKGSSTin)EMTffiS3aSSlDebugzhuhaibinc.Please input

9、 string:(5)测试给定源程序begin x:=8; if x0 then x:=2*x+l/5; end#输出结果ppit-ns K IVipttt bccrin x8; if Jllj&gdLri) (25,=x t:x0 then x:=2*x*l/S ;cndttend Press criy key to con t iviue实验2:1、C语言子集关键字:Int for if所有关键字都是小写(2)运算符和界符:+ = +=+* #(3)其他单词是标识符(ID)和整型常数(NUM),通过以下正规式定义:ID=letter (letter | digit) *NUM=digit

10、digit *(4)空格由空白、制表符和换行符组成。空格一般用来分隔ID、NUM,运算符、界符和关键 字,词法分析阶段通常被忽略。2、各种单词符号对应的种别码单词符号种别码单词符号种别码int1+=8if2*9for310letter(letter)digit)*4(11digit digit*5)12 十二6#13 +714单词符号种别码单词符号种别码Int1*10111213If2=For3+6)+7#+=8letter(letter| digit)* 4 digit digit *53、词法分析程序的功能输入:所给文法的源程序字符串,输出:二元组(syn, token或sum)构成的序列。其中:syn为单词种别码;token为存放的单词自身字符串:sum为整型常数,4、状态装换图5、实验方法、步骤(或:程序代码或操作过程)程序代码#include#include#includechar prog80,token;token 给 8 个存储空间char ch;一个单词int syn,p/m=0,n,row,sum=0;syn:单词类别,token:对相应 row:行数,sum:存放常数 char*rwtab10Hint,“if,”f。,; 定义关键字void scaner()(for(n=0;n8;n+) tokenn

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 管理学资料

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号