编译原理C语言LL1代码

上传人:宝路 文档编号:22287853 上传时间:2017-11-26 格式:DOCX 页数:26 大小:39.63KB
返回 下载 相关 举报
编译原理C语言LL1代码_第1页
第1页 / 共26页
编译原理C语言LL1代码_第2页
第2页 / 共26页
编译原理C语言LL1代码_第3页
第3页 / 共26页
编译原理C语言LL1代码_第4页
第4页 / 共26页
编译原理C语言LL1代码_第5页
第5页 / 共26页
点击查看更多>>
资源描述

《编译原理C语言LL1代码》由会员分享,可在线阅读,更多相关《编译原理C语言LL1代码(26页珍藏版)》请在金锄头文库上搜索。

1、/*/#include#include#include/*/int count=0; /*分解的产生式的个数*/int number; /*所有终结符和非终结符的总数*/char start; /*开始符号*/char termin50; /*终结符号*/char non_ter50; /*非终结符号*/char v50; /*所有符号*/char left50; /*左部*/char right5050; /*右部*/char first5050,follow5050; /*各产生式右部的FIRST和左部的FOLLOW集合*/char first15050; /*所有单个符号的FIRST集合

2、*/char select5050; /*各单个产生式的SELECT集合*/char f50,F50; /*记录各符号的FIRST和FOLLOW是否已求过*/char empty20; /*记录可直接推出的符号*/char TEMP50; /*求FOLLOW时存放某一符号串的 FIRST集合*/int validity=1; /*表示输入文法是否有效*/int ll=1; /*表示输入文法是否为LL(1)文法*/int M2020; /*分析表*/char choose; /*用户输入时使用*/char empt20; /*求_emp()时使用*/char fo20; /*求FOLLOW集合时

3、使用*/*判断一个字符是否在指定字符串中*/int in(char c,char *p)int i;if(strlen(p)=0)return(0);for(i=0;i+)if(pi=c)return(1); /*若在,返回*/if(i=strlen(p)return(0); /*若不在,返回*/*得到一个不是非终结符的符号*/char c()char c=A;while(in(c,non_ter)=1)c+;return(c);/*分解含有左递归的产生式*/void recur(char *point) /*完整的产生式在point 中*/int j,m=0,n=3,k;char temp2

4、0,ch;ch=c(); /*得到一个非终结符*/k=strlen(non_ter);non_terk=ch;non_terk+1=0;for(j=0;j) printf(ninput error!);validity=0;return(0); /*检测输入错误 */for(k=0;k=0)firsti0=;firsti1=0;elseTEMP0=;TEMP1=0;elsefor(j=0;j+)if(vj=p0)break;if(i=0)memcpy(firsti,first1j,strlen(first1j);firstistrlen(first1j)=0;elsememcpy(TEMP,f

5、irst1j,strlen(first1j);TEMPstrlen(first1j)=0;else /*如果右部为符号串*/for(j=0;j+)if(vj=p0)break;if(i=0)merge(firsti,first1j,2);elsemerge(TEMP,first1j,2);for(k=0;k=0)merge(firsti,first1m,2);elsemerge(TEMP,first1m,2);else if(_emp(pk)=1&k=length-1)temp0=;temp1=0;if(i=0)merge(firsti,temp,1); elsemerge(TEMP,temp

6、,1);else if(_emp(pk)=0)break;/*求各产生式左部的FOLLOW*/void FOLLOW(int i)int j,k,m,n,result=1;char c,temp20;c=non_teri; /*c为待求的非终结符*/temp0=c;temp1=0;merge(fo,temp,1);if(c=start) /*若为开始符号*/temp0=#;temp1=0;merge(followi,temp,1);for(j=0;j=0;n-)Sp+=rightmn;Sq+strlen(rightm)=0;printf(nS:%s str:,S);for(p=j;p=0)printf(M%d%d=%d ,i,j,Mij);printf(n);menu();

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

当前位置:首页 > 办公文档 > 其它办公文档

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