- 1、本文档共8页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
编译原理第08章 语法制导翻译和中间代码生成
翻译规则(二) V ?i { V .PLACE:=ENTRY(i); V.OFFSE:=null} elist ? elist1,E { T:=NEWTEMP; k:=elist1.DIM+1; dk:=LIMIT(elist1.ARRAY,k); GEN(*,elist1.PLACE, dk,T); GEN(+,E.PLACE,T,T); elist.ARRAY:=elist1.ARRAY; elist.PLACE:=T; elist.DIM:=k} elist ? i[E { elist.PLACE:= E.PLACE; elist.DIM:=1; elist.ARRAY:= ENTRY(i)} 结构(记录)说明和引用的翻译 结构(记录)是由已知类型的数据组合起来的一种数据类型。 结构的基本形式 结构说明的文法 主要语义变量说明: 对于非终结符type、f和n,我们分别用不同的语义变量LEN表示长度,i.NAME表示i当前所代表的名字,f.NAME表示分量名。n.VAL表示整数值。语义过程FILN (NAME,L)和FILO(NAME,L)将分别把分量名表中名为NAME的项的长度LEN和OFFSET填为L。 处理结构类型说明的基本语义动作 结构的基本形式 Struct date{ int day; char month_name[4]; int year; }; 通常,程序设计语言中对结构的引用只限于对其成员(分量)的引用,不提供访问整个结构的手段(不过,PASCAL中可把记录作为一个单位来复制)。 引用有两种方式 一种形式为:结构(记录)名.成员(分量)名 另一种形式是通过指针访问 结构说明的文法 type ? struct {f1}; type ?int type ?char type ?pointer f1 ?f1;f|f f ? type i| type i[n] 处理结构类型说明的基本语义动作 f ? type i {f.NAME:=i.NAME; f.LEN:= type.LEN; FILN(i.NAME, f.LEN)} f ? type i[n] {f.NAME:=i.NAME; f.LEN:= type.LEN*n.VAL; FILN(i.NAME, f.LEN)} f1 ?f {FILO(f.NAME,0); /*第一分量的相对数为0*/ f1.LEN:= f.LEN} f1 ?f1(1);f {FILO(f.NAME,f1 (1).LEN); f1.LEN:= f1(1).LEN, +f1.LEN} type ? struct ‘{’ f1 ‘}’ {type.LEN:=f1.LEN} type ?char {type.LEN:=1} type ?int {type.LEN:=4} type ?pointer {type.LEN:=4} * 0512 * 0522 ab or cd and ef的四元式代码 (1) if ab goto E.ture (2) goto (3) (3) if cd goto (5) (4) goto E.false (5) if ef goto E.ture (6) goto E.false If ab or cd and cf then S1 else S2的四元式代码 (1) if ab goto (7) (2) goto (3) (3) if cd goto (5) (4) goto (p+1) (5) if cf goto (7) (6) goto (p+1) (7) (关于S1的四元式) ┇ (p) goto (q) (p+1) (关于S2的四元式) ┇ (q)??? 整个布尔表达式的真出口 整个布尔表达式的假出口 控制结构的翻译 条件转移语句 开关语句 for循环语句 出口语句 goto语句 过程调用的四元式产生 条件转移语句 条件转移语句的文法 文法的改写及文法的语义动作 条件转移语句的文法 G[S]: (1)S ? if E then S (2) S ? if E then S else S (3) S ? while E do S (4) S ? begin L end (5) S ? A (6) L ? L; S (7) S ? S 其中各非终结符号的意义是: S——语句 L——语句串 A——赋值句 E——布尔表达式 文法的改写与语义动作 G’[S]: (1)S ? C S1 (2) S ? Tp S2 (3) S ? Wd S3 (4) S ? begin L end (5) S ? A (6) L ?
您可能关注的文档
最近下载
- 2025年湖南科技职业学院单招英语模拟试题(附答案解析).pdf VIP
- 2025年高考数学重点题型归纳精讲精练5.4三角形四心和奔驰定理(新高考地区)(原卷版) .docx VIP
- 新生儿窒息复苏试卷附有答案.docx
- 三 气体压强.ppt VIP
- 图解---“健康中国2030”规划纲要-医学课件.pptx
- 历史:第6课《中古时代的欧洲》课件 (川教版九年级上).ppt
- DeepSeek-清华大学104页《DeepSeek:从入门到精通》.pptx
- FANUC 0i-MB操作说明书 完整版.pdf
- (八省联考)2025年新高考适应性演练 政治试卷合集(含答详解案).docx
- 赤泥坝施工方案.doc
文档评论(0)