给出下面说明语句的文法: D→namelist attrilist|attrilist(D)
问题详情
给出下面说明语句的文法: D→namelist attrilist|attrilist(D) namelist→i,namelist|i attrilist→A attrilist|A A→fixed|float|binary|decimal|real|complex D→attrilist(D)的含义是:在括号中的声明提到的所有名字有attrilist中给出的属性,而不管声明嵌套多少层。试给出该文法的语法制导翻译文法。
请帮忙给出正确答案和分析,谢谢!
参考答案
正确答案:说明语句将信息登记人符号表语义描述如下:D→namelist attrilist{D.type=nametist attrilist}D→(D)attrilist{enter(attrilist.nameD.type)}namelist→inamelist{enter(i.namenamelist.type)}namelist→i{namelist.type=i}attrilist→A attrilist{attrilist.type=A.type}attrilist→A{attrilist.type=A)A→fixed{A.type=fixed}A→f10at{A.type=float}A→binary{A.type=binary}A→decimal{A.type=decimal}A→real{A.type=real}A→complex{A.type=complex}其中过程enter(nametype)将名字name填入符号表并给出此名字类型type。
说明语句将信息登记人符号表,语义描述如下:D→namelistattrilist{D.type=nametistattrilist}D→(D)attrilist{enter(attrilist.name,D.type)}namelist→i,namelist{enter(i.name,namelist.type)}namelist→i{namelist.type=i}attrilist→Aattrilist{attrilist.type=A.type}attrilist→A{attrilist.type=A)A→fixed{A.type=fixed}A→f10at{A.type=float}A→binary{A.type=binary}A→decimal{A.type=decimal}A→real{A.type=real}A→complex{A.type=complex}其中过程enter(name,type)将名字name填入符号表,并给出此名字类型type。