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

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

资源类别:文库,文档格式:PPT,文档页数:19,文件大小:125KB,团购合买
输入输出语句: 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|G,Arg1,Arg2,n) 或(FL0AT,Arg1,Arg2) S→L:=RL. tuple R. tuple (ASSIG, 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 赋值语句的中间代码形式:(ASSIG,Arg1,Arg2,n) 或 (FLOAT,Arg1,Arg2) S → L:= R L.tuple R.tuple (ASSIG, R.Arg, L.Arg, size) 或 (FLOAT, R.Arg, L.Arg) 语法制导: S →L:=R #ASSIGN

过函调用 f(E1,E2,…,En) E1. tuple tuple (ACT, E. Arg) 传给形参 (ACT, E. Arg) (CALL, , result) 或(GALL

过函调用 f(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 s→> F E THEN S1 Tuple E Tuple (JUMPO, E. Arg, S EI sel) (JUMPO, E. Arg, S OutL)\ L s, tuple S, Tuple KJUMP, S OutL) (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) S → IF E THEN S1 E.Tuple (JUMP0,E.Arg,S.OutL) S1.Tuple (LABEL,S.OutL)

条件语句代码生成的L文法 Sif start e then testf s, elsepart Endf ElsePart =y else #GenJump #GenEl seL S2 #GenOutL E丨 sePat→3#Gen0utL #StartIF: PUSH(S ElseL); PUSH(S outL iTest F: Generate(JUMPO, Sem[top]. Arg, Sem[top-2]); POP(1) #GenJump: Generate( JUMP, Sem[top]. arg #GenEI seL Generate(LABEL, Sem[top-1]. Ar g) #GenOutL: Generate(LABEL, Sem[top. arg) HEnd IF: POP(2)

条件语句代码生成的LL文法 S→if #StartIF E then #TestIF S1 ElsePart #EndIF ElsePart → else #GenJump #GenElseL S2 #GenOutL ElsePart →  #GenOutL #StartIF:PUSH(S.ElseL);PUSH(S.OutL); #TestIF:Generate(JUMP0,Sem[top].Arg,Sem[top-2]);POP(1) #GenJump:Generate(JUMP,Sem[top].Arg ) #GenElseL: Generate(LABEL,Sem[top-1].Arg) #GenOutL: Generate(LABEL, Sem[top].Arg) #EndIF: POP(2)

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)

While语句代码生成的LL文法 S- while startwhile e do twhiletest S, Fini shwhile #StartWhi le: PUSH (S Start; PUSH(S OutL) Generate(LABEL, Sem[top-1]. Arg) wHi leTest: Generate(JUMPO, Sem[top]. Arg, Semltop-1] Ar g) P0P(1); H FinishWhi le: Generate(JUMP,S. StartL) Generate LABEL, S OutL) POP(2)

While语句代码生成的LL文法 S → while #StartWhile E do #WhileTest S1 #FinishWhile #StartWhile :PUSH(S.StartL);PUSH(S.OutL); Generate(LABEL,Sem[top-1].Arg) #WhileTest: Generate(JUMP0,Sem[top].Arg,Sem[top-1].Arg) POP(1); # FinishWhile: Generate(JUMP, S.StartL) Generate(LABEL, S.OutL) POP(2)

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

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

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