编译原理标准实验报告(共26页).doc
《编译原理标准实验报告(共26页).doc》由会员分享,可在线阅读,更多相关《编译原理标准实验报告(共26页).doc(26页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上电 子 科 技 大 学实 验 报 告学生姓名: 学 号: 指导教师:实验地点: 实验时间:一、实验室名称:计算机学院软件工程实验室二、实验项目名称:词法分析器的设计与实现三、实验学时:4学时四、实验原理 1.编译程序要求对高级语言编写的源程序进行分析和合成,生成目标程序。词法分析是对源程序进行的首次分析,实现词法分析的程序为词法分析程序。2. 词法分析的功能是从左到右逐个地扫描源程序字符串,按照词法规则识别出单词符号作为输出,对识别过程中发现的词法错误,输出相关信息。3. 状态转换图是有限有向图,是设计词法分析器的有效工具。五、 实验目的 通过设计词法分析器的实验,使
2、同学们了解和掌握词法分析程序设计的原理及相应的程序设计方法,同时提高编程能力。六、 实验内容 实现求n!的极小语言的词法分析程序,返回二元式作为输出。七、实验器材(设备、元器件)1. 操作系统:Windows XP2. 开发工具:VC6.03. 普通PC即可八、 实验步骤 (1)启动VC6.0,创建空白工程项目。选择菜单中的“文件”-“新建”-“项目”,在弹出的对话框中,左边的“项目类型”框中,选择“Visual C+ 项目”,在右边框中,选择“空项目(.Net)”,在对话框下边,选择工程文件存放目录及输入名称,如Example1,单击“确定”。(2)建立相应的单词符号与种别对照表;(3)根据
3、状态转换图编写相应的处理函数;(4)完成词法分析器;(5)编译与调试以上程序;(6)生成相应的*.dyd文件,作为后面语法分析的输入文件。九、 实验数据及结果分析 可以对源程序进行词法分析,如果有错给出出错信息和所在行数,如果无错则生成二元式文件。十、 实验结论 本实验程序较好地完成了词法分析程序的设计与实现,能够对所给文法的程序进行词法分析,在没有词法错误的时候生成相应的二元式文件。该实验程序可一次性给出源程序中的词法错误。十一、总结及心得体会 通过该实验,对词法分析程序的设计,以及运用C语言进行编程有了更深刻的理解,同时加深了自己对词法分析程序的原理的理解与掌握,提高了自己的动手能力。十二
4、、对本实验过程及方法、手段的改进建议程序设计合理,代码可进一步优化。 报告评分:指导教师签字:本实验参考源代码如下:#include #include #include using namespace std;char ch,cache;bool retracted,ended;int num,cur_line;string token;void clear_output()freopen(example.dyd,w,stdout);fclose(stdout);freopen(LexAnalyze.err,w,stdout);fclose(stdout);struct pair_valstr
5、ing s;int val;void getnbc()if (retracted)ch=cache;retracted=false;else ch=getchar();while (ch= |ch=n)if (ch=n)printf(%16s 24n,EOLN);cur_line+;ch=getchar();void concat()token+=ch;bool letter()if (ch=A&ch=a&ch=0&ch=9) return true;return false;void retract()retracted=true;cache=ch;int reserve()if (toke
6、n=begin) return 1; if (token=end) return 2; if (token=integer) return 3;if (token=if) return 4;if (token=then) return 5;if (token=else) return 6;if (token=function) return 7;if (token=read) return 8;if (token=write) return 9;return 0;void return_val(pair_val v)freopen(example.dyd,a+,stdout);while (v
7、.s.length()16) v.s= +v.s;coutv.s ;printf(%2dn,v.val);if (!(retracted&cache!= &cache!=n)getnbc();if (ch=EOF)printf(%16s 25n,EOF);ended=true;retract();fclose(stdout);void error(int type)freopen(LexAnalyze.err,a+,stdout);printf(*LINE%d: ,cur_line);if (type=0) printf(illegal operatorn);else printf(unkno
8、wn charactern);fclose(stdout);void LexAnalyze()pair_val ret;token=;getnbc();switch(ch) case a: case b: case c: case d: case e: case f: case g: case h: case i: case j: case k: case l: case m: case n: case o: case p: case q: case r: case s: case t: case u: case v: case w: case x: case y: case z: case
9、A: case B: case C: case D: case E: case F: case G: case H: case I: case J: case K: case L: case M: case N: case O: case P: case Q: case R: case S: case T: case U: case V: case W: case X: case Y: case Z:while (letter()|digit()concat();ch=getchar();retract();num=reserve();if (num!=0)ret.s=token;ret.va
10、l=num;return_val(ret);elseret.s=token;ret.val=10;return_val(ret);break;case 0:case 1:case 2:case 3:case 4:case 5:case 6:case 7:case 8:case 9:while (digit()concat();ch=getchar();retract();ret.s=token;ret.val=11;return_val(ret);break;case =:ret.s=;ret.val=12;return_val(ret);case )ret.s=;ret.val=13;ret
11、urn_val(ret);else if (ch=)ret.s=;ret.val=14;return_val(ret);elseretract();ret.s=:ch=getchar();if (ch=)ret.s=;ret.val=16;return_val(ret);elseretract();ret.s=;ret.val=17;return_val(ret);break;case -:ret.s=-;ret.val=18;return_val(ret);break;case *:ret.s=*;ret.val=19;return_val(ret);break;case :ch=getch
12、ar();if (ch=)ret.s=:=;ret.val=20;return_val(ret);else error(0);break;case (:ret.s=(;ret.val=21;return_val(ret);break;case ):ret.s=);ret.val=22;return_val(ret);break;case ;:ret.s=;ret.val=23;return_val(ret);break;default:error(1);int main()freopen(example.pas,r,stdin);clear_output();retracted=ended=f
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编译 原理 标准 实验 报告 26
限制150内