语法分析器源代码

语法分析器源代码

ID:11187270

大小:104.00 KB

页数:17页

时间:2018-07-10

语法分析器源代码_第1页
语法分析器源代码_第2页
语法分析器源代码_第3页
语法分析器源代码_第4页
语法分析器源代码_第5页
资源描述:

《语法分析器源代码》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、#include#include#include#defineHIGHER1#defineLOWER-1#defineEQUAL0#defineTRUE1#defineFALSE0#defineOPER_NUM50//默认算符数目#defineVN_NUM50//默认非终结符数目#defineMAX_BUFFER128//每行输入行最大长度#defineMAX_GRA_NUM20//最大文法数目#defineEMPTY-2//算符优先表初始值,表示这对算符没有优先关系#defineSTACK_SIZE64

2、typedefstruct{charc;//非终极符符号intfirstvt[OPER_NUM];//firstvt集,保存算符在oper_list中的下标intfir_n,last_n;intlastvt[OPER_NUM];}vn_t;intprior_table[OPER_NUM][OPER_NUM];charoper_list[OPER_NUM];intoper_num=0;vn_tvn_list[VN_NUM];intvn_num=0;char*grammar[MAX_GRA_NUM][2];intgra_num=0;charstart_vn;char

3、stack[STACK_SIZE];inttop=0;voidget_input(char*buf);intbuf_deal(char*buf);voidget_FIRVT_LASTVT(intvn_n);intcreate_table();voidinit_table();intanalyze(char*sentence);voiddisplay_table();voiddisplay_fir_lastvt();intget_oper(charc);//得到算符c的数组下标没有返回-1intget_vn(charc);//得到非终结符c的数组下标,没有返回-1

4、intis_vn(chara){return(('A'<=a&&a<='Z')?1:0);}intget_oper(charc){inti;for(i=0;i

5、,ti,cn=0;intsame;tar=(char*)malloc(sizeof(char)*MAX_BUFFER);if(!tar){printf("Allocationfails.");exit(-1);}for(i=start;i<=end;++i)//将此最左素短语的终结符存入tar字符串{if(!is_vn(stack[i]))tar[j++]=stack[i];}tar[j++]='';for(i=0;i

6、];while(t1!=''){if(t2==''&&!is_vn(t1)){same=FALSE;break;}if(!is_vn(t1)){if(t1!=t2){same=FALSE;break;}t2=tar[++ti];same=TRUE;}t1=g[++gi];}if(same&&t2=='')break;}if(i==gra_num){printf("无法找到相应文法!");returnFALSE;}left=grammar[i][0][0];returnvn_list[get_vn(left)].c;}intanalyze(char

7、*sentence){charr,c,new_vn;inti=0,k=0,j,pi,printi=1,cou=1;//i是sentence[]和stack[]的索引intr_index,s_index,pre_index;printf("规约过程如下表所示:");printf("--------------------------------------");stack[top++]='#';printf("序号t符号栈t最左素短语t规约t");do{r=sentence[i++];if((r_index=get_oper(r))==

8、-1){printf("

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。