学 院: 信息工程学院
姓 名: 李 孟 洪
班 级: 计科0601
学 号: 061106115
指导教师: 陈 宏 建
完成时间: 2009.6.11
分数 | |
教师签名 | |
一、课程设计的目的
编译原理课程兼有很强的理论性和实践性,是计算机专业的一门非常重要的专业基础课程,它在系统软件中占有十分重要的地位,是计算机专业学生的一门主修课。为了让学生能够更好地掌握编译原理的基本理论和编译程序构造的基本方法和技巧,融会贯通本课程所学专业理论知识,提高他们的软件设计能力,特设定该课程的课程设计,通过设计一个简单的PASCAL语言(EL语言)的编译程序,提高学生设计程序的能力,加深对编译理论知识的理解与应用。
二、课程设计的任务
课程设计是一项综合性实践环节,是对平时实验的一个补充,课程设计内容包括课程的主要理论知识,但由于编译的知识量较复杂而且综合性较强,因而对一个完整的编译程序不适合平时实验。通过课程设计可以达到综合设计编译程序的目的。本课程的课程设计要求学生编写一个完整的编译程序,包括词法分析器、语法分析器以及实现对简单程序设计语言中的逻辑运算表达式、算术运算表达式、赋值语句、IF语句、While语句以及do…while语句进行编译,并生成中间代码和直接生汇编指令的代码生成器。
三、课程设计方案
编译器设计的编译程序涉及到编译中的四个阶段,它们的基本知识点如下:
1) 词法分析程序的功能是输入源程序,输出单词符号。词法分析程序将依据语言词法规则,分析由字符组成的源程序,把它识别为一个一个具有独立意义的最小语法单位,即“单词”,并识、别出与其相关的属性,再转换成长度上统一的标准形式---属性字,最终将字符串形式的源程序改造成单词符号串形式的中间程序,以供其他部分使用。
2) 语法分析程序在词法分析识别出单词符号串的基础上,分析并判定程序的语法结构是否符合语法规则。自上而下语法分析从识别符号出发,不断建立直接推导,试图构造一个最左推导序列,最终由它推导初与输入符号串相同的终结符号串。从语法树的角度看,自顶向下分析过程将以识别符号串为根结点,试图 向下构造一棵语法树,其末端结点符号串正好与输入符号串相同。
3) 中间代码生成是将输入的经词法和语法分析过后的源程序翻译成中间四元式以便生成汇编指令。执行中间代码生成的程序为间代码生成器。
4) 目标代码生成是将有中间代码生成器生成的四元式生成具体的机器指令序列或汇编代码。本课程设计只会生成汇编指令。
四、课程设计详细分析
1、词法分析器设计
词法分析是编制一个读单词的过程,从输入的源程序中,识别出各个具有独立意义的单词,即基本保留字、标识符、常数、运算符、分隔符五大类。并依次输出各个单词的内部编码及单词符号自身值。程序语言的单词符号一般分为五种:关键字(保留字/基本字)if、while、begin…;标识符:常量名、变量名…;常数:34、56.78、true、‘a’、…;运算符:+、-、*、/、〈、and、or、….、;界限符:, ; ( ) { } /*…。 词法分析器的功能是输入源程序,输出单词符号。词法分析器的单词符号常常表示成以下的二元式(单词种别码,单词符号的属性值)。例如源程序为C语言。输入如下一段:
main(){
int a=-5,b=4,j;
if(a>=b)
j=a-b;
else j=b-a;}
要求输出:
(2,“main”) | (5,“(”) | (5,“)”) |
(5,”{“) | (1,”int”) | (2,”a”) |
(4,”=”) | (3,”-5”) | (5,”,”) |
(2,”b”) | (4,”=”) | (3,”4”) |
(5,”,”) | (2,”j”) | (5,”;”) |
(1,”if”) | (5,”(“) | (2,”a”) |
(4,”>=”) | (2,”b”) | (5,”)“) |
(2,”j”) | (4,”=”) | (2,”a”) |
(4,”-”) | (2,”b”) | (5,”;”) |
(1,”else”) | (2,”j”) | (4,”=”) |
(2,”b”) | (4,”-”) | (2,”a”) |
(5,”;”) | (5,“}”) | |
构建关键字表:
单词符号 | 类号 | 单词符号 | 类号 | 单词符号 | 类号 |
+ | 3 | && | 14 | , | 25 |
- | 4 | || | 15 | void | 26 |
* | 5 | = | 16 | int | 27 |
/ | 6 | ( | 17 | float | 28 |
< | 7 | ) | 18 | char | 29 |
<= | 8 | [ | 19 | if | 30 |
== | 9 | ] | 20 | else | 31 |
!= | 10 | { | 121 | while | 32 |
> | 11 | } | 22 | do | 33 |
>= | 12 | : | 23 | ! | 34 |
& | 13 | ; | 24 | main 字符串常量使用一对什么界定若干个字符 | 35 |
词法分析的设计方法有手工构造方法和程序自动生成方法两种:
1. 词法分析程序的手工构造方法:
自然语言描述 直接构造
正规文法 转换规则 NFA 子集法 DFA 状态集的划分 最小化DFA
正规表达式 转换规则
词法分析程序 编码 程序流程图2.自动生成
利用程序的自动生成器(如LEX等)自动生成词法分析程序。
2、语法分析器设计
LR分析程序:从逻辑上说,一个LR分析程序包括一个总控(驱动)程序和一张分析表两部
分。所有的LR分析器的总控程序都是一样的,只是分析表因文法不同而各有不同。分析表是LR分析程序的核心部分,它有“动作”和“状态转换”两部分。ACTION和GOTO都是二维数组。分析表是LR分析程序的核心部分。常见的LR分析表的方法是4种:LR(0)分析表构造、SLR分析表构造、LR分析表构造发和向前LR分析表构造。
LR分析算法:在分析的每一步,通用的总控程序按照状态栈顶状态Q和当前输入符号a查询LR分析表,并执行其中ACTION[Q,a]和GOTO部分规定的操作。可以用一个三元式表示分析的每一步栈中状态Q,文法符号串a的变化情况;下一步通过查询LR分析表,执行其中ACTION [Qi,Ak]规定的操作。
为了使源程序能被正确地翻译,产生等价的目标程序,源语言的使用者和实现者都应该遵循关于源语言的共同约定。因此,每种程序设计语言都有自己的程序构成规则---语法规则。使用者可以依据这些规则,以确定所书写程序的正确形式与结构;实现者则依据这些规则,以确定翻译程序可以接受什么样的程序以及怎样翻译该程序。具体的语法规则如下所示:
定义的文法,如下:
(1) Z---S
(2) S---AB
(3) A---->CDE
(4) C---void
(5) D---main
(6) E---()
(7) B---{F}
(8) F---GF
(9) F---G
(10) G--->HIJ
(11) H--int
(12) I--KLM
(13) K--character
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论