4

在 Gforth 中输入'a'时,字符的 ASCII 编号(与使用key单词并按将放入堆栈的数字相同a)被放入堆栈。

例如,这不适用于' '(空格)。反而:

' '  ok
.s <1> 34384939008  ok

数字“应该”是 32。什么解释了这种行为?' '除了手动将对应于(空格)的 ASCII 数字放入堆栈之外,还能做些什么 呢?

4

1 回答 1

10

这种'a'语法对于 Forth 来说是相当新的。它被添加为传统语法之上的扩展,将所有内容解析为空格分隔的标记。一个原子标记也是如此'a',然后将其解析为字符文字。

现在,' '不是原子标记,因为它包含一个空格字符。相反,它被解析为两个'标记。它实际上是完全有效的 Forth 代码,因为'它是一个 Forth 单词(称为“tick”)。在您的示例中,第一个刻度对第二个起作用。结果 ,34384939008是 的 xt '

该怎么做?获取字符 ASCII 码的传统单词是CHAR[CHAR]。第一个在解释模式下工作,第二个在编译模式下工作。 但是它们不适用于空格字符的特定情况,因为同样,所有空格都被解析掉了。

但是,还有另一个词推动了 ASCII 码空格字符:BL.

于 2017-02-11T08:02:45.743 回答