资源描述:
《实验一 词法分析》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、实验一词法分析本节进行词法分析程序的编程与调试。1.实验要求(1)从源程序文件中读取有效字符和并将其转换成二元组内部表示形式输出。(2)掌握词法分析的实现方法。(3)实验时间4学时。(4)实验完成后,要上交实验报告(包括源程序清单)。2.实验内容2.1主程序设计考虑:主程序的说明部分为各种表格和变量安排空间(关键字和特殊符号表)。id和ci数组分别存放标识符和常数;还有一些为造表填表设置的变量。主程序的工作部分建议设计成便于调试的循环结构。每个循环处理一个单词;接收键盘上送来的一个单词;调用词法分析过程
2、;输出每个单词的内部码(种别编码,属性值)。2.2词法分析过程考虑该过程根据输入单词的第一个有效字符(有时还需读第二个字符),判断单词种别,产生种别编码。对于标识符和常数,需分别与标识符表和常数表中已登记的元素相比较,如表中已有该元素,则记录其在表中的位置,如未出现过,将标识符按顺序填入数组id中,将常数存入数组中ci中,并记录其在表中的位置。注:所有识别出的单词都用二元组表示。第一个表示单词的种别编码。例如:关键字的t=1;标识符的t=2;常数t=3;运算符t=4;界符t=5。第二个为该单词在各自表中
3、的指针或内部码值(常数表和标识符表是在编译过程中建立起来的。其i值是根据它们在源程序中出现的顺序确定的)。关键字和特殊符号如下:单词代码12345678910名字intcharfloatvoidconstifelsedowhilescanf单词代码11121314151617181920名字printfreturnmainread+–*/%=单词代码21222324252627282930名字==><!=>=<=&&
4、
5、!<>5单词代码31323334353637383940名字(){};,“‘++--
6、将词法分析程序设计成独立一遍扫描源程序的结构。其主流程图如下:图1词法分析程序流程图三.程序代码#include#includevoidmain(){charaa[50];staticcharid[100][50],ci[100][20];charaa1[30][20]={"int","char","float","void","const","if","else","do","while","scanf","printf","return","main","
7、read"};5id[0][0]=' ';ci[0][0]=' ';charaa4[30][20]={"+","-","*","/","%","=","==",">","<","!=",">=","<=","&&","
8、
9、","!","<>","++","--"};charaa5[30][20]={"(",")","{","}",";",",",",","'"};cout<<"想要退出,请输esc"<>aa;while(s
10、trcmp("esc",aa)!=0){cin>>aa;if(aa[0]>='A'&&aa[0]<='z'){inti,m,j;for(i=0;i<14;i++){if((strcmp(aa1[i],aa)==0)){cout<<"种别编码:t=1,内部编码:i="<=14){for(i=0;i<100;i++){if(id[i][0]==' '){m=i;break;}}for(i=0;i11、cout<<"种别编码:t=2,内部编码:i="<=m){strcpy(id[m],aa);id[m+1][0]=' ';cout<<"种别编码:t=2,内部编码:i="<='0'&&aa[0]<='9'){inti,n;for(i=0;i<100;i++)5{if(ci[i][0]==' '){n=i;break;}}for(i=0;i12、<"种别编码:t=3,内部编码:i="<=n){strcpy(ci[n],aa);ci[n+1][0]=' ';cout<<"种别编码:t=3,内部编码:i="<