




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、编译技术课程设计班 级 软件1001 学 号 3100608024 姓 名 张建彬 指导老师 年轶 2013年 6 月目 录一、目的2二、任务及要求. 3三、实验环境 4四、实现过程说明. 51.词法分析器 5(1)单词符号表. 2(2)数据结构 5(3)函数说明 6(4)流程图. 72.语法分析器 8(1)分析方法说明 8(2)文法 8(3)数据结构.12(4)函数说明 123.中间代码生成器. 13(1)属性文法. 13(2)数据结构 13(3)函数说明. 13(4)流程图 14五、程序运行结果 15六、总结. 18一、目的<<编译技术>>是理论与实践并重的课程,而
2、其课程设计要综合运用一、二年级所学的多门课程的内容,用来完成一个小型编译程序。从而巩固和加强对词法分析、语法分析、语义分析、代码生成和报错处理等理论的认识和理解;培养学生对完整系统的独立分析和设计的能力,进一步培养学生的独立编程能力。二、任务和要求基本要求:1 词法分析器 产生下述小语言的单词序列这个小语言的所有的单词符号,以及它们的种别编码和内码值如下表:单词符号种别编码助记符内码值while1while¾if2if¾else3else¾switch4switch¾case5case¾标识符6id符号表入口地址常数7num常数表入口地址=8=
3、¾+9+¾*10*¾*11*¾-12-¾/13/¾>14relopMT>=14relopME<14relopLT<=14relopLE=14relopEQ!=14relopUEQ;15;¾,16,¾(17(LB)17)RB对于这个小语言,有几点重要的限制:首先,所有的关键字(如ifwhile等)都是“保留字”。所谓的保留字的意思是,用户不得使用它们作为自己定义的标示符。例如,下面的写法是绝对禁止的: if(5)=x 其次,由于把关键字作为保留字,故可以把关键字作为一类特殊标示符来处理。也就是
4、说,对于关键字不专设对应的转换图。但把它们(及其种别编码)预先安排在一张表格中(此表叫作保留字表)。当转换图识别出一个标识符时,就去查对这张表,确定它是否为一个关键字。再次,如果关键字、标识符和常数之间没有确定的运算符或界符作间隔,则必须至少用一个空白符作间隔(此时,空白符不再是完全没有意义的了)。例如,一个条件语句应写为 if i>0 i= 1;而绝对不要写成 ifi>0 i=1;因为对于后者,我们的分析器将无条件地将ifi看成一个标识符。这个小语言的单词符号的状态转换图,如下图:2 语法分析器 能识别由加+ 乘* 乘方 括号()操作数所组成的算术表达式,其文法如下:EE+T|T
5、TT*F|FFPF|PP(E)|i 使用的算法可以是:预测分析法;递归下降分析法;LR分析法等。3 中间代码生成器 产生上述算术表达式的中间代码(四元式序列)较高要求:1 扩充上述小语言的单词;2 增加语法分析器的功能,能识别条件语句和循环语句等;3 增加中间代码生成器的功能,能产生条件语句和循环语句等的中间代码(四元式序列)4 报错基础上增加错误信息;5 将中间代码翻译成汇编语言。三、实验环境开发环境:VC+;Visual Studio;Java开发环境语言:C;C+;C#;Java说明:课程设计可以使用任何一种语言工具,课程设计报告中请按照自己实际采用的开发工具及技术来写。四、实现过程说明
6、1.词法分析器(1)算法和数据结构描述词法分析阶段的基本任务是从以字符串表示的源程序中识别出具有独立意义的单词符号。通过DOS环境手动输入字符串序列(以$作为结束标志)作为带分析的源程序,调用词法扫描子程序将字符串以二元组的形式输出(若有不属于该语言单词符号出现,则进行出错处理),词法扫描子程序包括了对源程序的预处理(忽略、回车换行符等字符),以及对单词的识别和分类,以形成(单词种别,单词自身的值)形式的二元组。具体思路如下:首先建立关键字表,将关键字作为特殊标示符处理,把它们预先安排在char *keywords13中,将需要被识别出的关键字存入表中,当扫描程序识别出标识符时,查关键字表。如
7、能查到匹配的单词,则该单词为关键字,否则为一般标识符。在主函数中让用户输入要识别的符号串,然后将输入的符号串读入到 program500,遇$结束。再依次扫描program500中的每一个符号,调用Scan ()子函数分析每一个符号,再将分析的结果输出,也是遇$结束。(2)函数说明在Scan ()子函数中,先全部初始化,然后读一个字符,分析它是什么类型:a.如果是字母类型,则接着往下读,直到读到非字母的字符,存入words10中,依次对比关键字表中的元素,如果相同,则将flags置为相应的种别码,如果全都扫描后没发现相同的关键字,则为普通的标识符,返回主函数输出。b.如果是数字类型,首先分析第
8、一个符号,接着读下一个字符串,直到读到一个不是数字的字符串位置,每读一个数字字符,就将他们转化为相应的数字,使用辗转相乘法,每次都让number先自乘10,然后加上这个数字,这样就将字符串表示的数字转化成了相应的数,返回主函数输出。c.如果是其他单词表的符号,则将他们的flags置为相应的种别码,并将字符存到words 中返回主函数输出。主要变量说明:用words10存放构成单词符号的字符串,并且用于判断是否为关键字。flags500 存放单词符号的种别码。Number存放整数值,words存放标识符,关键字或者其他符号。cntnum按顺序存放读到的字符,为下面语义分析做准备。Status用于
9、判断是否为关键字,1是,0不是。(3)流程图2.语法分析器(1)分析方法说明 本实验采用递归下降分析法,递归下降法又称递归子程序法。在程序语言的语法定义中有许多采用递归定义。我们在对它进行语法分析时,编制的处理程序也采取递归的方式,可使其结构简单易读。但由于频繁地调用子程序大大地降低了分析速度。其主要思想: 对每个非终结符按其产生式结构写出相应语法分析子程序。因为文法递归相应子程序也递归,子程序的结构与产生式结构几乎一致。所以称此种方法称为递归子程序法或递归下降法。(2)文法 消除左递归和回溯后改造的文法: ETE E +TE| TFT T*FT |FPFFF|P(E)|i LL(1)分析表:
10、 i+*( ) # EETEETE EE +TEEE TTFTTFT TTT T FFPFFPF FF F FFPPiP(E)递归子程序代码描述如下:void e();void e1();void e2();void t();void t1();void t2();void f();void f1();void p();void e()cout<<"E->TE''"<<endl;t();e2();void e1()if(flagstemp=9)cout<<"E'->+T"<&l
11、t;endl;temp+;t();else if(flagstemp=12)cout<<"E'->-T"<<endl;temp+;t();elseis_right=0;void e2()if(flagstemp=9|flagstemp=12)cout<<"E''->E'E''"<<endl; e1(); e2(); else if (flagstemp!=0|flagstemp!=18) cout<<"E''-
12、>"<<endl; return ; elseis_right=0;void t()cout<<"T->FT''"<<endl;f();t2();void t1()if(flagstemp=10)cout<<"T'->*F"<<endl;temp+;f();else if(flagstemp=13)cout<<"T'->/F"<<endl;temp+;f();else is_right=
13、0;void t2()if(flagstemp=10|flagstemp=13)cout<<"T''->T'T''"<<endl;t1();t2();else if (flagstemp!=0|flagstemp!=18) cout<<"T''->"<<endl; return ; else is_right=0;void f()cout<<"F->PF'"<<endl;p(); f
14、1();void f1() if(flagstemp=11) cout<<"F'->F"<<endl;temp+;f(); else if (flagstemp!=0&&flagstemp!=18&&flagstemp!=9&&flagstemp!=12&&flagstemp!=10&&flagstemp!=13) cout<<"F'->"<<endl;is_right=0; void p()if(f
15、lagstemp=6|flagstemp=7)cout<<"P->i"<<endl;temp+;elseif(flagstemp=17)cout<<"P->(E)"<<endl;temp+;e();if(flagstemp=18)cout<<"P->(E)"<<endl;temp+;elseis_right=0;else is_right =0;(3)数据结构语法分析阶段的基本任务是将词法分析阶段产生的二元组作为输入,根据语言的语法规则,识别出各
16、种语法成分,并判断该单词符号序列是否是该语言的一个句子。在语法分析阶段,采用自上而下的递归下降分析法,根据递归下降分析函数编写规则来编写相应的函数,在各个函数的分析过程中调用词法分析程序中的扫描程序,发出“取下一个单词符号”的命令,以取得下一个单词符号的语法分析。词法分析和语法分析的整体设计思想可由以下图示表示: 语法分析是在词法分析的基础上加上判断是否符合语法规则的语句。语法分析的基本任务是使用词法分析的结果,使用递归下降算法分析是否符合语法规则,如果符合,则输出“分析成功”,若果不符合,则输出“分析失败”。(4)函数说明在main函数调用e()函数,如果调用之后返回时,如果(flagste
17、mp=0)&&is_right)为真,就输出“分析成功”,否则输出“分析失败”。其中is_right为设定的标志,初值为1,如果在调用子函数的过程中如果有错误,则置is_right为0。e函数: 调用t函数,调用f函数, 调用p函数,返回后看是否是+或-,如果是,则调用 e1函数,再调用e2函数,如果不是,进行出错处理,置is_right为0。e1函数:判断是不是”+”或者“-” 如果是,调用f函数,如果不是,进行出错处理,置is_right为0。t函数: 调用f函数, 调用p函数,返回后看是否是*或/,如果是,则调用t1函数,再调用t2函数,如果不是,进行出错处理,置is_r
18、ight为0。t1函数:判断是不是”*”或者“/” 如果是,调用f函数,如果不是,进行出错处理,置is_right为0。f函数:调用p函数,f1函数。f1函数:判断是不是”,如果是,调用f函数,如果不是,进行出错处理,置is_right为0。p函数: 检查是否标识符,如果是,调用f1函数,如果不是,检查是否是数值,如果是,调用f1函数,如果不是,检查是否是(,如果不是,进行出错处理,置is_right为0。如果是,调用e函数,返回后检查是否是),如果不是,进行出错处理,置is_right为0。如果是,调用f1函数,返回。3.中间代码生成器(1)属性文法 设:X.val 为文法符号 X 的值属性
19、;下述属性文法用于算术表达式的求值运算:E E1 + T ; | E.val:= E1.val + T.valE E1 - T ; | E.val:= E1.val - T.valE T ; | E.val:= T.valT T1 * F ; | T.val:= T1.val * F.valT T1 / F ; | T.val:= T1.val / F.valTT1F |T.val := T1.valF.valTF ; | T.val:= F.valF( E ) ; | F.val:= E.valF i ; | F.val:= i.val【注】可以看出: X.val 属性是综合属性。(2)数据
20、结构语义栈:四元式:注解:一个四元式是一个带有四个域的记录结构( op, arg1, arg2, result )op 运算符,arg1,arg2 运算数,result 运算结果(3)函数说明(具体过程参见源代码)Strn用来存放临时变量的序号。temp用来存放数组的下表,在主程序中语法分析结束后,置0.定义函数newtemp()用于门生一个新的临时变量的名字,具体实现时每产生一个T,就及时送到符号表中,也可以不进符号表,直接将单词值用整数码表示。定义函数siyuan(),输出一个四元式。定义函数ye() 进行中间代码生成(4)流程图主流程图如下:(5) 较高要求i. 扩充上述小语言的单词;ii. 增加语法分析器的功能,能识别条件语句和循环语句等;iii. 增加中间代码生成器的功能,能产生条件语句和循环语句等的中间代码(四元式序列)iv. 增加报错功能;v. 将中间代码翻译成汇编语言。 其中1
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 软硬件在金融中的应用试题及答案
- 2024年CFA考试的考核标准试题及答案
- CFA考试候选人策略分享与试题及答案
- 中学英语教师专业化及对高师英语专业的启示
- 2024年金融分析师考试知识重难点与试题及答案
- 潜能开发心理课件
- 投资组合的风险收益分析试题及答案
- 特许金融分析师考试的新增内容试题及答案
- 2025年辽宁省名校联盟高考英语模拟试卷(3月份)
- 【初中历史】北宋的政治课件-2024-2025学年统编版七年级历史下册
- 大型机械撤场记录表
- DB36T 1589-2022水土保持无人机监测技术规程_(高清版)
- 广中医方剂学2泻下剂
- 古代诗歌中常见的意象分类及作用
- 新职业英语-艺术设计.unit5
- 低老坏专项整治实施方案
- 正比例函数和反比例函数专项复习试题
- 园林绿化工程项目建议书范文
- 品质改善报告表
- 《消化系统核医学》PPT课件.ppt
- 金光修持法(含咒诀指印、步骤、利益说明)
评论
0/150
提交评论