属性文法课堂练习课件_第1页
属性文法课堂练习课件_第2页
属性文法课堂练习课件_第3页
属性文法课堂练习课件_第4页
属性文法课堂练习课件_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

属性文法课堂练习题2、写出下面文法的属性文法:Number→DigitNumber1Number→DigitDigit→0|1|2|3|4|5|6|7|8|9|1、写出下面文法的属性文法:Number→Number1

DigitNumber→DigitDigit→0|1|2|3|4|5|6|7|8|9|属性文法课堂练习题2、写出下面文法的属性文法:1、写出下面文11、写出下面文法的属性文法:Number→Number1

DigitNumber→DigitDigit→0|1|2|3|4|5|6|7|8|9|文法规则语义规则Number→Number1DigitNumber.val=Number1.val*10+Digit.valNumber→DigitNumber.val=Digit.valDigit

→0Digit.val=0…………Digit

→9Digit.val=91、写出下面文法的属性文法:文法规则语义规则Number→22、写出下面文法的属性文法:Number→DigitNumber1Number→DigitDigit→0|1|2|3|4|5|6|7|8|9|文法规则语义规则Number→DigitNumber1Number.mul=Number1.mul*10Number.val=Digit.val*Number.mul+Number1.valNumber→DigitNumber.mul=1Number.val=Digit.valDigit

→0Digit.val=0…………Digit

→9Digit.val=92、写出下面文法的属性文法:文法规则语义规则Number→33、给出下列文法中S产生的二进制数值的语义规则,并用堆栈说明该语义的实现过程,例如输入1101.011时,S.val=13.375:S->L.L|LL->LB|BB->0|13、给出下列文法中S产生的二进制数值的语义规则,并用堆栈说明4{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.valL.length=L.length+1}L->LB{S.val:=L.val}S->L{S.val:=L1.val+L2.val/2^L2.length}S->L1.L2语义规则产生式{B.Val:=0}B->0{B.Val:=513_._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_._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.01111101.011--1101.011使用的语义规则valstate输入13_._1_1L.L1L.Val:=L.val*2+6S.Val:=L1.val+L2.val/2^L2.length13.375SL.Val:=L.val*2+B.val(L.ength=3)13_._3L.LB.Val:=113_._1_1L.LB13_._1_1L.L1使用的语义规则valstate输入S.Val:=L1.val+L2.val/2^L271101.011的分析树1B.val=1L1.val=11B.Val=1L1.val=30B.Val=0L1.val=60B.Val=0L2.val=01B.Val=1L2.val=11B.Val=1L2.val=3.S=13.3751B.Val=1L1.val=131101.011的分析树1B.val=1L1.val84、十进制浮点数的文法修改如下: dnum→num.snum num→num1digit|digit snum→digitsnum1|digit digit→0|1|2|3|4|5|6|7|8|9(注意:整数、小数分别用左、右递归文法)4、十进制浮点数的文法修改如下:(注意:整数、小数分别用左、9文法规则语义规则dnum→num.snumdnum.val=num.val+snum.valnum→num1

digitnum.val=num1.val*10+digit.valnum→digitnum.val=digit.valsnum→digitsnum1snum.val=(snum1.val+digit.val)/10snum→digitsnum.val=digit.val/10digit→0digit.val=0…………digit→9digit.val=9文法规则语义规则dnum→num.snumdnum.v105、下面文法给出是Pascal说明的文法,写出变量类型的一个属性文法。 decl->var-list:type var-list->var-list,id|id type->int|float5、下面文法给出是Pascal说明的文法,写出变量类型的一个11文法规则语义规则decl→var-list:type{var-list.dtype=type.dtype}var-list1→var-list2,idvar-list→idtype→integer{type.dtype=integer}type→real{type.dtype=real}{var-list2.in=var-list1.dtype}{var-list2.dtype=var-list2.inid.in=var-list1.dtype}{id.in=var-list.dtype}{var-list2.dtype=var-list1.dtypeid.dtype=var-list1.dtype}{id.dtype=var-list.dtype}文法规则语义规则decl→var-list:type{va126、对于输入的表达式(4*7+1)*2,根据下表的语法制导定义建立一棵带注释的分析树。

val:表示非终结符的整数值,综合属性,lexval是单词digit的属性 语法制导定义

产生式

语义规则

LE

print(E.val)EE1+TE.val:=E1.val+T.valET

E.val:=T.valTT1*FT.val:=T1.val*F.valTF

T.val:=F.valF(E)F.val:=E.valFdigit

F.val:=digit.lexval

6、对于输入的表达式(4*7+1)*2,根据下表的语法制导定13属性文法课堂练习课件147、请按语法制导的定义,将后缀表达式翻译成中缀表达式。注意,不允许出现冗余括号,后续表达式的文法如下:

E->EE+E->EE*E->id7、请按语法制导的定义,将后缀表达式翻译成中缀表达式。注意,15语法制导定义

产生式

语义规则

S->EprintE.codeE->E1E2+E.code=E1.code||'+'||E2.code;E.op='+'E->E1E2*IFE1.op='+'ANDE2.op='+'THENE.code="("||E1.code||')'||'*'||'('||E2.code||')';ELSEIFE1.op='+'THENE.code="("||E1.code||')'||'*'||E2.code;ELSEIFE2.op='+'THENE.code=E1.code||'*'||'('||E2.code||')';ELSEE.code=E1.code||'*'||E2.code||;E一>idE.code:=id.lexeme;语法制导定义产生式语义规则S->EprintE.c168、假设变量的说明是由下列文法生成的:DiLL,iL|:TTinteger|real1)建立一个语法制导定义,把每一个标志符的类型加在符号表中2)为1)构造一个预翻译程序

