资源描述:
《《语义分析I》PPT课件》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、编译原理和技术大连理工软件学院胡彦huyan.ssdut@gmail.comLR(1)分析练习总结课堂练习中的情况不会构造识别活前缀DFA知道构造识别活前缀DFA,但是项目集里的项目构建不完全,遗漏加点项不会构造分析表LR(1)分析练习题目基于LR(1)项目来构造识别G活前缀的DFA,并基于DFA构建分析表.SV=ESEV*EVidEVLR(1)分析练习解答过程答:Step1.对原文法进行拓广(添加产生式S->S’)SV=ESEV*EVidEVSS’SV=ESEV*EVidEVLR(1)分析练习解答过程Step2:构建识别(拓广
2、)文法活前缀的DFAI0:S’->·S,$S->·V=E,$S->·E,$V->·*E,=/$V->·id,=/$E->·V,$I1:S’->S·,$SI2:S->V·=E,$E->V·,$VEI3:S->E·,$*I4:V->*·E,=/$E->·V,=/$V->·*E,=/$V->·id,=/$idI5:V->id·,=/$=I6:S->V=·E,$E->·V,$V->·*E,$V->·id,$EI8:S->*E·,=/$VI9:E->V·,=/$*id指向I5EI10:S->V=E·,$*I12:V->*·E,$E->·V,$V->·*E,$V->·id,
3、$VI7:E->V·,$V指向I7idI11:V->id·,$EI13:S->*E·,$V指向I7*id指向I11LR(1)分析练习解答过程构建分析表首先,为表达式编号然后,计算action表和goto表[0]SS’[1]SV=E[2]SE[3]V*E[4]Vid[5]EVLR(1)分析练习解答过程构建分析表Action(0,*)=s4,action(0,id)=s5Goto(0,S)=1,goto(0,V)=2,goto(0,E)=3Action(1,$)=accAction(2,=)=s6Goto(2,V)=7Action(3,$)=r2Acti
4、on(4,*)=s4,action(4,id)=s5Goto(4,E)=8,goto(4,V)=9…语义分析简介编译程序的目标:将源程序翻译成为语义等价的目标程序源程序与目标程序具有不同的语法结构,表达的结果却是相同的语义分析简介语义分析的功能审查每个语法结构的静态语义例:类型、运算、维数、越界在验证完静态语义后,才执行真正的翻译例:变量的存储分配例:表达式的求值例:语句的翻译(中间代码的生成)语义分析简介语义信息是上下文有关的例如:变量使用前要先定义文法定义可以写成:L={wcw
5、w是任意的a和b的串}其中第一个w代表标识符的声明后一个w表示对标识符的引用问题
6、:这个文法不是上下文无关的怎么办呢?语义分析简介目前情况上下文无关文法能够有效描述语言语法结构具有有效的分析方法,如LR(1)、LALR等程序语义编译器进行翻译的时候所必须的信息无法用上下文无关文法表示这两者之间怎么衔接?属性文法属性文法由Knuth在1968年提出基本思想为文法G描述的语法结构添加语义属性通常是为每个语法树结点添加所需的属性描述添加一系列的语义规则附加在文法G的产生式上如果添加的语义规则是有副作用的,那么这种属性文法又称为语法制导定义属性文法表达式文法EE+T
7、ETTT*F
8、TEF(E)
9、Fdigit为了计算表达式的值,首先为这个文
10、法的非终结符添加val属性4.1语法制导的定义例简单台式计算器的语法制导定义产生式语义规则LEnEE1+TETTT1*FTFF(E)FdigitF.val:=digit.lexvalT.val:=F.valT.val:=T1.val*F.valE.val:=T.valE.val:=E1.val+T.valF.val:=E.valprint(E.val)4.1语法制导的定义4.1.1语法制导定义的形式基础文法每个文法符号有一组属性每个文法产生式A有一组形式为b:=f(c1,c2,…,ck)的语义规则,其中f是函数,b和c1,c2,…,ck是该产生
11、式文法符号的属性综合属性:如果b是A的属性,c1,c2,…,ck是产生式右部文法符号的属性或A的其它属性。继承属性:如果b是产生式右部某个文法符号X的属性,c1,c2,…,ck是产生式右部文法符号的属性或A的其它属性。属性值由分析树中它的子结点的属性值来计算属性值由结点的兄弟结点及父结点的属性值来计算。4.1语法制导的定义关于属性的一些常识终结符只有综合属性,并且这些综合属性通常由词法分析器提供开始符号没有任何继承属性因为开始符号没有任何的兄弟结点或者父结点。4.1语法制导的定义4.1.2综合属性S属性定义:仅仅使用综合属性的语法制导定义产生式语义规则LEnp
12、rint(E.val)E