词法分析与语法分析程序设计(共54页).doc
《词法分析与语法分析程序设计(共54页).doc》由会员分享,可在线阅读,更多相关《词法分析与语法分析程序设计(共54页).doc(54页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上l 实验三 词法分析与语法分析程序设计一实验目的基本掌握计算机语言的词法分析程序和语法分析程序的设计方法。二实验要求、内容及步骤实验要求:1.根据以下的正规式,画出状态图;标识符:(|)*关键字:if then else while do十进制整数:0 | (1|2|3|4|5|6|7|8|9)(0|1|2|3|4|5|6|7|8|9)*运算符和分隔符:+ - * / 0 i= 1;而绝对不要写成IFi0 i=1;因为对于后者,我们的分析器将无条件地将IFI看成一个标识符。这个小语言的单词符号的状态转换图,如下图:2.语法分析是决定如何使用一个文法生成一个终结符串的过
2、程。语法分析器 能识别由加+ 减- 乘* 除/ 乘方 括号()操作数所组成的算术表达式,其文法如下:EE+T|E-T|TTT*F|T/F|FFPF|Pp(E)|i使用的算法可以是:预测分析法;递归下降分析法;算符优先分析法;LR分析法等。分析表格式:id+*()$EE TEE TE EE +TEE E TT FTT FT TT T *FTT T FF idF (E)3.中间代码生成器 产生上述算术表达式的中间代码(四元式序列)。五实验代码及结果词法分析代码:#include#includeusing namespace std;char prog100,token10;char ch;int
3、syn,p,m=0,n,row,sum=0;char *rwtab20=dim,if,do,stop,end ,and,begin,bool,case,char,false,for,int,not,or,set,then,true,until,while;void scaner()for(n=0;n=a&ch=A&ch=0&ch=a&ch=A&ch=Z)tokenm+=ch;ch=progp+;tokenm+=0;p-;syn=21;for(n=0;n=0&ch=0&ch32767)syn=-1;else switch(ch) case=:syn=8+15;token0=ch;break;ca
4、se+:syn=9+15;token0=ch;break;case*:m=0;tokenm+=ch;ch=progp+;if(ch=*)syn=11+15; tokenm+=ch;elsesyn=10+15;p-; break;case,:syn=12+15;token0=ch;break;case(:syn=13+15;token0=ch;break;case):syn=14+15;token0=ch;break;case#:syn=0;token0=ch;break;case)syn=17+15;tokenm+=ch;else if(ch=)syn=16+15;tokenm+=ch;els
5、esyn=15+15;p-;break;case:m=0;tokenm+=ch;ch=progp+;if(ch=)syn=19+15;tokenm+=ch;elsesyn=18+15;p-;break;case:m=0;tokenm+=ch;ch=progp+;if(ch=)syn=21+15;tokenm+=ch;elsesyn=20+15;p-;break;case/:syn=22+15;token0=ch;break;case-:syn=23+15;token0=ch;break;case;:syn=24+15;token0=ch;break;default: syn=-1;break;
6、void main()p=0;row=1;coutendlendlendl;cout词法分析endlendl;cout请输入一段程序(以#结束):;docin.get(ch);progp+=ch;while(ch!=#);p=0;coutendl词法分析结果如下endl;cout种别编码 自身值endl;doscaner();switch(syn)case 22 : cout (syn , sum)endl; break; case -1: cout Error in rowrow!endl; break; default: cout (syn , token)endl;break;while
7、 (syn!=0);词法分析结果:语法分析代码:#include#include#includeusing namespace std;typedef struct table /分析表存储结构 char m100; table;table M100100; /定义分析表typedef struct stacknode /定义栈内元素节点 (带头结点(为空)的) char data; struct stacknode *next;stackk;void initlink(stackk *&s) /初始化新栈 s=(stackk *)malloc(sizeof(stackk); s-next=N
8、ULL;void poplink(stackk *&s) /顶元素出栈 stackk *p;char v; if(s-next!=NULL) p=s-next; v=p-data; s-next=p-next; free(p);void pushlink(stackk *&s,char x) /新 元 素 入 栈 stackk *p; p=(stackk *)malloc(sizeof(stackk); p-data=x; p-next=s-next; s-next=p;void display(stackk *s) /打印 现实显示 栈内元素 stackk *p; int i=0,j; ch
9、ar st100; p=s-next; while(p!=NULL) sti+=p-data; p=p-next; for(j=i-1;j=0;j-) printf(%c,stj); for(j=0;jnext=NULL) return 0; else return s-next-data; int find(char c,char array) /查找函数,int i;int flag=0;for(i=0;i100;i+)if(c=arrayi) flag=1;return flag;int location(char c,char array) /定位函数,指出字符所在位置int i;fo
10、r(i=0;i100;i+)if(c=arrayi) return i;void error() /出错函数定义 printf(%15c出错!n, );void analyse(char Vn,char Vt) int i,j,m,p,q,length,t,h; char w,X; char str100;opt0: scanf(%s,str); for(i=0;istrlen(str);i+) if(!find(stri,Vt) printf(输入字符串有误!请重新输入!); goto opt0; break; stackk *st; initlink(st); pushlink(st,#)
11、; pushlink(st,Vn0); /#与识别符号入栈 j=0; h=1; w=str0; printf(步骤%-12c分析栈%-24c剩余输入串%-12c所用产生式n, , , );opt1: printf(%-16d,h); /显示步骤 h+; display(st); /显示分析栈中内容 X=gettop(st); /上托栈顶符号放入X poplink(st); for(int k=0;k14+j;k+) /打印对齐格式 printf(%c, ); for(t=j;t%sn,X,str0); /显示对应的产生式 if(strcmp(str0,$)=0) goto opt1; else
12、 length=strlen(str0); /逆序进栈 for(m=length-1;m=0;m-) pushlink(st,str0m); goto opt1; int main() int i,k,n,r; char Vn100,Vt100,select; printf(对任意输入LL(1)文法的分析表,判断验证字符串是否为该文法的句子 n); printf(并能给出分析和演示过程。 n); /printf(*n);opt2: printf(请输入各终结符(#号表示结束 )Vti:n); for(i=0;i100;i+) scanf(%c,&Vti); if(Vti=#) r=i; bre
13、ak; printf(请输入非终结符个数:n); scanf(%d,&n); getchar(); for (i=0;in;i+) printf(请输入非终结符Vn%d:n,i); scanf(%c,&Vni); getchar(); printf(请输入此非终结符对应各终结符的产生式右部(null或NULL表示出错;$表示空串):n); for(k=0;kselect; switch(select) case 1: goto opt3;break; case 2: goto opt2; case 0: break; default: printf(输入错误!请重新选择:); goto opt
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 词法 分析 语法分析 程序设计 54
限制150内