当前位置:高等教育资讯网  >  中国高校课件下载中心  >  大学文库  >  浏览文档

吉林大学:《编译原理》课程教学资源(PPT课件讲稿)原子语句的中间代码

资源类别:文库,文档格式:PPT,文档页数:26,文件大小:159.5KB,团购合买
输入输出语句: S →Write(E) E.tuple (WRITE, E.Arg); S → Read(V) V.tuple (READ, V.Arg) 语法制导: S → Read(V) #READ S → Write(E) #WRITE
点击下载完整版文档(PPT)

原子语句的中间代码 输入输出语句: s→Read()V. tuple (READ, V Arg) S→ Write(E)E. tuple (WRITE, E. Arg) 语法制导: s→Read(V)#READ S→ Write(E)#NR|TE

原子语句的中间代码 输入输出语句: S →Write(E) E.tuple (WRITE, E.Arg); S → Read(V) V.tuple (READ, V.Arg) 语法制导: S → Read(V) #READ S → Write(E) #WRITE

赋值语句: 赋值语句形式: V: =E pt ptr f::=E str 赋值语句的中间代码形式:(AsS|GN,Arg1,Arg2,n) 或(FL0AT,Arg1,Arg2) S→L:=RL. tuple R. tuple (ASSIGN, R, Arg, L Arg, size) E(FLOAt, R Arg, L Arg) 语法制导:S→:=R#ASS|GN

赋值语句: 赋值语句形式: V:=E Vptr:=V1 ptr f:=E Vstr:=V1 str 赋值语句的中间代码形式:(ASSIGN,Arg1,Arg2,n) 或 (FLOAT,Arg1,Arg2) S → L:= R L.tuple R.tuple (ASSIGN, R,Arg, L.Arg, size) 或 (FLOAT, R.Arg, L.Arg) 语法制导: S →L:=R #ASSIGN

过函调用语句 s→id(E1,E2, E1- tuple En tuple (ACT, E. Arg) 传给形参 (ACT, En. Arg) (CALL. , result) 或(GALL,<f)

过函调用语句 S → id(E1,E2,…,En) E1.tuple … En.tuple (ACT,E1.Arg) … (ACT,En.Arg) (CALL,,result) 或(CALL,) 传给形参

形参实参结合中间代码 ( VALACT,E;.Arg, offset;,size1)…值参 ( VARACT,E;,Arg, offset;,size;)…变参 (FUNCACT, E; Arg, offset, s;i ).. 函数参数 (PROACT, E: Arg, offset, size 过程参数 过/函调用代码: (ca|,,true, result)静态转向地址 (ca||,, false, result)动态转向地址

形参实参结合中间代码: (VALACT, Ei.Arg, offseti, sizei)……值参 (VARACT, Ei.Arg, offseti, sizei)……变参 (FUNCACT, Ei.Arg, offseti, sizei)……函数参数 (PROACT, Ei.Arg, offseti, sizei)……过程参数 过/函调用代码: (call ,, true, result) 静态转向地址 (call ,, false, result) 动态转向地址

G0T0语句和标号语句的中间代码 LABEL L1,L2,L空 S->GOTO (JUMP, ARG L S-L. S LABEL, ARG L S tuple

GOTO语句和标号语句的中间代码 LABEL L1 ,L2 ,...,Ln 空 S→GOTO Li (JUMP, ARG(Li ) ) S→Li :S ( LABEL,ARG(Li) ) S.tuple

结构语句的中间代码 C条件语句的中间代码 While语句的中间代码 C Repea语句的中间代码 CFor语句的中间代码 G Case语句的中间代码

结构语句的中间代码  条件语句的中间代码  While语句的中间代码  Repeat语句的中间代码  For语句的中间代码  Case语句的中间代码

条件语句的中间代码 IF E THEN S, ELSE S2 IF E THEN S E Tuple E Tuple (JUMPO, E. Arg, S El seL : (JUMPO, E. Arg, S OutL) S Tuple S1. Tuple 〔JUMP,S.0utL) (LABEL, S OutL (LABEL. S El seL) … s2 Tuple LABEL, S outL)

条件语句的中间代码 IF E THEN S1 ELSE S2 E.Tuple (JUMP0,E.Arg,S.ElseL) S1.Tuple (JUMP,S.OutL) (LABEL,S.ElseL) S2.Tuple (LABEL,S.OutL) IF E THEN S E.Tuple (JUMP0,E.Arg,S.OutL) S1.Tuple (LABEL,S.OutL)

条件语句代码生成原理 在f处: 产生标号S. Esel和S.0utL 在then处: 产生中间代码(JUMP0,E.Arg,S. EIsel) ÷在else处 产生中间代码(JUMP,S.0utL) LABEL, S ElseL) 在S出口处:( LABEL,S.outL)

条件语句代码生成原理  在if处: 产生标号 S.ElseL和S.OutL;  在then处: 产生中间代码(JUMP0, E.Arg, S.ElseL) ;  在else处: 产生中间代码 (JUMP, S.OutL) ( LABEL, S.ElseL)  在S出口处: (LABEL, S.OutL )

条件语句代码生成的L文法 s if startif e then Testf s, elsePart ElsePart =y else #GenJump #GenEl seL S2 #GenOutL E| sePat→λ# GenEI sel # Start:生成两个标号S. EIsel,S.0utL #TestIF: Generate JUMPO, E. arg, SEl seL #GenJump: Generate(JUMP, ElsePart OutL # I seL: Generate LABEL ElsePart. El seL #GenOutL: Generate(LABEL, ElsePart OutL

条件语句代码生成的LL文法 S → if #StartIF E then #TestIF S1 ElsePart ElsePart → else #GenJump #GenElseL S2 #GenOutL ElsePart →  #GenElseL #StartIF :生成两个标号S.ElseL,S.OutL #TestIF : Generate(JUMP0, E.Arg , S.ElseL ) #GenJump : Generate(JUMP, ElsePart.OutL ) #GenElseL : Generate(LABEL, ElsePart.ElseL) #GenOutL : Generate(LABEL, ElsePart.OutL )

While语句的中间代码 s→) WHILE E D0S LABEL, S Start) E Tuple (JUMPo, E. Arg, S OutL S, Tuple :-JUMP, S StartD (LABEL, S OutL)

While语句的中间代码 S → WHILE E DO S1 E.Tuple (JUMP0,E.Arg,S.OutL) S1.Tuple (JUMP,S.StartL) (LABEL,S.OutL) (LABEL,S.StartL)

点击下载完整版文档(PPT)VIP每日下载上限内不扣除下载券和下载次数;
按次数下载不扣除下载券;
24小时内重复下载只扣除一次;
顺序:VIP每日次数-->可用次数-->下载券;
共26页,试读已结束,阅读完整版请下载
相关文档

关于我们|帮助中心|下载说明|相关软件|意见反馈|联系我们

Copyright © 2008-现在 cucdc.com 高等教育资讯网 版权所有