编译原理语义分析实验报告 免费

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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;

}

相关文档
最新文档