编译原理课程设计报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《编译原理》
课程设计报告
姓名:熊齐超(1208060220)
姓名:刘畅(1208060221)
姓名:袁青伟(1208060222)
姓名:张文(1208060223)
班级:软件121班
专业:软件工程
指导教师:陈晓明
时间:2015/6/14
项目名称:算术表达式的语法及语义分析
贵州大学计算机科学与信息学院
目录
一、课程设计目的 (3)
二、课程设计题目描述和要求 (3)
1、算术表达式的文法的描述: (3)
2、课程设计的要求描述: (3)
3、实现的功能描述: (4)
4、分析器的使用描述 (4)
三、课程设计实现描述 (4)
1、实现平台 (4)
2、课程设计的基本思路描述 (5)
3、自顶向下与递归下降分析方法的基本原理描述 (5)
4、程序运行的最后界面 (6)
5、演示分析 (8)
四、课程设计总结 (8)
五、参考文献及小组分工 (9)
六、核心代码 (10)
一、课程设计目的
通过设计、编制、调试一个算术表达式的语法及语义分析程序,加深对语法及语义分析原理的理解,并实现词法分析程序对单词序列的词法检查和分析。加深对文法分析器的知识的掌握,掌握计算机语言的语法分析的过程。以及掌握计算机语言的语法分析程序设计与文法应用的实现方法。能够熟练运用一种分析方法,自上而下或自下而上的方法分析一个给定的文法,我使用的是自上而下的分析方法。以及通过思考以及动手制作分析器的过程来锻炼自己的编程能力和逻辑思维能力,体会计算机编译器的奥妙之处。
二、课程设计题目描述和要求
1、算术表达式的文法的描述:
〈无符号整数〉∷=〈数字〉{〈数字〉}
〈标识符〉∷=〈字母〉{〈字母〉|〈数字〉}
〈表达式〉∷=〈项〉{〈加法运算符〉〈项〉}
〈项〉∷=〈因子〉{〈乘法运算符〉〈因子〉}
〈因子〉∷=〈标志符〉|〈无符号整数〉
〈加法运算符〉∷=+|-
〈乘法运算符〉∷=*|/
〈字母〉∷= a | b | … | z
〈数字〉∷= 0 | 1 | … | 9
2、课程设计的要求描述:
1)在递归下降法、LL(1)、算符优先分析法或者LR法中选择其中一种方法完成以上任务,中间代码选用四元式。
2)编制分析程序,设计若干用例,并上机测试。
3)书写课程设计报告。
4)要求提供单步运行,让用户跟踪分析器工作的每一个步骤。
3、实现的功能描述:
1)选定一种分析方法,本分析器采用递归下降分析方法进行语法分析
2)允许用户手动输入算术表达式(每个项的长度不大于10)
3)对输入的算术表达式进行词法、语法、语义分析
4)分别对词法、语法、语义分析输出相应的执行结果
5)对语法分析可输出递归下降分析的步骤,以及相应步骤所使用的产生式,对语义分析采用自顶向下分析方法,可输出四元式表示的中间代码。
4、分析器的使用描述
对于一个给定的算术表达式,在此分析器中可直接点击词法分析按钮,得到结果如左下角的第一个显示框所示。在运行分析器的过程中,输入的是相对应于文法所能够产生的算术表达式进行分析,如果是不符合文法的输入串,那么就会提示错误信息。首先在输入表达式所对应的编辑框中输入所要分析的表达式,单击词法分析,在词法分析输出结果中可以查看算术表达式中使用的符号是否正确。之后单击语法分析按钮,在语法分析框中会出现相应的递归下降分析步骤(包括分析过程中所使用的产生式)。单击语义分析按钮,在分析结果栏中,显示以四元式表示的中间代码。分析结束时,如果所输入的算术表达式是属于该文法的,那么语法分析输出结果框中显示:“输入串是该文法的一个句子!语法分析结束”若不属于该文法,那么语法分析输出结果框中显示:“输入串不是该文法的一个句子!语法分析结束”。如果所输入的算术表达式中接有错误的字符,那么词法分析输出结果框中显示:“接错误后缀,出错”。
三、课程设计实现描述
1、实现平台
Microsoft Windows 7 / Microsoft Visual C++ 6.0
2、课程设计的基本思路描述
首先应该把用文字表示的文法改写为数学符号。(其中关于无符号整数和标识符,由于可以在词法分析的过程中给以确定,所以就不必抽象其表达式。)设:
indentifer :标识符 digit : 无符号整数
E:表达式 T:项 F:因子
则一个简单的术表达式的文法G1中包含以下产生式:
E -> E+E | E-E | E*E | E/E | (E) | indentifer | digit
为了明确运算符的优先权(括号的优先权高于乘除法,乘除法的优先权高于加减法),可改写文法G1如下:
改写后的文法G2:
E -> E+T | E-T | T
T -> T*F | T/F | F
F -> (E) | indentifer | digit
为了避免左递归的发生,可进一步将文法改成:
文法G[E]:
(1)E -> [+|-]TG
(2)G -> +TG|—TG
(3)G -> ε
(4)T -> FS
(5)S -> *FS|/FS
(6)S -> ε
(7)F -> (E)(8)F -> indentifer | digit
3、自顶向下与递归下降分析方法的基本原理描述
自顶向下分析原理:
自顶向下分析就是从文法的开始符号出发,向下推导,推出句子。分为:带“回溯”的分析方法、不带回溯的递归子程序(递归下降)分析方法。
自顶向下分析的主旨:对任何输入串,试图用一切可能的办法,从文法开始