属性文法课堂练习.ppt

上传人:石*** 文档编号:38900949 上传时间:2022-09-06 格式:PPT 页数:22 大小:1.83MB
返回 下载 相关 举报
属性文法课堂练习.ppt_第1页
第1页 / 共22页
属性文法课堂练习.ppt_第2页
第2页 / 共22页
点击查看更多>>
资源描述

《属性文法课堂练习.ppt》由会员分享,可在线阅读,更多相关《属性文法课堂练习.ppt(22页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、属性文法课堂练习现在学习的是第1页,共22页1、写出下面文法的属性文法:Number Number1 Digit Number DigitDigit 0|1|2|3|4|5|6|7|8|9|文法规则语义规则Number Number1 Digit Number.val=Number1.val*10+Digit.valNumber DigitNumber.val=Digit.valDigit 0Digit.val=0Digit 9Digit.val=9现在学习的是第2页,共22页2、写出下面文法的属性文法:Number Digit Number1Number DigitDigit 0|1|2|3

2、|4|5|6|7|8|9|文法规则语义规则Number Digit Number1Number.mul=Number 1.mul*10Number.val=Digit.val*Number.mul+Number 1.valNumber DigitNumber.mul=1Number.val=Digit.valDigit 0Digit.val=0Digit 9Digit.val=9现在学习的是第3页,共22页3、给出下列文法中S产生的二进制数值的语义规则,并用堆栈说明该语义的实现过程,例如输入1101.011时,S.val=13.375:S-L.L|LL-L B|BB-0|1现在学习的是第4页,

3、共22页 B.Val:=0 B-0 B.Val:=1 B-1 L.val:=B.val;L.length=1 L-B L.val:=L.val*2+B.val L.length=L.length+1 L-L B S.val:=L.val S-L S.val:=L1.val+L2.val/2 L2.length S-L1.L2语义规则产生式现在学习的是第5页,共22页13_._1_1L.L1L.Val:=L.val*2+B.val(L.ength=2)13_._1L.L1B.Val:=113_._0_1L.LB113_._0_1L.L11L.Val:=B.val(L.length=1)13_._

4、0L.L11B.Val:=113_._0L.B1113_._0L.01113_.L.011L.Val:=L.val*2+B.val(L.length=4)13L.011B.Val:=16_1LB.0116_1L1.011L.val:=L.val*2+B.val(L.length=3)6L1.011B.val:=03_0LB1.0113_0L01.011L.val:=L.val*2+B.val(L.length=2)3L01.011B.val:=11_1LB01.0111_1L101.011L.val:=B.val(L.length=1)1L101.011B.val:=11B101.011111

5、01.011-1101.011使用的语义规则使用的语义规则valstate输入输入现在学习的是第6页,共22页S.Val:=L1.val+L2.val/2L2.length13.375SL.Val:=L.val*2+B.val(L.ength=3)13_._3L.LB.Val:=113_._1_1L.LB13_._1_1L.L1使用的语义规则使用的语义规则valstate输入输入现在学习的是第7页,共22页1101.011 的分析树的分析树1B.val=1L1.val=11B.Val=1L1.val=30B.Val=0L1.val=60B.Val=0L2.val=01B.Val=1L2.val

6、=11B.Val=1L2.val=3.S=13.3751B.Val=1L1.val=13现在学习的是第8页,共22页4、十进制浮点数的文法修改如下:dnum num.snumnum num1 digit|digitsnum digit snum1|digitdigit 0|1|2|3|4|5|6|7|8|9(注意:整数、小数分别用左、右递归文法)现在学习的是第9页,共22页文法规则语义规则dnum num.snumdnum.val=num.val+snum.valnum num1 digitnum.val=num1.val*10+digit.valnum digitnum.val=digit.

7、valsnum digit snum1snum.val=(snum1.val+digit.val)/10snum digitsnum.val=digit.val/10digit 0digit.val=0digit 9digit.val=9现在学习的是第10页,共22页5、下面文法给出是Pascal说明的文法,写出变量类型的一个属性文法。decl -var-list:type var-list-var-list,id|idtype-int|float 现在学习的是第11页,共22页文法规则语义规则declvar-list:typevar-list.dtype=type.dtypevar-list

8、1var-list2,idvar-listidtypeintegertype.dtype=integertyperealtype.dtype=realvar-list2.in=var-list1.dtypevar-list2.dtype=var-list2.inid.in=var-list1.dtypeid.in=var-list.dtypevar-list2.dtype=var-list1.dtypeid.dtype=var-list1.dtypeid.dtype=var-list.dtype现在学习的是第12页,共22页6、对于输入的表达式、对于输入的表达式(4*7+1)*2,根据下表的语

9、法制导定义建立一棵带注释的分析树,根据下表的语法制导定义建立一棵带注释的分析树。val:val:表示非终结符的整数值表示非终结符的整数值,综合属性综合属性,lexval,lexval 是单词是单词 digit digit 的属性的属性 语法制导定义语法制导定义 产生式产生式 语义规则语义规则 L E print(E.val)E E1 1+T+T E.val:=E1.val+T.val E T E.val:=T.val T T1 1*F F T.val:=T1.val*F.val T F T.val:=F.val F(E)F.val:=E.val F digit F.val:=digit.lex

10、val 现在学习的是第13页,共22页现在学习的是第14页,共22页7、请按语法制导的定义,将后缀表达式翻译成中缀表达式。注意,不允许出、请按语法制导的定义,将后缀表达式翻译成中缀表达式。注意,不允许出现冗余括号,后续表达式的文法如下:现冗余括号,后续表达式的文法如下:E-EE+E-EE*E-id 现在学习的是第15页,共22页语法制导定义语法制导定义 产生式产生式 语义规则语义规则 S-E print E.code E-E1E2+E.code=E1.code|+|E2.code;E.op=+E-E1E2*IF E1.op=+AND E2.op=+THEN E.code=(|E1.code|)

11、|*|(|E2.code|);ELSE IF E1.op=+THEN E.code=(|E1.code|)|*|E2.code;ELSE IF E2.op=+THEN E.code=E1.code|*|(|E2.code|);ELSE E.code=E1.code|*|E2.code|;E一一id E.code:=id.lexeme;现在学习的是第16页,共22页v8、假设变量的说明是由下列文法生成的:、假设变量的说明是由下列文法生成的:vDi L vL,i L|:T vTinteger|real v1)建立一个语法制导定义,把每一个标志符的类型加在符号表中)建立一个语法制导定义,把每一个标志

