实验三语义分析报告-Word文档下载推荐.doc

上传人:wj 文档编号:13050249 上传时间:2022-10-03 格式:DOC 页数:15 大小:195.93KB
下载 相关 举报
实验三语义分析报告-Word文档下载推荐.doc_第1页
第1页 / 共15页
实验三语义分析报告-Word文档下载推荐.doc_第2页
第2页 / 共15页
实验三语义分析报告-Word文档下载推荐.doc_第3页
第3页 / 共15页
实验三语义分析报告-Word文档下载推荐.doc_第4页
第4页 / 共15页
实验三语义分析报告-Word文档下载推荐.doc_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

实验三语义分析报告-Word文档下载推荐.doc

《实验三语义分析报告-Word文档下载推荐.doc》由会员分享,可在线阅读,更多相关《实验三语义分析报告-Word文档下载推荐.doc(15页珍藏版)》请在冰豆网上搜索。

实验三语义分析报告-Word文档下载推荐.doc

基本思想是,根据翻译的需要设置文法符号的属性,以描述语法结构的语义。

例如,一个变量的属性有类型,层次,存储地址等。

表达式的属性有类型,值等。

属性值的计算和产生式相联系。

随着语法分析的进行,执行属性值的计算,完成语义分析和翻译的任务。

2.翻译方案设计

1)设计原理:

在实验二的基础上为文法符号引进一组属性及相应求值规则和动作,得到属性翻译文法,并引进一个符号表(包括变量名,变量数据是否有效,变量地址,变量的具体数据,数据类型等),在进行语法分析的同时,结合符号表完成语义分析与检测,同时根据属性翻译文法的属性及相关动作得到中间代码(抽象机式汇编指令),最后通过模拟的抽象机运行出结果。

2)设计方法:

(@为动作标志,↓为继承属性,↑为综合属性)

结合课本语法制导相关内容对文法增加属性和动作如下:

以下列出有修改的属性翻译文法:

①<

declaration_stat>

↓vartablep,datap,codep→intID↑n@name-def↓n,t;

其中动作符号的含义如下

@name-def↓n,t:

插入符号表;

②<

if_stat>

→if(<

expr>

)@BRF↑label1<

statement>

@BR↑label2@SETlabel↓label1|if(<

)@BRF↑label1<

statement>

@BR↑label2@SETlabel↓label1else<

statement>

@SETlabel↓label2

@BRF↑label1:

输出BRFlabel1;

@BR↑label2:

输出BRlabel2;

@SETlabel↓label1:

设置标号label1;

@SETlabel↓label2:

设置标号label2;

③<

while_stat>

→while@SETlabel↑label1(<

expression>

)@BRF↑label2<

@BR↓label1@SETlabel↓label2

@SETlabel↑label1:

@BRF↑label2:

输出BRFlabel2;

@BR↓label1:

输出BRlabel1;

@SETlabel↓label2:

④<

for_stat>

→for(<

@POP;

@SETlabel↑label1<

expression>

@BRF↑label2@BR↑label3;

@SETlabel↑label4<

@POP@BR↓label1)@SETlabel↓label3<

@BR↓label4@SETlabel↓label2

@SETlabel↓label1:

@BRF↑label2:

@BR↑label3:

输出BRlabel3;

@SETlabel↓label4:

设置标号label4;

@BR↑label1:

@SETlabel↓label3:

设置标号label3;

@BR↑label4:

输出BRlabel4;

⑤<

write_stat>

→write<

@OUT;

@OUT:

输出OUT

⑥<

read_stat>

→readID↑nLOOK↓n↑d@IN@STO↓d@POP;

@LOOK↓n↑d:

查符号表n,给出变量地址d;

没有,变量没定义;

@IN:

输出IN;

@STO↓d:

输出指令代码STOd;

@POP:

将栈顶元素出栈

⑦<

→ID↑n@LOOK↓n↑d@ASSIGN=<

bool_expr>

@STO↓d@POP|<

@ASSIGN:

记住当前文件位置;

⑧<

→<

additive_expr>

|<

additive_expr>

>

<

@GT

@LES

=<

additive_expr>

@GE

@LE

==<

@EQ

!

@NOTEQ

@GT:

次栈顶与栈顶作大于比较;

@LES:

次栈顶与栈顶作小于比较;

@GE:

次栈顶与栈顶作大于等于比较;

@LE:

次栈顶与栈顶作小于等于比较;

@EQ:

次栈顶与栈顶作等于比较;

@NOTEQ:

次栈顶与栈顶作不等于比较;

B→+<

term>

B@ADD|-<

B@SUB|ε

⑨<

additive_A>

→+<

@ADD|-<

@SUB|ε

@ADD:

操作数相加;

@SUB:

操作数相减;

C→*<

factor>

C@MULT|/<

C@DIV|ε

⑩<

term_A>

→*<

@MULT|/<

@DIV|ε

@MULT:

操作数相乘;

@DIV:

操作数相除;

⑪<

factor>

→(<

)|ID↑n@LOOK↓n↑d@LOAD↓d|NUM↑i@LOADI↓i

@LOOK↓n↑d:

@LOAD↓d:

将地址d的变量入栈;

@LOADI↓i:

将常量i入栈;

3)设计结果:

1)<

program>

→{<

declaration_list>

statement_list>

}

2)<

<

3)<

4)<

5)<

→<

|<

compound_stat>

|<

expression_stat>

6)<

7)<

→while@SETlabellabel1(<

)@BRF↑label2<

8)<

;

@BR↓label1)@SETlabel↓label3<

@BR↓label2

9)<

10)<

11)<

compound_stat>

12)<

|;

13)<

14)<

bool_A>

15)<

→>

@GT|<

@LES|>

@LE|==<

@EQ|!

@NOTEQ|ε

16)<

additive_expr>

17)<

18)<

term>

19)<

20)<

三、实验过程

首先,理解书上的代码和观看相关的知识的PPT,深入理解属性反应文法的作用,据此在我之前实验写好的语法分析基础上进行修改,写出语义分析代码。

在语义分析里增加“不可引用未赋初值变量”的规则,在init()、showVarTable()、checkInitValue()中增加了相关操作。

然后,结合栈式抽象机及其汇编指令相关命令的操作含义,模拟写出TEST语言的抽象机模型用以运行文法生成的中间代码。

最后,写出执行中间代码的虚拟机程序。

最后,编写TEST语言程序进行代码实例测试,调试观察运行过程及结果,并调试修改程序BUG。

代码完成后,测试、完善。

//定义符号表结构,添加未赋初值记录

s

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1