8、假设变量的说明是由下列文法生成的:171)type为综合属性,代表类型属性,

函数addtype实现向符号表中i对应项填类型信息。

语法制导定义

产生式

语义动作

DiL

D.Type:=L.Typeaddtype(i.entry,D.type)L,iL1L.Type:=L1.Typeaddtype(i.entry,L.type)L:T

L.type:=T.typeTinteger

T.type:=integerTreal

T.type:=real1)type为综合属性,代表类型属性,产生式语义动作D18b)采用递归下降分析法编写预翻译程序: ProcedureD; begin iflookahead=idthenbeginmatch(id);D.type=L;addtype(id.entry,D.type)endelseerror endFunctionL:DataType;beginiflookahead=’,’thenbeginmatch(‘,’);iflookahead=idthenbeginmatch(id);L.Type=L;addtype(id.entry,L.type);return(L.type)endelseerrorendelseiflookahead=’:’thenbeginmatch(‘:’);L.Type=T;return(L.Type)endelseerrorend

FunctionT:DataType;beginiflookahead=integerthenbeginmatch(integer);return(integer)endelseiflookahead=realthenbeginmatch(real);return(real)endelseerrorend

b)采用递归下降分析法编写预翻译程序:elseifl199、下面文法产生的表达式是对整型和实型常数应用算符+形成的。当两个整数相加时,结果为整数,否则为实数。ETRR+TR|εTnum.num|numa)给出语法制导定义确定每个子表达式的类型。b)把表达式翻译成前缀形式,并且决定类型。试用一元运算符inttoreal把整型值转换为相等的实型值,以使得前缀表达式中两个运算对象是同类型的。

9、下面文法产生的表达式是对整型和实型常数应用算符+形成的。20a)设type是综合属性,代表各非终结符的“类型”属性

设in是继承属性,

翻译方案

产生式

语义规则

ET

R{R.in:=T.type}{E.Type:=R.s}R+T

R1

{IF(R.in=integer)and(T.type=integer)THENR1.in:=integerELSER1.in:=real}{R.s:=R1.s}Rε

{R.s:=R.in}Tnum.num

T.type:=realTnum

T.type:=integera)设type是综合属性,代表各非终结符的“类型”属性产生21b)设属性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)THENBEGINR1.i:=integerPrint(‘+’,R.j,T.val)R1.j:=R.j+T.valENDELSEBEGINR1.i:=realIFR.i=integerTHENBeginR.i:=realR.j:=inttoreal(R.j)EndIFT.type=integerTHENBeginT.type:=realT.val:=inttoreal(T.val)EndPrint(‘+’,R..j,T.val)R1.j:=R.j+T.valEND}{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}b)设属性s和i用于传递属性type,属性t和j用于传递属22属性文法课堂练习题2、写出下面文法的属性文法:Number→DigitNumber1Number→DigitDigit→0|1|2|3|4|5|6|7|8|9|1、写出下面文法的属性文法:Number→Number1

DigitNumber→DigitDigit→0|1|2|3|4|5|6|7|8|9|属性文法课堂练习题2、写出下面文法的属性文法:1、写出下面文231、写出下面文法的属性文法:Number→Number1

DigitNumber→DigitDigit→0|1|2|3|4|5|6|7|8|9|文法规则语义规则Number→Number1DigitNumber.val=Number1.val*10+Digit.valNumber→DigitNumber.val=Digit.valDigit

→0Digit.val=0…………Digit

→9Digit.val=91、写出下面文法的属性文法:文法规则语义规则Number→242、写出下面文法的属性文法:Number→DigitNumber1Number→DigitDigit→0|1|2|3|4|5|6|7|8|9|文法规则语义规则Number→DigitNumber1Number.mul=Number1.mul*10Number.val=Digit.val*Number.mul+Number1.valNumber→DigitNumber.mul=1Number.val=Digit.valDigit

→0Digit.val=0…………Digit

