【问题标题】:What do "single-entry" and "single-exit" mean for a statement?“单入”和“单出”对语句意味着什么?
【发布时间】:2019-07-01 21:18:10
【问题描述】:

来自An Integrated Approach to Software Engineering By Pankaj Jalote

显然,没有任何有意义的程序可以写成简单的序列 没有任何分支或重复的语句(这也涉及 分枝)。那么,线性化控制流的目标是什么? 要实现?通过使用结构化结构。在 结构化编程,语句不是简单的赋值 语句,它是一个结构化的语句。 a的关键属性 结构化语句是它有一个 single-entry 和一个 单出口。也就是说,在执行过程中,(结构化)语句的执行从一个定义的点开始,执行 终止于一个定义的点。单进单出 语句,我们可以将程序视为(结构化的)序列 陈述。如果所有语句都是结构化语句,那么 在执行期间,这些语句的执行顺序将 与程序文本中的顺序相同。因此,通过使用 单进单出语句,之间的对应关系 可以获得静态和动态结构。

最常用的单进单出语句

Selection: if B then S1 else S2
if B then S1

Iteration: While B do S
repeat S until B

Sequencing: S1; S2; S3;...

结构化语句中的“单入”和“单出”是什么意思?

为什么最后列出的语句是单进单出? 例如,在if B then S1 else S2 中,既然它可以在S1S2 终止,为什么它是单出口?

你能给出一个不是单项的陈述吗?

你能给出一个不是单出口的陈述吗?

【问题讨论】:

  • 它不会在“S1 或 S2”处终止,它会在两者之后的单个点处终止。
  • 谢谢。你能给出一个不是单一条目的陈述吗?你能给出一个不是单出口的陈述吗?

标签: loops conditional-statements programming-languages control-structure


【解决方案1】:

在许多语言中,唯一没有单个条目的语句是那些恰好包含与位于它们之外的 gotoswitch 语句一起使用的标签的语句,以及唯一没有单个出口的语句是那些包含goto 到外部位置、触发异常或以其他方式强制堆栈展开的那些。请注意,对于函数的任何特定调用,唯一的“正常”退出点将是紧随该调用之后的代码。

对于那些从未使用过未使用这种方法的代码的人来说,单入口/单出口的概念可能不清楚。在为 Atari 2600 等 RAM 空间通常非常宝贵的平台编写代码时,可能会发现后者的示例。如果一段代码将从显示标题屏幕的代码中调用,或者从游戏逻辑中调用,并且无法提供子程序调用指令所需的两个字节的堆栈空间,这种情况并不少见跳转到代码(而不是使用“JSR”[跳转到子程序]指令),并通过检查游戏是否正在进行并跳回到“显示标题屏幕”或“执行游戏逻辑”代码。如果需要从代码中的更多位置调用这种设计,维护起来可能会很尴尬,但如果 R​​AM 真的很紧(例如,在 Atari 2600 上总共只有 128 个字节),这种技术可能是必要的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-24
    • 1970-01-01
    • 2015-04-05
    • 1970-01-01
    • 1970-01-01
    • 2011-12-28
    • 2020-10-12
    相关资源
    最近更新 更多