编译原理实验报告(共14页).doc
《编译原理实验报告(共14页).doc》由会员分享,可在线阅读,更多相关《编译原理实验报告(共14页).doc(15页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上编译方法实验报告实验1:扫描器的设计一、 实验目的熟悉并实现一个扫描器(词法分析程序)。二、 实验要求(1) 设计扫描器的有限自动机(识别器);(2) 设计翻译、生成Token的算法(翻译器);(3) 编写代码并上机调试运行通过。输入源程序文件或源程序字符串;输出相应的Token序列;关键字表和界符表;符号表和常数表;三、 实验步骤流程:初始化;打开用户源程序文件; while (文件未结束) 读入一行到wi,i=0;do /处理一行,每次处理一个单词 滤空格,直到第一个非空的wi;i-;s=1; /处理一个单词开始while (s!=0) /拼单词并生成相应Toke
2、n act(s); /执行qs if (s=11 & s Then = Else = ”, ”=”, ”=”, “”, “=a & wi=0 & wi=11 & s=14) /*判断是否是终止状态 *是终止状态,则形成一个tokenbreak;i+; /getchar() *读取下一个字符 s=find(s,wi); /状态转换if (s=0)strTOKENi_str=0;printf(词法错误:%sn,strTOKEN);while (wi!=10); printf(关键字表:); /输出结果for (i=0;i30;i+)printf(%s ,keywordsi);printf(n);
3、printf(Token序列:);for (i=0;inum_token;i+)printf(%d,%d),toki.code,toki.value);printf(n);printf(符号表:);for (i=0;inum_ID;i+)printf(%s ,IDi);printf(n);printf(常数表:);for (i=0;inum_C;i+)printf(%d ,Ci);printf(n);fclose(fp);printf(Hello World!n);return 0;/*状态转换后,达到新的状态之后,记录的变化void act(int s)int code;switch (s)
4、case 1:n=0;m=0;p=0;t=0;e=1;num=0;i_str=0; strTOKENi_str=0; /其它变量初始化 break; case 2:n=10*n+wi-48; break; case 3:t=1; break; case 4:n=10*n+wi-48; m+; break; case 5:t=1; break; case 6:if (wi=-) e=-1; break; case 7:p=10*p+wi-48; break; case 8:strTOKENi_str+=wi; /将ch中的符号拼接到strTOKEN的尾部; break; case 9:strTO
5、KENi_str+=wi; /将ch中的符号拼接到strTOKEN的尾部; break;case 10:strTOKENi_str+=wi; /将ch中的符号拼接到strTOKEN的尾部; break; case 11:num=n*pow(10,e*p-m); /计算常数值 toki_token.code=2; toki_token+.value=InsertConst(num); /生成常数Token num_token+;break;case 12:strTOKENi_str=0; code=Reserve(strTOKEN); /查关键字表 if (code) toki_token.co
6、de=code; toki_token+.value=0; /生成关键字Tokenelse toki_token.code=1; toki_token+.value=InsertID(strTOKEN); /生成标识符Token num_token+;break; case 13:strTOKENi_str=0; code=Reserve(strTOKEN); /查界符表 if (code) toki_token.code=code; toki_token+.value=0; /生成界符Token else strTOKENstrlen(strTOKEN)-1=0; /单界符 i-; code
7、=Reserve(strTOKEN); /查界符表 toki_token.code=code; toki_token+.value=0; /生成界符Tokennum_token+;break; case 14:strTOKENi_str=0; code=Reserve(strTOKEN); /查界符表 toki_token.code=code; toki_token+.value=0; /生成界符Tokennum_token+;break;/*状态转换int find(int s,char ch)int i,col=7; struct map *p;p=ptr;for (i=0;istr,ch
8、)col=(p+i)-col;break;return autscol;/*向常量表中插入常量int InsertConst(double num)int i;for (i=0;inum_C;i+)if (num=Ci)return i;Ci= (int)num;num_C+;return i;int Reserve(char *str)int i;for (i=0;inum_key;i+)if (!strcmp(keywordsi,str)return (i+3);return 0;/*向符号表中插入新的符号int InsertID(char *str)int i; for (i=0;inu
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编译 原理 实验 报告 14
限制150内