→9Digit.val=92、写出下面文法的属性文法:文法规则语义规则Number→253、给出下列文法中S产生的二进制数值的语义规则,并用堆栈说明该语义的实现过程,例如输入1101.011时,S.val=13.375:S->L.L|LL->LB|BB->0|13、给出下列文法中S产生的二进制数值的语义规则,并用堆栈说明26{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.valL.length=L.length+1}L->LB{S.val:=L.val}S->L{S.val:=L1.val+L2.val/2^L2.length}S->L1.L2语义规则产生式{B.Val:=0}B->0{B.Val:=2713_._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_._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.01111101.011--1101.011使用的语义规则valstate输入13_._1_1L.L1L.Val:=L.val*2+28S.Val:=L1.val+L2.val/2^L2.length13.375SL.Val:=L.val*2+B.val(L.ength=3)13_._3L.LB.Val:=113_._1_1L.LB13_._1_1L.L1使用的语义规则valstate输入S.Val:=L1.val+L2.val/2^L2291101.011的分析树1B.val=1L1.val=11B.Val=1L1.val=30B.Val=0L1.val=60B.Val=0L2.val=01B.Val=1L2.val=11B.Val=1L2.val=3.S=13.3751B.Val=1L1.val=131101.011的分析树1B.val=1L1.val304、十进制浮点数的文法修改如下: dnum→num.snum num→num1digit|digit snum→digitsnum1|digit digit→0|1|2|3|4|5|6|7|8|9(注意:整数、小数分别用左、右递归文法)4、十进制浮点数的文法修改如下:(注意:整数、小数分别用左、31文法规则语义规则dnum→num.snumdnum.val=num.val+snum.valnum→num1

digitnum.val=num1.val*10+digit.valnum→digitnum.val=digit.valsnum→digitsnum1snum.val=(snum1.val+digit.val)/10snum→digitsnum.val=digit.val/10digit→0digit.val=0…………digit→9digit.val=9文法规则语义规则dnum→num.snumdnum.v325、下面文法给出是Pascal说明的文法,写出变量类型的一个属性文法。 decl->var-list:type var-list->var-list,id|id type->int|float5、下面文法给出是Pascal说明的文法,写出变量类型的一个33文法规则语义规则decl→var-list:type{var-list.dtype=type.dtype}var-list1→var-list2,idvar-list→idtype→integer{type.dtype=integer}type→real{type.dtype=real}{var-list2.in=var-list1.dtype}{var-list2.dtype=var-list2.inid.in=var-list1.dtype}{id.in=var-list.dtype}{var-list2.dtype=var-list1.dtypeid.dtype=var-list1.dtype}{id.dtype=var-list.dtype}文法规则语义规则decl→var-list:type{va346、对于输入的表达式(4*7+1)*2,根据下表的语法制导定义建立一棵带注释的分析树。

val:表示非终结符的整数值,综合属性,lexval是单词digit的属性 语法制导定义

产生式

语义规则

LE

print(E.val)EE1+TE.val:=E1.val+T.valET

E.val:=T.valTT1*FT.val:=T1.val*F.valTF

T.val:=F.valF(E)F.val:=E.valFdigit

F.val:=digit.lexval

6、对于输入的表达式(4*7+1)*2,根据下表的语法制导定35属性文法课堂练习课件367、请按语法制导的定义,将后缀表达式翻译成中缀表达式。注意,不允许出现冗余括号,后续表达式的文法如下:

E->EE+E->EE*E->id7、请按语法制导的定义,将后缀表达式翻译成中缀表达式。注意,37语法制导定义

产生式

语义规则

S->EprintE.codeE->E1E2+E.code=E1.code||'+'||E2.code;E.op='+'E->E1E2*IFE1.op='+'ANDE2.op='+'THENE.code="("||E1.code||')'||'*'||'('||E2.code||')';ELSEIFE1.op='+'THENE.code="("||E1.code||')'||'*'||E2.code;ELSEIFE2.op='+'THENE.code=E1.code||'*'||'('||E2.code||')';ELSEE.code=E1.code||'*'||E2.code||;E一>idE.code:=id.lexeme;语法制导定义产生式语义规则S->EprintE.c388、假设变量的说明是由下列文法生成的:DiLL,iL|:TTinteger|real1)建立一个语法制导定义,把每一个标志符的类型加在符号表中2)为1)构造一个预翻译程序

8、假设变量的说明是由下列文法生成的:391)type为综合属性,代表类型属性,

函数addtype实现向符号表中i对应项填类型信息。

语法制导定义

产生式

语义动作

DiL

D.Type:=L.Typeaddtype(i.entry,D.type)L,iL1L.Type:=L1.Typeaddtype(i.entry,L.type)L:T

L.type:=T.typeTinteger

T.type:=integerTreal

T.type:=real1)type为综合属性,代表类型属性,产生式语义动作D40b)采用递归下降分析法编写预翻译程序: ProcedureD; begin iflookahead=idthenbeginmatch(id);D.type=L;addtype(id.entry,D.type)endelseerror endFunctionL:DataType;beginiflookahead=’,’thenbeginmatch(‘,’);iflookahead=idthenbeginmatch(id);L.Type=L;addtype(id.entry,L.type);return(L.type)endelseerrorendelseiflookahead=’:’thenbeginmatch(‘:’);L.Type=T;return(L.Type)endelseerrorend

FunctionT:DataType;beginiflookahead=integerthenbeginmatch(integer);return(integer)endelseiflookahead=realthenbeginmatch(real);return(real)endelseerrorend

b)采用递归下降分析法编写预翻译程序:elseifl41

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论