编译原理与编译构造 二义文法的处理、语义

来源:互联网 发布:照片批量修改大小软件 编辑:程序博客网 时间:2024/06/01 10:34

本文依旧来自记笔记相当勤快的七米八同学。向他表示真诚的感谢!


二义文法的处理

添加附加条件

在前面的内容中,我们已经知道,想要解决二义文法的问题,必须添加附加条件。

例: EE+E|EE|(E)|i

注意一下下图中的I0 ,第一行式子是EE ,那个撇不一定能看得清

Markdown

具体推导过程如图:

Markdown

此时可以推得构造表,但是此时是会有冲突的。我们只能强行规定优先级,如,规定①+ ,②+ 都是右结合。

我们假设已经知道了r1=EEES4=EEE 。那么对于已有在符号栈中EE 规约出了S4 ,此时符号栈就变成了EE+E 。根据右结合性,先移进,后规约,因此state=7,ACTION=+ ,用S4而不是r1 (注意此处少掉了构造表,需要加一个构造表才能看懂这段)

例:

if(a < b)   if(b < c)    expr();  else    expr();
if(a < b)   if(b < c)    expr();else  expr();

对于上面的现象,我们称为else出现了悬空。这也是一种二义。

YACC

yet another compiler compiler

.yYACC{monitor

具体内容就跳过,我也不是很懂。

语法之间的关系

Markdown

证明的话推荐大家看一篇文章:LL(1)、LR(1)、SLR(1)、LALR(1)判定方法

我证明没看懂啊。。

对于第四章,也就是二义文法的处理一章,会出2道题。

语法制导语义分析

边做语法分析(规约),边做语义分析

什么是语义

上下文无关文法+语义规则

此处语义是说“属性标注”,规则是说“属性值计算”

融合方法{CFG  translate schemasyntaxdirected definiation(SDD)

属性

例:E=E1+E2{E.val=E1.val+E2.val}

例:

int i, j;

{  E.valE1.valE2.valintiij

只有综合属性构成的SDD就叫S-属性定义(Sattribute definition)

语义分析的输入和输出

式子α加语义标注的语法分析树

两种方法,一种先构造生成树后加标记,自下而上,从左而右进行属性值计算。。一种语法分析和构造加语义标注的语法分析树同时进行。

例:

35+4n

再例:

龙书题目5.2.4

具体解答见图:

Markdown

Markdown

编译原理课一定要认真听,不然真的进度太难补了,只能说多亏各路神仙扶一把。。。

原创粉丝点击