BCPL 八进制数值常量

Ren*_*lle 5 constants numeric bcpl

由于有人问我使用前缀“0x”表示十六进制数字背后的原因,我一直在深入研究 BCPL 的历史。

在我的搜索中,我偶然发现了这个代币背后历史的非常好的解释。(为什么十六进制数要加上0x前缀?

然而,从这篇文章中,又引发了另一个问题:

对于八进制常量,BCPL 是否使用8 <digit>(根据规范:http://cm.bell-labs.com/cm/cs/who/dmr/bcpl.pdf)或是否使用#<digit>(根据http://rabbit.eng .miami.edu/info/bcpl_reference_manual.pdf)或者这两种语法在该语言的不同实现中都有效吗?

我还在这里找到了第二个答案,它使用了 # 语法,这进一步引起了我对这个主题的兴趣。(为什么用前导零来表示八进制数?

任何历史见解都将受到高度赞赏。

pax*_*blo 6

BCPL 的语法有许多细微的变化。

例如,虽然我们使用的单元具有 16 位单元(因此可以从位于的字地址(字地址是字节地址的一半)中x!y获取 16 位x + y,但我们还需要从字节地址中提取和字节值(因为我们主要是在 6809 字节可寻址 CPU 上创建操作系统和控制软件)。

因此除了:

x!y - get word from byte address (x + y) * 2
Run Code Online (Sandbox Code Playgroud)

我们也有

x!%y - get byte from byte address (x * 2) + y
x%!y - get word from byte address x + (y * 2)
x%%y - get byte from byte address x + y
Run Code Online (Sandbox Code Playgroud)

我非常确定它们是特定于实现的,因为我从未在其他地方见过它们。早在语言标准像今天这样重要之前,BCPL 就已经存在了。

规范的语言规范应该是 Richards 编写该语言以来的早期规范(您的第二份文档是大约十年后的 Essex BCPL 实现)。但请记住,Project MAC 是最早的迭代 - 之后也有很多进步。

例如,BCPL 用户指南的 2013 年修订版(请参阅Martin 的主页)指定#b,#o#x作为各种非十进制基数的前缀。