编译原理

您所在的位置:网站首页 while语句语法制导翻译 编译原理

编译原理

2023-09-04 10:03| 来源: 网络整理| 查看: 265

循环语句的文法:

S -> IF B THEN S1 |

IF B THEN S1 ELSE S2 |

WHILE B DO S1

1.S -> IF B THEN S1:

代码结构图如下:

SDT如下:

S -> IF{B.TRUE = NEWLABEL();B,FALSE = S.NEXT;} B   

THEN {LABEL(B.TRUE ) S1.NEXT = S.NEXT;} S1

NEWLABEL()表示生成一个存放标号的临时变量并返回其地址

LABEL(B.TRUE)表示将S1.CODE的入口地址赋给B.TRUE地址所指向的临时标号

也就是B.TRUE的话就会直接执行S1.CODE中的内容

其语义动作如下:

S -> IF B THEN M S1

{

   BACKPATH(B.TRUELIST,M.QUAD);

   S,NEXTLIST = MERGE(B.FALSELIST,S1.NEXTLIST);

}

2.IF B THEN S1 ELSE S2:

 

S -> IF B THEN M1 S1 N ELSE M2 S2

{

    BACKPATH(B.TURELIST,M1.QUAD);                   

    BACKPATH(B.FALSELIST,M2.QUAD);

   S.NEXTLIST = MERGE(MERGE(S1.NEXTLIST,N.NEXTLIST),S2.NEXTLIST);

}

其中,BACKPATH表示回填,M1.QUAD 和 M2.QUAD分别表示 S1.CODE 和 S2.CODE 的入口地址

MERGE()表示合并

3.WHILE B DO S1:

S -> WHILE M1 B DO M2 S1

{

   BACKPATH(S1.NEXTLIST ,M1.QUAD);

   BACKPATH(B.TRUELIST,M2.QUAD);

   B.FALSELIST = S.NEXTLIST;

}

4.S -> S1S2:

S -> S1 S2

    BACKPATH(S1.NEXTLIST,M.QUAD);

    S2.NEXTLIST = S.NEXTLIST;

}

参考视频:哈工大MOOC编译原理网课



【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3