编译原理课程设计LL(1)文法 do while 三地址输出 报告加代码
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
学号:
课程设计
题目编译原理
学院计算机科学与技术
专业计算机科学与技术
班级
姓名
指导教师
2 年月日
课程设计任务书
学生姓名:专业班级:
指导教师:工作单位:
题目: DO-WHILE循环语句的翻译程序设计(LL(1)法、输出三地址表示)初始条件:
理论:学完编译课程,掌握一种计算机高级语言的使用。
实践:计算机实验室提供计算机及软件环境。如果自己有计算机可以在其上进行设计。
要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)
(1)写出符合给定的语法分析方法的文法及属性文法。
(2)完成题目要求的中间代码三地址表示的描述。
(3)写出给定的语法分析方法的思想,完成语法分析和语义分析程序设计。
(4)编制好分析程序后,设计若干用例,上机测试并通过所设计的分析程序。
(5)设计报告格式按附件要求书写。课程设计报告书正文的内容应包括:
1 系统描述(问题域描述);
2 文法及属性文法的描述;
3 语法分析方法描述及语法分析表设计;
4 按给定的题目给出中间代码形式的描述及中间代码序列的结构设计;
5 编译系统的概要设计;
6 详细的算法描述(流程图或伪代码);
7 软件的测试方法和测试结果;
8 研制报告(研制过程,本设计的评价、特点、不足、收获与体会等);
9 参考文献(按公开发表的规范书写)。
时间安排:
设计安排一周:周1、周2:完成系统分析及设计。
周3、周4:完成程序调试及测试。
周5:撰写课程设计报告。
设计验收安排:设计周的星期五第1节课开始到实验室进行上机验收。
设计报告书收取时间:设计周的次周星期一上午10点。
指导教师签名: 2011年 12月 23日
系主任(或责任教师)签名: 2011年 12月 23日
DO-WHILE语句的翻译程序设计
(LL(1)文法输出3地址表达式)
1课设的描述
1.1课设要求
首先按照课程设计的要求,写一个能识别do-while循环语句的文法,并使它符合LL(1)法的要求,按照这个文法编写一个程序,该程序能识别输入的语句是否符合do-while语句的文法,或者通过文法的开始符号能判断是否能推导出该语句。
程序应该包括词法分析器,能对输入的语句进行词法分析,对输入的源程序从左到右进行扫描并将其分解为一个个的单词符号。然后再对结果进行语法分析。词法分析器应能识别关键字,标识符,常量,操作符等。
该程序的语法分析器能对输入的语法进行分析,判断输入语句能否满足do-while循环语句的文法,如果不是则提示错误,如果满足do-while循环语句文法,判断是否符合LL(1)法,运用最左推导对其进行分析,看能否通过开始符号推导出来。
将语法和语义分析的结果用输出三地址形式表示出来。
1.2课设中所用概念
1)词法分析:输入源程序,对构成源程序的字符串进行扫描和分解,识别出一个个的
单词符号:关键字(do,while)、标识符、常量、操作符等。
2)语法分析:在词法分析的基础上,根据语法规则,把单词符号串分解成各类语法单
位。
3)语义分析与中间代码产生:对语法分析所识别出的各类语法范畴,分析其含义,并
进行初步翻译(产生中间代码)。
4)LL(1)文法:LL(1)文法是一种自上而下的语法分析方法。第一个L是自上而下的分析,
第二个L是从最左单词开始分析,1代表只通过下1个单词分析需要用到的语法。
5)预测分析程序:实现LL(1)法分析的一种有效方法,使用一张预测分析表和一个栈进
行联合控制。预测分析程序就是属于这种类型的LL(1)分析器。
2文法的描述
2.1 do.. While 语句文法描述
K->dLwS L->SP
P->;SP P->ε
S->iQE E->TG
G->+TG G->-TG
G->εT->FR
R->*FR R->/FR
R->εF->(E)
F->I Q->=
Q->< Q->>
非终结符集V N{K,L,P,S,G,R,E,F,Q,T}
终结符集V*{ do,while,(,), ε,+,-,*,/,i,>,=,<,;}
预测分析表
i = < > + - * / ( ) do ε; while K dLwS
L SP
P ε;SP
S iQE
E -TG TG
G +TG -TG εεε
T FR FR
R εε*FR /FR εεε
F i (E)
Q = < >
3语法分析方法及中间代码形式的描述3.1语法分析方法描述
LL(1)文法的定义:
First 集:
设G={V
T ,V
N
,S,P}是上下文无关文法
First(α)={a|α=>aβ,a∈V
T
,α,β∈V*}
若a=>ε,则规定ε∈First(α),称为First(α)为α的开始符号集或首符号集。
FOLLOW 集:
设G={V
T ,V
N
,S,P}是上下文无关文法
FOLLOW(A)={a|S=>μAβ且a∈V
T ,a∈First(β),μ∈V*
T
,β∈V+ }
若S=>μAβ,且β=>ε,则#∈FOLLOW(A)
SELECT 集:
给定上下文无关文法的产生式 A-->α A∈V
N
,α∈V* ,若α≠>ε,则SELECT(A-->α)=First(α)
如果α=>ε,则SELECT(A-->α)=(First(α)-{ε})U FOLLOW(A).
LL(1)文法:
一个上下文无关文法是LL(1)文法的充分必要条件是,对每个非终结符A的两个不同的产生式,A-->α A-->β,满足
SELECT(A-->α)∩SELECT(A-->β)= ф
其中α,β不能同时推导出空.
3.2 中间代码形式
三地址码是由下面一般形式的语句构成的序列:
x := y op z
其中,x y z为名字、常数或临时变量;op代表运算符号。每个语句中只能有一个运算符。三地址码类似于汇编语言代码。语句可以带有符号标号,而且存在各种控制流语句,本程序输出中用到了:
复制语句x := y
条件转移语句if x relop y goto L //L为带标号L的三地址语句
无条件转移语句goto L //转移到标号为L的三地址语句。