DO-WHILE循环语句的翻译程序设计
WHILE循环语句的翻译程序设计(递归下降法、输出三地址表示)
课程设计任务书
学生姓名:赵旭林专业班级:计算机0801班
指导教师:陈天煌工作单位:计算机科学与技术学院
题目: WHILE循环语句的翻译程序设计(递归下降法、输出三地址表示)初始条件:
理论:学完编译课程,掌握一种计算机高级语言的使用。
实践:计算机实验室提供计算机及软件环境。如果自己有计算机可以在其上进行设计。
要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)
(1)写出符合给定的语法分析方法的文法及属性文法。
(2)完成题目要求的中间代码三地址表示的描述。
(3)写出给定的语法分析方法的思想,完成语法分析和语义分析程序设计。
(4)编制好分析程序后,设计若干用例,上机测试并通过所设计的分析程序。
(5)设计报告格式按附件要求书写。课程设计报告书正文的内容应包括:
1 系统描述(问题域描述);
2 文法及属性文法的描述;
3 语法分析方法描述及语法分析表设计;
4 按给定的题目给出中间代码形式的描述及中间代码序列的结构设计;
5 编译系统的概要设计;
6 详细的算法描述(流程图或伪代码);
7 软件的测试方法和测试结果;
8 研制报告(研制过程,本设计的评价、特点、不足、收获与体会等);
9 参考文献(按公开发表的规范书写)。
时间安排:
设计安排一周:周1、周2:完成系统分析及设计。
周3、周4:完成程序调试及测试。
周5:撰写课程设计报告。
设计验收安排:设计周的星期五第1节课开始到实验室进行上机验收。
设计报告书收取时间:设计周的次周星期一上午10点。
指导教师签名: 2010年 11月 13日
(完整word版)WHILE循环语句的翻译程序设计(递归下降法,输出四元式)
学号:01212103403
14
课内实践报告
课程名称编译原理
设计题目
WHILE循环语句的翻译程序设计
(递归下降法,输出四元式)学院计算机科学与技术
专业班级计算机1203班
姓名闵丹枫
指导教师林泓
2014年12月8日
课程设计任务书
学生姓名:闵丹枫专业班级: 计算机1203班
指导教师:林泓工作单位:计算机科学与技术学院
题目:WHILE循环语句的翻译程序设计(递归下降法、输出四元式)
初始条件:
理论:学完编译课程,掌握一种计算机高级语言的使用.
实践:计算机实验室提供计算机及软件环境。如果自己有计算机可以在其上进行设计。要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)(1)写出符合给定的语法分析方法的文法及属性文法。
(2)完成题目要求的中间代码四元式的描述.
(3)写出给定的语法分析方法的思想,完成语法分析和语义分析程序设计。
(4)编制好分析程序后,设计若干用例,上机测试并通过所设计的分析程序.
(5)设计报告格式按附件要求书写。课程设计报告书正文的内容应包括:
1 系统描述(问题域描述);
2 文法及属性文法的描述;
3 语法分析方法描述及语法分析表设计;
4 按给定的题目给出中间代码形式的描述及中间代码序列的结构设计;
5 编译系统的概要设计;
6 详细的算法描述(流程图或伪代码);
7 软件的测试方法和测试结果;
8 研制报告(研制过程,本设计的评价、特点、不足、收获与体会等);
9 参考文献(按公开发表的规范书写)。
时间安排:
设计安排一周:周1、周2:完成系统分析及设计.
周3、周4:完成程序调试及测试。
WHILE循环语句的翻译程序设计
WHILE循环语句的翻译程序设计(递归下降法、输出三地址表示)
1 系统描述
按照课程设计的要求,写一个能识别while循环语句的文法,通过一定的变换使它符合递归下降法的要求,然后按照这个文法编写一个程序,该程序能识别输入的语句是否符合while语句的文法,或者能不能通过文法的开始符号推导出该语句。
该程序应该包括词法分析器,能对输入的语句进行词法分析,然后再对结果进行语法分析。词法分析器应能识别关键字,标示符,常量,操作符等。
该程序的语法分析器能对输入的语法进行分析,判断输入语句能否满足while循环语句的文法。通过递归下降的方法对语句进行分析,看能否通过开始符号推导出来。
该程序的语义分析器就是对分析结果进行输出,要求输出结果是三地址形式的。
2 文法及属性文法的描述
2.1文法描述
<while语句> ::= while (<条件表达式>) (<赋值语句> | <while语句>)
<条件表达式> ::= (<标识符>|<无符号整数>)<条件运算符> (<标识符>|<无符号整数>)
<标识符> ::= <字母> (<字母>|<数字>)
<条件运算符> ::= > | < | =
<无符号整数> ::= <数字>(<数字>)
<赋值语句> ::= <标识符>=(<标识符> | <数字>) <算术运算符> (<标识符> | <数字>)
DO WHILE循环语句的翻译 递归下降法 输出三地址
DO-WHILE循环语句的翻译程序设计(递归下降法、输出三地址表示)1.系统描述
1.1目的
通过设计,编制,调试一个DO-WHILE循环语句的语法及语义分析程序,加深对语法及语义分析原理的理解,并实现词法分析程序对单词序列的此法检查和分析。1.2设计内容及步骤
对DO 语句WHILE 条件
(1)写出符合给定的语法分析方法的文法及属性文法。
(2)完成题目要求的中间代码三地址表示的描述。
(3)写出给定的语法分析方法的思想,完成语法分析和语义分析程序设计。
(4)编制好分析程序后,设计若干用例,上机测试并通过所设计的分析程序。
1.3 初始条件
理论:学完编译课程,掌握一种计算机高级语言的使用。
实践:计算机实验室提供计算机及软件环境。如果有计算机可以在其上进行设计。
1.4 开发平台
Windows环境下使用Visual C++
2.文法及属性文法的描述
2.1 DO-WHILE循环语句的文法
文法G(S)如下:
S->do{A}while(P);
A->id=E;
E->TE'
E'->+TE' | -TE' | e
T->FT'
T'->*FT' | /FT' | e
F->(E) | id
P->E rop id
rop-> > | < | >= | <= | != | ==
2.2 DO-WHILE循环语句的属性文法
3.语法分析方法描述及语法分析表设计
3.1语法分析方法
3.11递归下降法
递归下降法是比较简单直观易于构造的一种语法分析方法。递归下降法的主要思想是:对每个非终结符按其产生式结构写出相应语法分析递归过程,每个过程的功能是识别由该非终结符推出的串,当某非终结符的产生式有多个候选时能够按LL(1)形式可唯一确定选择某个候选式进行推导。因为文法递归相应子程序也递归,子程序的结构与产生式结构几乎一致。所以称此种方法称为递归子程序法或递归下降法。
《编译原理》课程设计说明书_DO_WHILE循环语句的翻译程序设计(LR方法、输出三地址表示)
DO-WHILE循环语句的翻译程序设计
(LR方法、输出三地址表示)
1.系统描述
1.1设计目的
通过设计、编制、调试一个DO-WHILE循环语句的语法及语义分析程序,加深对语法及语义分析原理的理解,并实现词法分析程序对单词序列的词法检查和分析。
1.2设计内容及步骤
对循环语句:DO〈赋值语句〉WHILE 〈表达式〉
按给定的题目写出符合自身语法分析方法要求的文法和属性文法描述。
(1)按给定的题目给出语法分析方法的思想及分析表设计。
(2)按给定的题目给出中间代码序列的结构设计。
(3)完成相应的词法分析、语法分析和语义分析程序设计。
(4)编制好分析程序后,设计若干用例,上机测试并通过所设计的分析程序。
2文法的描述
本程序所用的文法如下:
G[S]:
(1)S->do{E;}while(B) {if B.true goto B.true else goto B.false;}
(2)B->I1 rop I2 {B.type=bool;B.val=I1.val rop I2.val;}
(3)E->I1=I2 op I3 {I1.val=I2.val op I3.val;}
(4)I->id {I.val=id.val;}
注意:rop is < or >,op is +,-,*,/, id is any number or identifier
由上可知,非终结符B表示布尔表达式,E表示赋值表达式
3.语法分析方法描述及语法分析表设计
3.1语法分析方法描述
本实验采用LR分析方法对DO-WHILE语句进行语法分析。LR分析法是一种能根据当前分析栈中的符号串(通常以状态表示)和向右顺序查看输入串的K个(K>=0)符号就能惟一的确定分析器的动作是移进还是归约和用哪个产生式归约,因而也就能惟一的确定句柄。LR分析法的归约过程是规范推导的逆过程,所以LR分析过程是一种规范过程。
WHILE循环语句的翻译程序设计(递归下降法,输出四元式)
课内实践陈述
课程名称编译道理
设计题目WHILE轮回语句的翻译程序设计(递归降低法,输出四元式)
学院计算机科学与技术专业班级计算机1203班
姓名闵丹枫指点教师林泓
课程设计任务书
先生姓名:闵丹枫专业班级:计算机1203班
指点教师:林泓工作单位:计算机科学与技术学院
题目: WHILE轮回语句的翻译程序设计(递归降低法、输出四元式)
初始条件:
理论:学完编译课程,把握一种计算机高级说话的使用.
实践:计算机实验室提供计算机及软件环境.如果本人有计算机可以在其上进行设计.
请求完成的次要任务: (包含课程设计工作量及其技术请求,和说明书撰写等具体请求)(1)写出符合给定的语法分析方法的文法及属性文法.
(2)完成题目请求的两头代码四元式的描述.
(3)写出给定的语法分析方法的思想,完成语法分析和语义分析程序设计.
(4)编制好分析程序后,设计若干用例,上机测试并通过所设计的分析程序.
(5)设计陈述格式按附件请求书写.课程设计陈述书注释的内容应包含:
1 零碎描述(成绩域描述);
2 文法及属性文法的描述;
3 语法分析方法描述及语法分析表设计;
4 按给定的题目给出两头代码方式的描述及两头代码序列的结构设计;
5 编译零碎的概要设计;
6 具体的算法描述(流程图或伪代码);
7 软件的测试方法和测试结果;
8 研制陈述(研制过程,本设计的评价、特点、缺乏、收获与体会等);
9 参考文献(按公开发表的规范书写).
时间安插:
设计安插一周:周1、周2:完成零碎分析及设计.
周3、周4:完成程序调试及测试.
周5:撰写课程设计陈述.
do~while语句_C语言程序设计_[共3页]
#include <stdio.h> void main() {
int n; while(n++<5)
printf("%d ",n); }
程序运行时,由于没有确定循环控制变量 n 的初值,所以循环的次数无法确定。如果 n 起始 的随机值是 10 的话,则循环不执行,程序无输出;如果 n 起始的随机值是 0 的话,则循环体执行 5 次,程序的运行结果为 12345。
2.应注意循环条件的描述,以避免死循环。 例如:
#include <stdio.h> void main() {
int a,n=0; while(a=5)
printf("%d \n",n++); }
本例中 while 语句的循环条件为赋值表达式 a=5,因为该表达式的值永远为真,而循环体中又 没有其他终止循环的手段,所以该循环将无休止地进行下去,是一个死循环。
3.循环体只能是 1 条语句。如果循环体有多个操作的话,应该使用复合语句的方式将多个操 作构造成一条语句。
例如:
#include <stdio.h> void main() {
int i,s=1; i=5; while(i)
WHILE语句的翻译—递归子程序法—三地址表示——编译原理课程设计报告
课程设计
题目WHILE循环语句的翻译程序设计
(递归下降法、输出三地址表示)学院计算机科学与技术学院
专业计算机科学与技术
班级0806
姓名张方纪
指导教师郭羽成
2010 年 1 月7 日
课程设计任务书
学生姓名:张方纪专业班级:计算机0806班
指导教师:郭羽成工作单位:计算机科学与技术学院
题目: WHILE循环语句的翻译程序设计(递归下降法、输出三地址表示)初始条件:
理论:学完编译课程,掌握一种计算机高级语言的使用。
实践:计算机实验室提供计算机及软件环境。如果自己有计算机可以在其上进行设计。
要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)
(1)写出符合给定的语法分析方法的文法及属性文法。
(2)完成题目要求的中间代码三地址表示的描述。
(3)写出给定的语法分析方法的思想,完成语法分析和语义分析程序设计。
(4)编制好分析程序后,设计若干用例,上机测试并通过所设计的分析程序。
(5)设计报告格式按附件要求书写。课程设计报告书正文的内容应包括:
1 系统描述(问题域描述);
2 文法及属性文法的描述;
3 语法分析方法描述及语法分析表设计;
4 按给定的题目给出中间代码形式的描述及中间代码序列的结构设计;
5 编译系统的概要设计;
6 详细的算法描述(流程图或伪代码);
7 软件的测试方法和测试结果;
8 研制报告(研制过程,本设计的评价、特点、不足、收获与体会等);
9 参考文献(按公开发表的规范书写)。
时间安排:
设计安排一周:周1、周2:完成系统分析及设计。
周3、周4:完成程序调试及测试。
DO-WHILE循环语句翻译程序设计
DO-WHILE循环语句翻译程序设计
DO-WHILE循环语句翻译程序的设计
目录
第一章概述 (1)
1.1 课程设计背景 (1)
1.2 课程设计目的 (1)
1.3 实验环境与开发工具 (1)
1.4 C++语言简单介绍 (2)
第二章设计内容 (3)
2.1 设计需求陈述 (3)
2.1.1词法分析的原理 (4)
2.1.2 语法分析器的原理 (5)
2.1.3 语义分析中间代码生成器的原理.......................................... 错误!未定义书签。
2.2 需要完成的功能................................................................................. 错误!未定义书签。
2.2.1 判定输入的文法词法分析是否正确 (8)
2.2.2 判定输入的文法语法分析是否正确 (9)
2.2.3中间代码(四元式)的生成与输出 (10)
2.3 分析器的构造 (11)
第三章逻辑设计 (12)
3.1系统的组织与基本工作流程 (12)
3.2 总体结构逻辑结构图 (13)
第四章详细设计.............................................................................................. 错误!未定义书签。
4.1 软件功能分析................................................................................... 错误!未定义书签。
dowhile和while的代码举例
dowhile和while的代码举例
1. do-while 循环
do-while 循环至少会执行一次,即使条件一开始就是 false。以下是一个简单的Python 示例:
python
counter = 0
do_while_loop:
print(f"Counter: {counter}")
counter += 1
if counter > 5:
break
在这个例子中,do-while 循环会打印出计数器的值,然后增加计数器的值。当计数器的值超过5时,循环会停止。
2. while 循环
while 循环只有在条件为 true 时才会执行。以下是一个 Python 示例:
python
counter = 0
while counter < 5:
print(f"Counter: {counter}")
counter += 1
在这个例子中,while 循环会打印出计数器的值,然后增加计数器的值。当计数器的值达到5时,循环会停止。
这两个例子展示了 do-while 和 while 循环的基本行为。在实践中,你应该根据需要选择使用哪种循环。例如,如果你需要至少执行一次循环体,那么 do-while 是更好的选择。如果你只需要在某个条件为 true 时执行循环体,那么 while 是更好的选择。
DO-WHILE循环语句的翻译程序设计(简单优先法、输出三地址表示)
附件1:
学号:
0120910340525
课程设计
题目
DO-WHILE(简单优先法、输出三地址表示)
学院计算机科学与技术专业计算机科学与技术班级0905
姓名明正超
指导教师杨克俭
2012 年 1 月 3 日
课程设计任务书
学生姓名:明正超专业班级:计算机0905班
指导教师:杨克俭工作单位:计算机科学与技术学院题目: DO-WHILE循环语句的翻译程序设计(简单优先法、输出三地址表示)
初始条件:
理论:学完编译课程,掌握一种计算机高级语言的使用。
实践:计算机实验室提供计算机及软件环境。如果自己有计算机可以在其上进行设计。
要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写
等具体要求)
(1)写出符合给定的语法分析方法的文法及属性文法。
(2)完成题目要求的中间代码三地址表示的描述。
(3)写出给定的语法分析方法的思想,完成语法分析和语义分析程序设计。
(4)编制好分析程序后,设计若干用例,上机测试并通过所设计的分析程序。
(5)设计报告格式按附件要求书写。课程设计报告书正文的内容应包括:
1 系统描述(问题域描述);
2 文法及属性文法的描述;
3 语法分析方法描述及语法分析表设计;
4 按给定的题目给出中间代码形式的描述及中间代码序列的结
构设计;
5 编译系统的概要设计;
6 详细的算法描述(流程图或伪代码);
7 软件的测试方法和测试结果;
8 研制报告(研制过程,本设计的评价、特点、不足、收获与体
会等);
9 参考文献(按公开发表的规范书写)。
时间安排:
设计安排一周:周1、周2:完成系统分析及设计。
(完整word版)WHILE循环语句的翻译程序设计(简单优先法、输出四元式)
WHILE循环语句的翻译程序设计(简单优先法、
输出四元式)
1 需求说明或问题描述
1.1 问题描述
对C++中while循环语句的理解及分析,通过编译中的词法分析、语法分析、语义分析及中间代码生成等编译过程,用简单优先分析法分析并翻译while语句。
1.2 需求说明
1 写出符合给定的语法分析方法的文法及属性文法
2 完成题目要求的中间代码四元式的描述
3 写出给定的语法分析方法的思想,完成语法分析及语义分析程序设计
4 设计若干用例,上机通过测试
2 文法及语法设计
2.1文法及属性文法:
文法G=(V N,V T ,P ,S)
其中V N={S , B, E, C, A, B, P,T} V T={w,(, ),{,}, i,;}
P={
S —〉w(B){E}
E —> C
C -〉CA
C -〉A
A —〉iPA
A —〉i;
P -> +|—|*|/
B —〉iTi
B-〉i
T -〉>|<|〉=|<=|==
}
2.2 语法分析方法描述及语法分析表设计
2.2。1 语法分析方法描述:
简单优先分析法是按照文法符号(终极符和非终极符)的优先关系确定句柄的。
基本思想可设计如下,首先根据已知优先文法构造相应优先关系矩阵,并将文法的产生式保存,设置符号栈S,步骤如下:
(1) 将输入符号串a1a2…a n#依次逐个存入符号栈S中,直到遇到栈顶符号a i的优先性>下一个待输入符号a j为止。
(2) 栈顶当前符号a i为句柄尾,由此向左在栈中找句柄的头符号a k,即找到a k—1〈a k为止.
(3)由句柄a k.。。a i在文法的产生式中查找右部为a k…a i的产生式,若找到则用相应左部代替句柄,若找不到则为出错,这时可断定输入串不是该文法的句子。
(完整word版)武汉理工大学 DO-WHILE语句的翻译分析程序设计 ———递归下降法、输出四元式
DO-WHILE语句的翻译分析程序设计
———递归下降法、输出四元式
1问题描述
1.1问题描述
设计一个DO-WHILE循环语句的词法﹑语法及语义分析程序,语法分析选择递归下降法,采用用语法制导翻译输出中间代码四元式。
1.2主要任务
通过设计、编制、调试一个DO-WHILE循环语句的语法及语义分析程序,加深对语法及语义分析原理的理解,并实现词法分析程序对单词序列的词法检查和分析。
首先写出一个能识别DO-WHILE循环语句的文法,通过消除左递归使它符合LL(1)即递归下降法的要求,然后按照这个文法编写一个集词法分析,语法分析和语义分析为一体的程序,该程序首先可以检查输入语句是否符合词法要求,若符合则继续识别输入的语句是否符合DO-WHILE语句的文法,若符合则进行语义分析,输出用四地址代码表示的中间代码。
1.3测试数据
编写好源代码后,进行调试,根据程序要求进输入一小段程序,进行词法、语法的分析,给出分析结果。
2文法及属性文法的描述
2.1文法的描述
用扩充巴科斯-瑙尔范式(EBNF)给出的while循环语句的文法描述,如下:
::=do () while{ }
::=
::= > | < | = | >= | <=
::= + | - |
::= * | / |
::=() | |
::==;
2.2 DO-while循环语句文法的描述
产生式为S-> do E while A,为便于语法制导翻译将其改写如下:文法G(s)如下:
S-->DGWE (意思是do G while E)
G-->c=R
DOWHILE循环语句的翻译程序设计(简单优先法输出三地址表示)
1问题描述
1.1问题要求
DO-WHILE循环语句的翻译程序设计(简单优先法、输出三地址表示)
1.2问题具体步骤
输入一个DO-WHILE的语句,进行词法分析,词法分析器利用超前搜索,状态转换等方法,将源程序转化成为一个一个的单词符号二元式,如果词法分析无误,则进入语法分析部分,使用简单优先法进行文法分析,为每个终极符与非终极符之间定义优先关系,利用优先关系进行移进-规约,如果能规约到文法的开始符,则文法分析成功,输出三地址码.
2文法及属性文法的描述
2.1文法描述
G(s): S->do B while E, B->c:=a+1, E->a>b
2.2属性文法描述
G(s): S->do B while E,
{ S.begin:=newlabel;
B.next:=S.begin;
E.true:=newlabel;
E.false:= S.next;
S.code:=gen(S.begin’:’) |B.code |E.code |gen(E.true’:’) |gen(‘goto’S.begin) ;
}
B->c:=a+1
{ B.code:= ’c:=a+1’ }
E->a>b
{ E.code=gen(‘if’’a>b’’goto’ E.true) |Gen(‘goto’ E.false) }
E->true
{E.code:=gen(‘goto’ E.true) }
E->false
{E.code:=gen(‘goto’ E.false) }
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程设计任务书
学生姓名:专业班级:
指导教师:工作单位:计算机科学与技术学院
题目: 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年月日
系主任(或责任教师)签名: 2011年月日
DO-WHILE循环语句的翻译程序设计
(LL(1)法、输出三地址表示)
1. 系统描述
1.1 设计目的
通过设计、编制、调试一个DO-WHILE循环语句的语法及语义分析程序,加深对法及语义分析原理的理解,并实现词法分析程序对单词序列的词法检查和分析。
1.2 设计内容及步骤
对循环语句: DO〈赋值语句〉WHILE 〈表达式〉
(1)按给定的题目写出符合自身语法分析方法要求的文法和属性文法描述。
(2)按给定的题目给出语法分析方法的思想及分析表设计。
(3)按给定的题目给出中间代码序列的结构设计。
(4)完成相应的词法分析、语法分析和语义分析程序设计。
(5)编制好分析程序后,设计若干用例,上机测试并通过所设计的分析程序。
2. 文法及属性文法的描述
2.1 文法描述
K -> do L while S L -> SP
P -> ;SP | ε
S -> iQE
E -> TG G -> +TG | -TG | εT -> FR
R -> *FR | /FR | εF -> (E) | i
Q -> = | < | >
2.2 属性文法的描述
3. 语法分析方法描述及语法分析表设计
3.1 语法分析方法的描述
确定的自顶向下分析方法,是从文法的开始符号出发,考虑如何根据当前输入符号(单词符号)唯一地确定选用哪个产生式替换相应非终结符以往下推导,或构造一棵相应的语法树。
由分析可知,能够使用自顶向下分析技术的文法正是LL(1)文法。LL(1)的含义是:第1个L表明自顶向下分析是从左到右扫描输入串,第2个L表明分析过程中将用最左推导,1表明只需向右看一个符号便可决定如何推导即选择哪个产生式(规则)进行推导。一个上下无关文法是LL(1)文法的充分必要条件是,对每个非终结符A的任意两个不同的产生式,A→α,A→β,均满足:SEKECT(A→α)∩SEKECT(A→β)=Ф,其中α、β不能同时推导出ε。
当我们需要选用自顶向下分析技术时,首先必须判别所给文法是否是LL(1)文法。因而对任给文法需计算FIRST、FOLLOW、SELECT集合,进而判别文法是否为LL(1)文法。
对判断确定的LL(1)文法,构造预测分析表。分析表可以用一个矩阵M(或称二维数组)表示。矩阵的元素M[A,a]中的下标A表示非终结符,a为终结符或句子括号“#”,矩阵元素M[A,a]中的内容是一条关于A的产生式,表明当用终结符A向下推导时,面临输入符号a时,所应采取的候选产生式,当元素内容无产生式时,则表明用A为左部向下推导时遇到了不该出现的符号,因此元素内容为转向出错处理的信息。
3.2 语法分析表的设计
3.2.1 各非终结符的FIRST集合:
FIRST(K)={ do }
FIRST(L)={ i }
FIRST(S)={ i }
FIRST(P)={ ; , ε } FIRST(Q)={ = , < , > } FIRST(E)={ ( , i } FIRST(T)={ ( , i } FIRST(G)={ - , + , ε } FIRST(F)={ ( , i } FIRST(R)={ * , / , ε }
3.2.2 各非终结符的FOLLOW集合:
FOLLOW(L)={ w } FOLLOW(S)={ ; , w , # } FOLLOW(P)={ w } FOLLOW(Q)={ ( , i } FOLLOW(E)={ ) , w , # } FOLLOW(T)={ + ,- ,w }
FOLLOW(G)={ ; , w , ) , # } FOLLOW(F)={ * , / , ) , w ,# } FOLLOW(R)={ ) , w , ; , + ,- , # }