文档详情

实验1.词法分析实验报告..doc

发布:2017-01-16约3.83千字共6页下载文档
文本预览下载声明
实验1. 词法分析实验报告 实验目的 调试并完成一个词法分析程序,加深对词法分析原理的理解。 实验要求 待分析的简单语言的词法 关键字: begin if then while do end 所有关键字都是小写。 运算符和界符: := + – * / = = = ; ( ) # (3) 其他单词是标识符(ID)和整型常数(NUM),通过以下正规式定义: ID=letter(letter| digit)* NUM=digit digit * (4)空格由空白、制表符和换行符组成。空格一般用来分隔ID、NUM,运算符、界符和关键字,词法分析阶段通常被忽略。 各种单词符号对应的种别码 单词符号 种别码 单词符号 种别码 begin 1 : 17 if 2 := 18 then 3 20 while 4 21 do 5 = 22 end 6 23 letter(letter| digit)* 10 = 24 digit digit * 11 = 25 * 13 ; 26 / 14 ( 27 + 15 ) 28 - 16 # 0 词法分析程序的功能 输入:所给文法的源程序字符串。 输出:二元组(syn,token或sum)构成的序列。 其中:syn为单词种别码; token为存放的单词自身字符串; sum为整型常数。 源程序代码 #includestdio.h #includestring.h #includeiostream.h char prog[80],token[8]; char ch; int syn,p,m=0,n,sum=0; //p是缓冲区prog的指针,m是token的指针 char *rwtab[6]={begin,if,then,while,do,end}; void scaner() { for(n=0;n8;n++) token[n]=NULL; ch=prog[p++]; while(ch== ) ch=prog[p++]; if((ch=ach=z)||(ch=Ach=Z)) { m=0; while((ch=Ach=Z)||(ch=ach=z)||(ch=0ch=9)) { token[m++]=ch; ch=prog[p++]; } token[m++]=\0; p--; syn=10; for(n=0;n6;n++) if(strcmp(token,rwtab[n])==0) { syn=n+1; break; } } else if((ch=0ch=9)) { sum=0; while((ch=0ch=9)) { sum=sum*10+ch-0; ch=prog[p++]; } p--; syn=11; if(sum32767) syn=-1; } else switch(ch) { case:m=0; token[m++]=ch; ch=prog[p++]; if(ch==) { syn=21; token[m++]=ch; } else if(ch===) { syn=22; token[m++]=ch; } else { syn=23; p--;
显示全部
相似文档