这个例子不是 Algol 68 的正确语法,但很可能是 Algol 68 风格的伪代码。它清楚地包含一些注释,用于解释您可能在算法描述中找到的语句。
在Lindsey 和 Van der Meulen所著的“ Algol 68 的非正式介绍”一书中以及Algol 68 修订报告中包含了在 Algol 68 中使用信号量的类似示例。
您不会在 Algol 68 中编写up和down原语,因为它们已经以提供的语言作为原语实现。信号量操作的不可分割的原子性质需要内置它们。自己实现它们将使它们成为非原子和不间断的,使它们作为操作信号量无用!然而,学习这样一个原始的内部是什么是有指导意义的。
Algol 68 使用sema声明和所讨论的up和down操作提供了 semaphore 的声明。它还提供了它们可以在其中操作的并行子句,这些子句由par符号和逗号,
分隔符指示。(分号;
用于顺序、非并行操作)。
因此:
sem 信号量;¢ 声明包含整数的信号量 ¢
信号量:=级别9;¢ 将信号量内的整数初始化为 9¢
向上 信号量的值;¢ 信号量内的整数加一¢
下降 信号量;¢ 信号量内的整数减一 ¢
int value := level semaphore ; ¢ 提取信号量中包含的整数的值 ¢
因此,您引用的文本翻译错误。应该说,显示的算法是对Algol 68 中信号量运算符如何工作的描述。它不是 Algol 68 的一部分,而是对上下操作员实际做什么的解释。您不需要在 Algol 68 中实现它们,而是以其他语言实现它们作为示例来演示它们是如何工作的。Algol 68 已经包含计数信号量。其他一些语言(不是 Algol 68)将包含二进制信号量。
由于描述中的算法非常明确,因此编码应该不难。如果您已经指出代码应该以哪种语言显示(包含二进制信号量),我们可以提供帮助!您误译并误解了您的书要求您做什么。
我会早点回答,但忘了检查algol68标签!