12、符的类型加在符号表中 v2)为)为1)构造一个预翻译程序)构造一个预翻译程序 现在学习的是第17页,共22页1)type为综合属性,代表类型属性,为综合属性,代表类型属性,函数函数addtype实现向符号表中实现向符号表中i对应项填类型信息。对应项填类型信息。语法制导定义语法制导定义 产生式产生式 语义动作语义动作 Di L D.Type:=L.Type addtype(i.entry,D.type)L,i L1 L.Type:=L1.Type addtype(i.entry,L.type)L:T L.type:=T.type Tinteger T.type:=integer Treal T.

13、type:=real 现在学习的是第18页,共22页vb)采用递归下降分析法编写预翻译程序:采用递归下降分析法编写预翻译程序:vProcedure D;vbegin v if lookahead=id then vbegin vmatch(id);vD.type=L;vaddtype(id.entry,D.type)vend velse v error vend vFunction L:DataType;vbegin vif lookahead=,then vbegin v match(,);v if lookahead=id then v begin v match(id);vL.Type=

14、L;v addtype(id.entry,L.type);v return(L.type)v end v else v error v end else if lookahead=:then begin match(:);L.Type=T;return(L.Type)end else error end Function T:DataType;begin if lookahead=integer then begin match(integer);return(integer)end else if lookahead=real then begin match(real);return(re

15、al)end else error end 现在学习的是第19页,共22页v9、下面文法产生的表达式是对整型和实型常数应用算符、下面文法产生的表达式是对整型和实型常数应用算符+形成的。当形成的。当两个整数相加时两个整数相加时,结果为整数,否则为实数。结果为整数,否则为实数。vE TR vR+TR|vTnum.num|num va)给出语法制导定义确定每个子表达式的类型。给出语法制导定义确定每个子表达式的类型。vb)把表达式翻译成前缀形式,并且决定类型。试用一元运算符把表达式翻译成前缀形式,并且决定类型。试用一元运算符inttoreal把整型值转换为相等的实型值,以使得前缀表达式中两个运算对把整

16、型值转换为相等的实型值,以使得前缀表达式中两个运算对象是同类型的。象是同类型的。现在学习的是第20页,共22页a)设设type是综合属性,代表各非终结符的是综合属性,代表各非终结符的“类型类型”属性属性 设设in是继承属性,是继承属性,翻译方案翻译方案 产生式产生式 语义规则语义规则 ET R R.in:=T.type E.Type:=R.s R+T R1 IF(R.in=integer)and(T.type=integer)THEN R1.in:=integer ELSE R1.in:=real R.s:=R1.s R R.s:=R.in Tnum.num T.type:=real Tnum

17、 T.type:=integer 现在学习的是第21页,共22页b)设属性设属性s和和i用于传递属性用于传递属性type,属性,属性t和和j用于传递属性用于传递属性val。翻译方案翻译方案 产生式产生式 语义规则语义规则 ET R R.i:=T.type R.j:=T.val E.Type:=R.s E.val:=R.t R+T R1 IF(R.i=integer)and(T.type=integer)THEN BEGIN R1.i:=integer Print(+,R.j,T.val)R1.j:=R.j+T.val END ELSE BEGIN R1.i:=real IF R.i=integer THEN Begin R.i:=real R.j:=inttoreal(R.j)End IF T.type=integer THEN Begin T.type:=real T.val:=inttoreal(T.val)End Print(+,R.j,T.val)R1.j:=R.j+T.val END R.s:=R1.s R.t:=R1.t R R.s:=R.i R.t:=R.j Tnum.num T.type:=real T.val:=num.num.lexval Tnum T.type:=integer T.val:=num.lexval 现在学习的是第22页,共22页

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 大学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