在 Gforth 中输入'a'
时,字符的 ASCII 编号(与使用key
单词并按将放入堆栈的数字相同a)被放入堆栈。
例如,这不适用于' '
(空格)。反而:
' ' ok
.s <1> 34384939008 ok
数字“应该”是 32。什么解释了这种行为?' '
除了手动将对应于(空格)的 ASCII 数字放入堆栈之外,还能做些什么 呢?
这种'a'
语法对于 Forth 来说是相当新的。它被添加为传统语法之上的扩展,将所有内容解析为空格分隔的标记。一个原子标记也是如此'a'
,然后将其解析为字符文字。
现在,' '
不是原子标记,因为它包含一个空格字符。相反,它被解析为两个'
标记。它实际上是完全有效的 Forth 代码,因为'
它是一个 Forth 单词(称为“tick”)。在您的示例中,第一个刻度对第二个起作用。结果 ,34384939008
是 的 xt '
。
该怎么做?获取字符 ASCII 码的传统单词是CHAR
或[CHAR]
。第一个在解释模式下工作,第二个在编译模式下工作。 但是它们不适用于空格字符的特定情况,因为同样,所有空格都被解析掉了。
但是,还有另一个词推动了 ASCII 码空格字符:BL
.