编译原理课设

编译原理课设

ID:39528677

大小:385.06 KB

页数:31页

时间:2019-07-05

编译原理课设_第1页
编译原理课设_第2页
编译原理课设_第3页
编译原理课设_第4页
编译原理课设_第5页
资源描述:

《编译原理课设》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、编译技术课程设计班级学号姓名指导老师2015年6月第30页目录一、目的2二、题目2三、要求21.词法分析22.语法分析23.代码生成24.错误处理2四、实验环境31.开发环境:32.程序语言:3五、系统实现31.词法分析32.语法分析43.中间代码64.错误处理7六、程序运行结果81.连乘82.连加93.加乘混合94.带括号105.常数106.错误的算术表达式11七、总结12第30页一、目的<<编译技术>>是理论与实践并重的课程,而其课程设计要综合运用一、二年级所学的多门课程的内容,用来完成一个小型编译程序。

2、从而巩固和加强对词法分析、语法分析、语义分析、代码生成和报错处理等理论的认识和理解;培养学生对完整系统的独立分析和设计的能力,进一步培养学生的独立编程能力。二、题目题目1表达式的小型编译器三、要求1.词法分析产生语言的单词序列2.语法分析能识别由加+乘*括号()操作数(变量或常数)所组成的算术表达式,其文法如下:E→E+T

3、TT→T*F

4、FF→(E)

5、i使用的分析方法可以是:递归下降分析法或LR分析法。3.代码生成产生上述算术表达式的中间代码4.错误处理给出错误信息输入:算术表达式输出:符号表,常数表。归下降

6、分析法:递归调用过程/LR分析法:语义栈和符号栈四元式序列第30页四、实验环境1.开发环境:VisualStudio20132.程序语言:C++五、系统实现1.词法分析(1)单词符号表第30页(2)状态转换图(3)数据结构(4)函数说明voidgetonechar()/*从输入的算数表达式中读取一个字符*/voidconcatenation()/*将token中的字符串与character中的字符并作为token中新的字符串*/boolletter()/*判断character中的字符是否为字母的布尔函数,是

7、则返回true,否侧返回false*/booldigit()/*判断character中的字符是否为数字的布尔函数,是则返回true,否侧返回false*/voidretract()/*扫描指针回退一个字符,同时将character置为空白*/intreserve()/*将token中的字符查找保留字数组,若是保留字就返回它的种别编码,否则返回0*/voidbuildlist1()/*将标识符登录到符号表中(value2[])*/voidbuildlist2()/*将常数登录到常数表中(value1[])*/

8、voidresolve()/*词法分析的主要函数,每次识别一个单词,将种别编码放入cf[]中,填入对应的value1[]和value[]*/voidcffx()/*词法分析,读入输入的算数表达式,循环执行resolve(),第30页直到所有单词识别完毕*/2.语法分析(1)分析方法说明本程序采用LR分析法,存在4种动作:①移进:使(s,a)的下一个状态s’=ACTION[s,a]和输入符号a进栈,下一输入符号变成现行输入符号.②规约:指用某一产生式A→β进行规约,假若β的长度为γ,则规约动作是去掉栈顶的γ个栈

9、,即是状态Sm-γ变成栈顶状态,然后使(Sm-γ,A)的下一状态s’=GOTO[Sm-γ,A]和文法符号A进栈.规约的动作不改变现行输入符号,执行规约的动作意味着呈现于栈顶的符号串Xm-γ+1…Xm是一个相对于A的句柄.③接受:宣布分析成功,停止分析器工作.④报错:报告发现源程序含有错误,调用错误处理程序.(2)文法第30页(3)数据结构#include/*引入c++标准库*/stackstatus;/*状态栈*/stacksign;/*符号栈*/(4)函数说明Voidin

10、itYffx()/*语法分析初始化,状态栈放0,符号栈放#,语义栈放_*/VoidshowLR()/*遍历状态栈,符号栈,语义栈,并显示出来*/VoidyffxSolve()/*查action二维数组,进行移进,规约处理*/Voidyyfx()/*循环执行yffxSolve(),直到分析成功或出现错误*/VoidshowBlm()/*显示变量名表*/VoidshowCsb()/*显示常数表*/3.中间代码(1)属性文法①移进时:如果输入的是终结符,语义栈就移进”_”,如果是非终结符,则语义栈移进对应的常数或变

11、量名.②规约时:如果规约对应的文法是(4)E→i时语义栈不变,对应其他文法时,先pop出栈顶3个元素,再如果是(3)E→(E)文法时,语义栈push刚才出栈的第二个元素,如果是(1)E→E+E文法时,判断刚才出栈的第一个和第三个元素是否是常数,是则push两个常数的和,否则push临时变量Tn;第30页如果是(1)E→E*E文法时,判断刚才出栈的第一个和第三个元素是否是常数,是则push两个常数的积

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。