- 3
- 0
- 约9.25千字
- 约 16页
- 2021-03-21 发布于天津
- 举报
编译原理综合训练
语义分析实验报告
指导老师:
班级:
学生:zeadom
学号:
学生:
学号:
2011/6/29
目录
语言文法的形式化描述 错误 !未定义书签。
语义规则 错误 !未定义书签。
运行环境介绍 错误 !未定义书签。
关键算法的流程图及文字解释 错误 !未定义书签。
1、本编译器的总框架 错误 !未定义书签。
2、在语义分析中的主要函数介绍 错误 !未定义书签。
3、产生布尔表达式 错误 ! 未定义书签。
4、 While-do 语句的语义分析 错误 !未定义书签。
5、词法、语法和语义分析的衔接 错误 !未定义书签。
测试报告 错误 !未定义书签。
附录 错误 !未定义书签。
语言文法的形式化描述(BNF范式)
程序开始
P-program i;SD n SC;
定义语句
SDn-SDSD n|n ull
SD-var int iSDT
SDT - nu ll|,iSDT
复合语句
SC-begin Sn end
Sn-S;S n|| 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
语义规则(属性文法)
产生式
语义规则
i:=E
{ Ge n(:=,,—
,entry(i)) }
EE1+E2
{ = Newtemp;
Gen (+ ,,,
)}
EE1*E2
{ = Newtemp;
Gen(* ,,,
)}
E - E1
{ = Newtemp;
Gen(@ ,,—
,)}
E (E1)
{ = }
Ei
{ = En try(i) }
产生式
语义规则
Ei
{ :=makelist (n extquad); :=makelist (n extquad+1);
Gen(jnz, entry(i) , — , 0 ); Gen( j , — ,—, 0 ) }
Ei1 R i2
{ :=makelist (n extquad); :=makelist (n extquad+1);
Gen( jR, entry(i1) , entry(i2) , 0 ); Gen( j , — , — , 0 ) }
E n E1
{:=;
:=;}
E ( E1 )
{:=;
:=;}
M £
{ := n extquad ; }
EE1A ME2
{ backpatch, );
■ 一 J
:=merge,E2. Falselist)}
EE1V ME2
{ backpatch(E1. falselist,);
:=merge(E1. truelist, E2. truelist);
:=E2. Falselist }
EE1A ME2
{backpatch,);
■ 一 ,
:=merge, }
产生式
语义规则
Sif E the n M S1
{ backpatch,);
:=merge, }
M £
{ := n extquad ; }
N £
{ :=makelist (n extquad); Gen( j , — , — , 0 ) }
Sif E then M1 S1
N else M2 S2
{ backpatch,); backpatch,); :=merge,
,}
Swhile M1 E do M2 S1
{ backpatch, ); Gen( j ,—,—, );
backpatch, ); := }
S beg in L end
{
=}
S A
{
=makelist() /* 空链 */ }
L S
{
=}
LL1; M S
{ backpatch,);
:= }
运行环境介绍
运行环境是DEVC++
Dev-C++是一个CC+研发工具,它是一款自由软件,遵守GPL协议。它集合了 GCC MinGW32 等众多自由软件,并且可以取得最新版本的各种工具支持, 而这一切工作都是来自全球的狂
热者所做的工作,并且你拥有对这一切工具自由使用的权利, 包括取得源代码等, 前提是你
也必须遵守GNU协议。Dev-C++每一天都在进步着,因为它是一个自由软件。 Dev-C++是一
个非常实用的编程软件,多款着名软件均由它编写而成,它在 C的基础上,增强了逻辑性
关键算法的流程图及文字解释
1、本编译器的总框架
诃法分I词法.1 [语法分[语义分I [川, 析I
原创力文档

文档评论(0)