编译原理-算符优先分析算法

上传人:工**** 文档编号:509123860 上传时间:2022-12-23 格式:DOC 页数:14 大小:77.01KB
返回 下载 相关 举报
编译原理-算符优先分析算法_第1页
第1页 / 共14页
编译原理-算符优先分析算法_第2页
第2页 / 共14页
编译原理-算符优先分析算法_第3页
第3页 / 共14页
编译原理-算符优先分析算法_第4页
第4页 / 共14页
编译原理-算符优先分析算法_第5页
第5页 / 共14页
点击查看更多>>
资源描述

《编译原理-算符优先分析算法》由会员分享,可在线阅读,更多相关《编译原理-算符优先分析算法(14页珍藏版)》请在金锄头文库上搜索。

1、 编译原理实验 目录编译原理实验1一 实验目的1二 实验过程12.1实验过程12.2 各种单词符号对应的种别码12.3 算符优先程序的功能2三 设计源码2四 实验结果13一 实验目的设计、编制并调试一个算符优先分析算法,加深对此分析法的理解二 实验过程2.1实验过程先在算符栈置“”,然后开始顺序扫描表达式,若读来的单词符号是操作数,这直接进操作数栈,然后继续读下一个单词符号。分析过程从头开始,并重复进行;若读来的是运算符2 则将当前处于运算符栈顶的运算符1的入栈优先数f与2的比较优先函数g进行比较。2.2 各种单词符号对应的种别码单词符号种别码单词符号种别码Main1*17Int2/18Cha

2、r3=39if4!=40else523while7=37letter(letter digit)*10=21digit digit*20;34=14(26+15)27-16等等2.3 算符优先程序的功能 完成一个交互式面向对象的算符优先分析程序,而一个交互式面向对象的算符优先分析程序基本功能是:(1) 输入文法规则(2) 对文法进行转换(3) 生成每个非终结符的FirstVT和LastVT(4) 生成算符优先分析表(5) 再输入文法符号(6) 生成移进规约步骤三 设计源码算符优先分析器#include stdio.h#include stdlib.h#include iostream.hcha

3、r data2020; /算符优先关系char s100; /模拟符号栈s char lable20; /文法终极符集char input100; /文法输入符号串char string2010; /用于输入串的分析int k; char a; int j; char q; int r; /文法规则个数int r1; int m,n,N; /转化后文法规则个数char st1030; /用来存储文法规则char first1010; /文法非终结符FIRSTVT集char last1010; /文法非终结符LASTVT集int fflag10=0; /标志第i个非终结符的FIRSTVT集是否已

4、求出int lflag10=0; /标志第i个非终结符的LASTVT集是否已求出int deal(); /对输入串的分析int zhongjie(char c); /判断字符c是否是终极符int xiabiao(char c); /求字符c在算符优先关系表中的下标void out(int j,int k,char *s); /打印s栈void firstvt(char c); /求非终结符c的FIRSTVT集void lastvt(char c); /求非终结符c的LASTVT集void table(); /创建文法优先关系表void main()int i,j,k=0; printf(请输入

5、文法规则数:);scanf(%d,&r);printf(请输入文法规则:n);for(i=0;ir;i+)scanf(%s,sti); /存储文法规则,初始化FIRSTVT集和LASTVT集*/ firsti0=0; /*firsti0和lasti0分别表示sti0非终极符的FIRSTVT集和LASTVT集中元素的个数*/lasti0=0;for(i=0;ir;i+) /判断文法是否合法for(j=0;stij!=0;j+)if(sti0Z)printf(不是算符文法!n); exit(-1);if(stij=A&stij=A&stij+1=Z)printf(不是算符文法!n); exit(-

6、1); for(i=0;ir;i+)for(j=0;stij!=0;j+)if(stijZ)&stij!=-&stij!=&stij!=|)lablek+=stij;lablek=#;lablek+1=0; table();printf(每个非终结符的FIRSTVT集为:n); /输出每个非终结符的FIRSTVT集for(i=0;ir;i+)printf(%c: ,sti0);for(j=0;jfirsti0;j+)printf(%c ,firstij+1);printf(n);printf(每个非终结符的LASTVT集为:n); /输出每个非终结符的LASTVT集for(i=0;ir;i+)

7、printf(%c: ,sti0);for(j=0;jlasti0;j+)printf(%c ,lastij+1);printf(n);printf(算符优先分析表如下:n);for(i=0;lablei!=0;i+) printf(t%c,lablei);printf(n); for(i=0;ik+1;i+)printf(%ct,lablei);for(j=0;jk+1;j+)printf(%ct,dataij);printf(n);printf(请输入文法输入符号串以#结束:);scanf(%s,input); deal();void table()char text2010;int i,

8、j,k,t,l,x=0,y=0;int m,n;x=0;for(i=0;ir;i+)firstvt(sti0);lastvt(sti0);for(i=0;i;elsetextxy=stij;y+;textxy=0;x+;y=0;r1=x;printf(转化后的文法为:n);for(i=0;ix;i+) printf(%sn,texti);for(i=0;ix;i+) stringi0=texti0;for(j=3,l=1;textij!=0;j+,l+)stringil=textij;stringil=0;for(i=0;ix;i+)for(j=1;textij+1!=0;j+)if(zhongjie(textij)&zhongjie(textij+1)m=xiabiao(textij);n=xiabiao(textij+1);datamn=;if(textij+2!=0&zhongjie(textij)&zhongjie(textij+2)&!zhongjie(textij+1)m=xiabiao(textij);n=xiabiao(textij+2);datamn=;if(zhongjie(textij)&!zhongj

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 机械/制造/汽车 > 汽车技术

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