热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

编译原理——循环语句和顺序语句的语义动作

循环语句的文法:S-IFBTHENS1|IFBTHENS1ELSES2|WHILEBDOS11.S-IFBTHENS1:代码结构图如下:S

循环语句的文法:

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编译原理网课


推荐阅读
  • 一、在androidStudio中实现tabs比较简单,新建项目就可以选择tabs模板进行创建,默认实现tabs功能:直接运行项目就可以看到效果:可以说非常简单,但是我们在实际开发 ... [详细]
  • 这篇文章将为大家详细讲解有关C#开发技巧有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。C#开发技 ... [详细]
  • 在这一期的SendMessage函数应用中,我将向大家介绍如何利用消息函数来扩展树型列表(TreeView)控件的功能相信对于树型列表控件大家十分的熟悉, ... [详细]
  • 编译原理c语言词法分析器,用C语言实现一个真正的词法分析器
    词法分析,是编译器的第一个模块,也是最简单的模块。最简单,指的是相对于编译器这种大型程序而言,与一般的代码相比还是有点复杂的 ... [详细]
  • 文本生成图像简要回顾 text to image synthesis
    摘要       文本生成图像作为近几年的热门研究领域,其解决的问题是从一句描述性文本生成与之对应的图片。近一周来,我通过阅读了近几年发表于顶会的近10篇论文,做出本文中对该方向的 ... [详细]
  • Day 5 20190120 老男孩python学习第5天 内容整理
    今天继续看MasteringPycharm的视频,一个半小时看git的教学视频:视频1小时44分钟,看了2个半小时以上https:www.youtube ... [详细]
  • SortalinkedlistinO(nlogn)timeusingconstantspacecomplexity.这道题属于人生中第一次对链表进行操作,首先,不同于C++中的st ... [详细]
  • 我目前正在使用材质库和Angular8构建搜索表单,其中可以在“垫选择”下拉选项 ... [详细]
  • helm V3版本
    1、引入(1)之前方式部署应用基本过程*编写yaml文件**deployment**Service**Ingress(负载均衡、 ... [详细]
  • 每次用到v-charts我都一阵头疼,因为明明是相同的功能,但是我好像每次用到的解决方法都不一样??每次都是在api中各种查,各种尝试…直到做了个各种数据图形的需求,决定还是好好整 ... [详细]
  • 1.Python1.数据类型1.数字整形:int浮点型:float复数型:complex布尔型:bool2.字符串字符串:String3.与 ... [详细]
  • x86x64体系探索及编程(对x86处理器介绍得最详尽又最具实践指导意义的一本书)邓志著ISBN978-7-121-18176-42012年10月出版定价:119.00元16开840页对x86处理 ... [详细]
  • xlwt是Python用来在Excel写入数据和格式化数据的工具包简单使用#0.导入xlst模块importxlwt#1.创建Workbookwbxlwt.Workbook ... [详细]
  • 本文介绍了使用PHP实现断点续传乱序合并文件的方法和源码。由于网络原因,文件需要分割成多个部分发送,因此无法按顺序接收。文章中提供了merge2.php的源码,通过使用shuffle函数打乱文件读取顺序,实现了乱序合并文件的功能。同时,还介绍了filesize、glob、unlink、fopen等相关函数的使用。阅读本文可以了解如何使用PHP实现断点续传乱序合并文件的具体步骤。 ... [详细]
  • 推荐系统遇上深度学习(十七)详解推荐系统中的常用评测指标
    原创:石晓文小小挖掘机2018-06-18笔者是一个痴迷于挖掘数据中的价值的学习人,希望在平日的工作学习中,挖掘数据的价值, ... [详细]
author-avatar
cf15ron
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有