编译原理语义分析实验报告 免费
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
编译原理综合训练
语义分析实验报告
指导老师:
班级:
学生:zeadom
学号:
学生:
学号:
2011/6/29
目录
语言文法的形式化描述....................................................................................错误!未定义书签。语义规则............................................................................................................错误!未定义书签。运行环境介绍....................................................................................................错误!未定义书签。关键算法的流程图及文字解释........................................................................错误!未定义书签。
1、本编译器的总框架..............................................................................错误!未定义书签。
2、在语义分析中的主要函数介绍..........................................................错误!未定义书签。
3、产生布尔表达式..................................................................................错误!未定义书签。
4、While-do语句的语义分析..................................................................错误!未定义书签。
5、词法、语法和语义分析的衔接..........................................................错误!未定义书签。测试报告............................................................................................................错误!未定义书签。附录 ...................................................................................................................错误!未定义书签。
语言文法的形式化描述(BNF范式)
程序开始
P->program i;SDn SC;
定义语句
SDn->SDSDn|null
SD->var int iSDT
SDT -> null|,iSDT
复合语句
SC->begin Sn end
Sn->S;Sn||null
单个语句
S->SD|SA|SIF|SW|SC
赋值语句
SA->i:=E
算术表达式
E->cET|iET|(E)ET
ET->AE|CE|DE|null;
C->+|-|*|/;
布尔表达式
B->EAEBT|NOT B|(B)BT
BT->DB|null
A->>|<|=|>=|<=|<>
D->AND|OR
if语句
SIF->if B then S SELSE
SELSE->null|else S2
while语句
SW->while B do S
语义规则(属性文法)
, }
Swhile M1 E do M2 S1 { backpatch, ); Gen( j , —, —, ); backpatch, ); := }
S begin L end { := }
S A { := makelist() /*空链*/ }
L S { := }
LL1;M S { backpatch, );
:= }
运行环境介绍
运行环境是DEVC++
Dev-C++是一个C&C++开发工具,它是一款自由软件,遵守GPL协议。它集合了GCC、MinGW32等众多自由软件,并且可以取得最新版本的各种工具支持,而这一切工作都是来自全球的狂热者所做的工作,并且你拥有对这一切工具自由使用的权利,包括取得源代码等,前提是你也必须遵守GNU协议。Dev-C++每一天都在进步着,因为它是一个自由软件。Dev-C++是一个非常实用的编程软件,多款着名软件均由它编写而成,它在C的基础上,增强了逻辑性
关键算法的流程图及文字解释
1、本编译器的总框架
2、在语义分析中的主要函数介绍
Backpatch(int list,int quad)
代码:
void backpatch(int list,int patch) {
int tmp;
while(list)
{
tmp = list;
list = RSS[tmp].jump;
RSS[tmp].jump = patch;
}
}
Merge (int list1,int list2)
代码:
int merge(int list1, int list2)
{
int tmp = list2;
if(list2==0)list2 = list1;
else
while(RSS[tmp].jump)
{
tmp = RSS[tmp].jump;
}
RSS[tmp].jump = list1;
return list2;
}