ImageVerifierCode 换一换
格式:DOCX , 页数:53 ,大小:33.41KB ,
资源ID:17306495      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/17306495.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(编译原理实验采用C 模式编程程序清单及运行结果文档格式.docx)为本站会员(b****4)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

编译原理实验采用C 模式编程程序清单及运行结果文档格式.docx

1、continue,3,do, 4,double, 5,else, 6,extern, 7,float, 8,for, 9,int, 10,if, 11,long, 12,short, 13,static, 14,switch, 15,void, 16,while, 17, bool, 18,false, 19,true, 20,sizeof, 21,FILE, 22,case, 23,default,24,return, 25;FILE *fp=NULL,*fpp;char str_charMaxlength;/字符数组str_char,用来依次存放一个单词词文中的各个字符char *err=

2、该字符未定义!nint strlength=sizeof keytab/sizeof keytab0;/计算keytable数组中的元素数量int comp(const void *a,const void *b);/qsort排序int compare_b(const void *a,const void *b);/besearch查找关键字表void integer(int n);void decimal(double m);void main() int ch; int i; /str_chari:max(i)=Maxlength double f; long n; keyword *f

3、lag;/判断搜索函数是否成功返回 int countid=70;/关键字的类别码已给出,而标识符类别码统一一码 int countnum=80;/整型数类别码统一一码 char *filename; fpp=fopen(schu.txt,w); filename=(char *)malloc(FILE_NAME_MAX); printf(请输入文件的名字: while(1) scanf(%s,filename); if(fopen(filename,r)!=NULL) break; printf(源文件打开失败,请再试一次!nn请输入文件的名字: fprintf(fpp,tt30n=tt31

4、ntt33n=tt34n=tt35n(tt36n)tt37n*tt38n:=tt40n+tt41n-tt42n?tt43n*tt39 n/tt46n,tt44ntt45n:tt47nn for(i=0;istrlength;i+) if(keytabi.value=3) fprintf(fpp,%st%dn,keytabi.word,keytabi.value); else%stt%dnnn while(ch=fgetc(fp)!=EOF) fputc(ch,fpp); fp=fopen(filename, qsort(keytab+1,strlength,sizeof(keyword),co

5、mp);= EOF) if(isspace(ch) /如果是一个空白字符 continue; else if(isalpha(ch) /它必须是一个标识符 str_char0=ch; ch=fgetc(fp); i=1; while(isalnum(ch) /一个字母数字字符 str_chari=ch; i+; ch=fgetc(fp); if(ivalue,str_char); else /是一个标识符 ,str_char,countid,str_char); else fprintf(fpp,err); else if(isdigit(ch) str_char0=ch; ch=fgetc(

6、fp); i=1; while(isdigit(ch)|ch=.) str_chari=ch; i+; if(iMaxlength) if(0=str_char0&str_char1!)%st(%s)nInvalid num,str_char);/0是第一个数字 %st(%d,str_char,countnum); f=(double)atof(str_char); if(f1e-9) fprintf(fpp,. decimal(f-n);)n else fprintf(fpp, switch(ch) case ch=fgetc(fp); if(ch=) =,LE, else if(ch=,N

7、E, else fseek(fp,-1,SEEK_CUR);%ct(%d,%c)n,LT, break; case ) fprintf(fpp,AS,CO,GE,GT, case ,EQ, break;,BH,CA,LB,RB,-,MI,+) fprintf(fpp,+,DPS,PS, *,DMU,MU,/,DI, default:( %c )还未定义!,ch);break; fclose(fp); fclose(fpp);tt程序结果以输出到源程序所在位置,输出文件名:schu.txt!int comp(const void *a,const void *b) return strcmp(

8、(keyword*)a)-word, (keyword*)b)-word);int compare_b(const void *a,const void *b) return strcmp(char*)a, (keyword*)b)-void integer(int n) if(n integer(n/NUM);%d,n%NUM);void decimal(double m) static int t=0; if(m0&t=16) m*=NUM; t+;,(long)m); decimal(m-(long)m);实验结果: 30= 31= 32 33= 34= 35( 36) 37* 38=

9、40+ 41- 42 43* 39 / 46, 44 45 47break 1char 2continue 3do 4double 5else 6extern 7float 8for 9int 10if 11long 12short 13static 14switch 15void 16while 17bool 18false 19true 20sizeof 21FILE 22case 23default 24return 25int i,j,n;double sum;n=10.5,mn=20,mm=0123;sum=0.5;for(i=0;=n;i+=1)if(sum0.2)j+;int (

10、10,int)i (70,i), (44,)j (70,j)n (70,n) (45,;double (5,double)sum (70,sum)= (35,=)10.5 (80,1010.1)mn (70,mn)20 (80,10100)mm (70,mm)Invalid num (0123)0.5 (80,0.1)for (9,for)( (36,()0 (80,0)= (31,=)+ (41,+)1 (80,1) (37,)( )还未定义!if (11,if) (30,0.2 (80,0.001100110011001)+ (48,+)( )还未定义!#include#define ma

11、x 50int count=0,L_End=0,flag=1,ll=1,Mmaxmax;char Start,Endmax,N_Endmax,Allmax,leftmax,rightmaxmax;char firstmaxmax,followmaxmax,first_smaxmax,selectmaxmax;int flag_firstmax,flag_followmax;char Emptymax,p_dedmax,TEMPmax,Follow_toolmax,choose;FILE *fpp;int Search(char c,char *p);char GetEnd();void Rec

12、ur(char *point);void N_recur(char *point);char Get_grammer(char *t,char *n);void Merge(char *d,char *s,int type);void Zhjtchu_k(char c);int Q_Zhjtchu_k(char c);int Judge_grammer();void FIRST_S(int i); void FIRST(int i,char *p); void FOLLOW(int i); int Judge_LL(); void Gzao_tab();void syntax(); bool

13、IsN_End(char a);bool Judge(char a,char *str);void MakeN_Endtab(char tempmax,int number);void MakeEndtab(char tempmax,int number);void menu(); int i,j;=NULL) break; freopen(filename,stdin); Start=Get_grammer(End,N_End);nn:表示为nn无左递归和回溯的文法数目:%d,分别是:,count);count;i+) printf(n%d:t%c%s,i+1,lefti,righti);n

14、开始字符:%c,Start); strcpy(All,N_End); strcat(All,End);nn该文法中所有字符:,All);n非终结字符:,N_End);n终结字符:%sn,End);nright:%s ,righti);nleft:%c ,lefti); if(flag=1) flag=Judge_grammer();nflag=%d,flag); if(flag=1),文法有效! ll=Judge_LL(); if(ll=1)printf(nLL=%d,该文法是一个LL1文法!nnt预测分析表为:,ll); if(ll=0)printf(nLL=%d,该文法不是一个LL1文法!

15、 else Gzao_tab(); printf(nt| for(i=0;=strlen(End); %ct,Endi);n_|strlen(End);_strlen(N_End); printf(%ct|,N_Endi); for(j=0;j=0) printf(%c%st ,N_Endi,rightMij); elseerrort printf( menu();char Get_grammer(char *E_str,char *N_str)/读入一个文法 char s,pmaxmax; int i,j,k;请输入文法产生式的条数:,&i);%dn,i); getchar();请输入文法的开始符号: scanf(s);%cn,s); for(j=1;=i;j+)请输入文法的第%d条(共%d条)产生式:,j,i);,pj-1); for(j=0;i; if(pj1!|pj2!n输入错误! flag=0; return /检测输入错误 MakeN_Endtab(p,i);/存储非终结字符 MakeEndtab(p,i);/存储终结字符

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1