首页 pl0词法分析器(C语言版)

pl0词法分析器(C语言版)

举报
开通vip

pl0词法分析器(C语言版)#include #include #include void init(); void getsym(); enum symbol { nul,ident,number,plus,minus,times,slash,oddsym,eql,neq, lss,leq,gtr,geq,lparen,rparen,comma,semicolon,period,becomes, beginsym,endsym,ifsym,thensym,whilesym,writesym,readsym,dosym,c...

pl0词法分析器(C语言版)
#include #include #include void init(); void getsym(); enum symbol { nul,ident,number,plus,minus,times,slash,oddsym,eql,neq, lss,leq,gtr,geq,lparen,rparen,comma,semicolon,period,becomes, beginsym,endsym,ifsym,thensym,whilesym,writesym,readsym,dosym,callsym, constsym,varsym,procsym,programsym, }; #define norw 14 #define al 10 #define nmax 10 char word [norw][al]; char ch; enum symbol sym; enum symbol wsym[norw]; enum symbol ssym[256]; FILE *fin,*fout; void main() { printf("please input outfile's name:\n"); //词法 分析 定性数据统计分析pdf销售业绩分析模板建筑结构震害分析销售进度分析表京东商城竞争战略分析 之后的结果要输出到的文件char outname[30],inname[30]; scanf("%s",outname); if((fout=fopen(outname,"w"))==NULL) { printf("cannot open output file!"); exit(0); } printf("please input infile's name:\n"); //需要词法分析的源程序 scanf("%s",inname); if((fin=fopen(inname,"r"))==NULL) { printf("cannot open file!\n"); exit(0); } ch=fgetc(fin); while(ch!=EOF) { getsym(); } } //读取源文件 void getsym() { long m; char id[al+1],a[al+1]; int i,k; init(); if(ch==' '||ch==10||ch==9) { ch=fgetc(fin); } else { if(ch>='a'&&ch<='z'||ch>='A'&&ch<='Z') { k=0; do { if(k='a'&&ch<='z'||ch>='0'&&ch<='9')||(ch>='A'&&ch<='Z'||ch>='0'&&ch<='9')); a[k]=0; strcpy(id,a); for(i=0;i='0'&&ch<='9') { k=0; m=0; sym=number; do { m=10*m+ch-'0'; k++; ch=getc(fin); }while(ch>='0'&&ch<='9'); if(k>=nmax) { printf(" error!数值太大!\n"); //exit(0); } printf("%d number\n",m); fprintf(fout,"%d number\n",m); } else { if(ch==':') { ch=getc(fin); if(ch=='=') { sym=becomes; printf(":= becomes\n"); fprintf(fout,":= becomes\n"); ch=fgetc(fin); } else { sym=nul; printf(": nul\n"); fprintf(fout,": nul\n"); } } { if(ch=='<') { ch=fgetc(fin); if(ch=='=') { sym=leq; printf("<= lep\n"); fprintf(fout,"<= lep\n"); ch=fgetc(fin); } else { sym=lss; printf("< lss\n"); fprintf(fout,"< lss\n"); } } else { if(ch=='>') { ch=fgetc(fin); if(ch=='=') { sym=geq; printf(">= geq\n"); fprintf(fout,">= geq\n"); ch=fgetc(fin); } else { sym=gtr; printf("> gtr\n"); fprintf(fout,"> gtr\n"); } } else { sym=ssym[ch]; if(ch=='+'){printf("+ plus\n");fprintf(fout,"+ plus\n");ch=fgetc(fin);} else if(ch=='-'){printf("- minus\n");fprintf(fout,"- minus\n");ch=fgetc(fin);} else if(ch=='*'){printf("* times\n");fprintf(fout,"* times\n");ch=fgetc(fin);} else if(ch=='/'){printf("/ slash\n");fprintf(fout,"/ slash\n");ch=fgetc(fin);} else if(ch=='('){printf("( lparen\n");fprintf(fout,"( lparen\n");ch=fgetc(fin);} else if(ch==')'){printf(") rparen\n");fprintf(fout,") rparen\n");ch=fgetc(fin);} else if(ch=='='){printf("= eql\n");fprintf(fout,"= eql\n");ch=fgetc(fin);} else if(ch==','){printf(", comma\n");fprintf(fout,", comma\n");ch=fgetc(fin);} else if(ch=='#'){printf("# neq\n");fprintf(fout,"# neq\n");ch=fgetc(fin);} else if(ch=='.'){printf(". period\n");fprintf(fout,". period\n");ch=fgetc(fin);} else if(ch==';'){printf("; semicoln\n");fprintf(fout,"; semicoln\n");ch=fgetc(fin);} else{printf("%c nul\n",ch);fprintf(fout,"%c nul\n",ch);ch=fgetc(fin);} } } } } } } } //对关键字等实现初始化 void init() { int i; for(i=0;i<=255;i++) { ssym[i]=nul; } ssym['+']=plus; ssym['-']=minus; ssym['*']=times; ssym['/']=slash; ssym['(']=lparen; ssym[')']=rparen; ssym['=']=eql; ssym[',']=comma; ssym['.']=period; ssym['#']=neq; ssym[';']=semicolon; strcpy(&(word[0][0]),"begin"); strcpy(&(word[1][0]),"call"); strcpy(&(word[2][0]),"const"); strcpy(&(word[3][0]),"do"); strcpy(&(word[4][0]),"end"); strcpy(&(word[5][0]),"if"); strcpy(&(word[6][0]),"odd"); strcpy(&(word[7][0]),"procedure"); strcpy(&(word[8][0]),"read"); strcpy(&(word[9][0]),"program"); strcpy(&(word[10][0]),"var"); strcpy(&(word[11][0]),"whlie"); strcpy(&(word[12][0]),"write"); strcpy(&(word[13][0]),"then"); wsym[0]=beginsym; wsym[1]=callsym; wsym[2]=constsym; wsym[3]=dosym; wsym[4]=endsym; wsym[5]=ifsym; wsym[6]=oddsym; wsym[7]=procsym; wsym[8]=readsym; wsym[9]=programsym; wsym[10]=varsym; wsym[11]=whilesym; wsym[12]=writesym; wsym[13]=thensym; }
本文档为【pl0词法分析器(C语言版)】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_842972
暂无简介~
格式:doc
大小:30KB
软件:Word
页数:0
分类:互联网
上传时间:2019-09-04
浏览量:19