编译原理笔记【第三章 控制结构】


控制结构

规定程序语句程序单元执行流程控制机制

分为:
语句级控制结构
单元级控制结构


第一节 语句级控制结构

  • 语句级控制结构
    规定语句执行流程的控制

  • 三种 语句级控制结构
    顺序
    选择(分支)
    重复(循环)

1. 顺序

  • 语言可用的、最简单的控制结构
    A;
    B;

  • 复合语句
    若干个语句可以组合在一起。逻辑上作为一条语句对待
    如{…}

2. 选择

选择控制结构允许在某些可选择的语句选择其中一条来执行

单选: if then
二选一: if then else
多选一:嵌套 if then else

3. 重复

  • 两种情况
    计数器制导
    条件制导

  • 计数器制导
    当预先知道重复次数时,在循环计数器值的有限集合上重复
    (for循环)

  • 条件制导
    不知道次数,只知道条件
    (while, do-while)

4. 语句级控制结构讨论

  • 顺序、选择、重复是一定意义的抽象
    顺序、选择、重复可以帮助程序员组织语句的控制流程
    顺序、选择、重复是基本的语句级控制结构

    理论证明,使用顺序、选择和重复就可对计算机所有可能的算法进行编码

  • 抽象控制结构,控制既简单又有效
    抽象控制结构是对程序计数器(PC)的值进行修改的抽象
    顺序:PC(自动)+1 的抽象
    选择和重复:显式修改PC值的抽象
    通过无条件转移条件转移指令实现

  • 显式控制结构:通过无条件转移条件转移指令修改PC的低级控制机制
    抽象控制结构比显式控制结构更好
    程序员通过使用顺序、选择和重复就能表达控制语句执行的意图

  • 采用抽象控制结构有利于程序设计
    高级语言控制结构最终要由条件转移和无条件转移的低级代码实现
    由编译器生成有效的低级代码(程序员不可见)


第二节 单元级控制结构

  • 规定程序单元之间控制流程的机制
    最简单的机制是ALGOL60的分程序
    在程序执行的过程中,遇到一个分程序,就建立
    在程序顺序执行的过程中,遇到一个分程序,就建立一个新的引用环境,并执行这个分程序
    更强的机制允许程序员通过显式调用单元(例如函数和过程),把控制从一个单元转移到另一个单元

  • 四种单元级控制结构
    显式调用
    异常处理
    协同程序
    并发单元

1. 显式调用

  • 每个子程序(函数、过程)都有一个名字,通过名字进行程序单元的调用。
    调用语句将控制转向被调用单元
    被调用单元执行完后,又将控制返回主调用单元,并继续执行紧跟在调用语句后面的语句(返回地址

  • 例如:C语言的函数

  • 当控制从调用单元转向被调用单元时,还可进行参数传递
    参数传递可实现单元之间的通信
    单元之间的通信也可以通过全局变量非局部变量来进行(副作用

  • 参数传递
    每次调用允许传递不同的数据(实际参数),为单元间的通信提供了灵活性
    也提高了程序的可读性和可修改性

2. 异常处理

  • 异常:导致程序正常执行中止的事件
    要靠发信号来引发
    异常条件来表示

  • 异常处理机制不包括在程序的主流程中,以保证程序的逻辑按基本算法进行

  • 异常处理基本有两种
    基本的是处理完异常返回原程序,另一种是由异常处理决定去向

  • 异常处理是C++的一个主要特征
    它提出了出错处理更加完美的方法
    设置陷阱 抛出异常 捕获异常
    try throw catch

3. 协同程序

多个程序单元交错的执行——协同程序

协同程序是通过协版作来完成,在任一指定时刻只有一个协同程序在运行,并且这个正在运行的协同程序只在必要时才会被挂起。
伪并行

在这里插入图片描述

4. 并发单元

多个进程的执行概念上是可重叠的,即正在执行的进程尚未中止,另一个进程可能开始执行,多个程序单元“并行”活动。例如“生产者-消费者”问题
在这里插入图片描述正确访问缓冲区:同步与互斥问题

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值