还剩8页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
编译原理课程实验报告实验题目某种简单程序语言的词法分析器的设计与实现专业计算机科学与技术班级11060341学号11060341姓名int al=0,a2=0,a3=0,a4=0,a5=0;forint i=O;ivk;i++ifword[i].kind=1al++;else ifword[i].kind==2a2++;else ifword[i].kind==3a3++;else ifword[i].kind==4a4++;else ifword[i].kind=5a5++;printf标识符%d\n常量%d\n关键字%d\n界符%d\n运算符%d\nM,al,a2,a3,a4,a5;return0;运行结果实验目的设计一个词法分析程序,理解词法分析器实现的原理,掌握程序设计语言中的各类单词的词法分析方法,加深对词法分析原理的理解实验任务词法分析是从左向右扫描每行源程序的符号,拼成单词,换成统一的二元式(单词种别,单词符号的属性值)表示对给定的程序通过词法分析器识别一个个单词符号,并以二元式(单词种别,单词符号的属性值)显示,本程序那么是通过对给定程序段分析后以单词符号和文字提示显示)实验流程程序清单#includeiostream#includecstdio#includecstringusing namespacestd;int k=0;struct wordchar name
[10];int kind;}word
[1000];char key
[35]
[10]={nscanfV,short\,4nt\nlong,,;,float,V,double,V,charn;,struct,V,unionH,nprintf\ntypedef\nconstn,unsigned0,nsigned,,,nextern,,,nregister,\nstatic,\,\olatile^\oid\nifVelse^^witch^,case^,,forn;,do,,;,while,,;goton,,continue\,break,,,,,,defaultn,,,sizeof,nreturnn,ninclude Vboor,;bool cmpchar a[]int i;forint k=0;k35;k++ifstrcmpa,key[k]=O return1;return0;int main#ifdef LOCALfreopennin.txtn,nrH,stdin;freopennout.txtH,,,w\stdout;#endifint p,q,flag;chara
[1000],b
[10],ch;whilegetsa;p=0int len=strlena;whileplench=a[p];memsetb,0,sizeofb;,whilech=;P++ch=a[p];}ifch=ach=z||ch=Ach=Z||chDflag=O;q=0;,whilech=,a,ch=,z,||ch=,A,ch=,Z,||ch==t_llch=,0,ch=9,ifch=0ch=9||ch==]flag=l;b[q++]=ch;;P++ch=a[p];ifflag==l strcpyword[k].name,b;word[k++].kind=1;}else ifflag==Oif ch=\||ch==strcpyword|k].name,b;word|k++].kind=2;else ifcmpb==lstrcpyword|k].name,b;word[k++].kind=3;elsestrcpy word[k].name,b;word[k++].kind=l;else ifch=0ch=9||ch==-{int t=p-l;ifa[t]=Va[t]=9,||a[t]=a,a[t]=,z,||a[t]=,Aa[t]=,Z,p++;ch=a[p];ifch==-||ch==-*;b[01b[l]=ch;strcpyword[k].name,b;word[k++].kind=5;ch=a[++p];else;b[01strcpyword[k].name,b;word|k+4-|.kind=5;elseq=0;b[q++]=ch;;P++ch=a[p];whilech=Och=9||ch=Y;b[q++]=ch;P++ch=a[p];strcpy word|k].name,b;word[k++].kind=2;else,if ch=W|ch=||ch=T||ch=Tllch={||ch=T||ch=J|ch=;||ch=:||ch==\||ch=ch=’|[ch==||ch=TI|ch=TI|ch=T||ch=}||b[O]=ch;strcpyword[k].name,b;word|k++].kind=4;ch=a[++p];,,else ifch==%||ch==A b[O]=ch;strcpyword[k].name,b;word[k++].kind=5;ch=a[++p];else ifch==,+,;P++ch=a[p];ifch==,+,||ch==-1;b
[0]±4b[l]=ch;strcpy word[k].name,b;word[k++].kind=5;;ch=a[++p]}else;b
[0]=+strcpyword[k|.name,b;word[k++].kind=5;else ifch==*1;P++ch=a[p];ifch==*||ch===b
[0]=*;b[l]=ch;strcpyword[k].name,b;word[k++].kind=5;ch=a[++p];elseb
[0]=*;strcpyword[k].name,b;word[k++].kind=5;else ifch==7,;P++ch=a[p];ifch==7*||ch==,=,b
[0]=7;b[l]=ch;strcpyword[k].name,b;word[k++].kind=5;ch=a[++p];elseb
[0]=7;strcpyword[k].name,b;word[k++].kind=5;else ifch==-*;P++ch=a[p];ifch=-1b[O]=b[l]==\strcpy word[k].name,b;word[k++].kind=5;ch=a[++p];else;b
[0]==strcpyword[k].name,b;word[k++].kind=5;〉else ifch==p++;ch=a[p];ifch=-*11^==,=,『b
[0]=b[l]=ch;strcpy word[k].name,b;word[k++].kind=5;ch=a[++p];else;b
[0]=strcpyword[k].name,b;word[k++].kind=5;else ifch==,;p++ch=a[p];ifch=-,||ch==-t;b
[0]=vb[l]=ch;strcpyword[k].name,b;word[k++].kind=5;ch=a[++p];else尸;b[0strcpy word[k].name,b;word[k++].kind=5;else ifch==!*p++;ch=a[p];ifch==,=,{b[O]=T;;b[l]=~strcpyword[k].name,b;word[k++].kind=5;ch=a[++p];elseb
[0]=T;strcpyword[k].name,b;word[k++].kind=5;else ifch==,,;P++ch=a[p];ifch==,,b[O]=b[l]=,;strcpyword[k].name,b;word[k++].kind=5;ch=a[++p];elseb
[0]=,;strcpyword[k].name,b;word[k++].kind=5;}else ifch==Tp++;ch=a[p];if ch=Tb[O]=b[l]=T;strcpy word[k].name,b;word[k++].kind=5;ch=a[++p];;else{b[O]=T strcpyword[k].name,b;word[k++].kind=5;}forint i=0;ik;i++{switchword[i].kind标识符printf J;break;常量printf J;break;关键字printf J;break;界符printf J;break;运算符printf J;break;printfM%s\nn,word[i].name;。