使用 Gforth 获取 ASCII 码
Getting ASCII code with Gforth
当在 Gforth 中输入 'a'
时,字符的 ASCII 码(与使用 key
单词并按 a) 入栈。
这不适用于 ' '
(space)。相反:
' ' ok
.s <1> 34384939008 ok
数字“应该”是 32。如何解释这种行为?还有什么可以做的——除了手动将对应于 ' '
(space) 的 ASCII 码放入堆栈之外?
这个 'a'
语法对 Forth 来说是相当新的。它被添加为传统语法之上的扩展,将所有内容解析为 whitespace-delimited 标记。所以 'a'
是一个原子标记,然后将其解析为字符文字。
现在,' '
不是原子标记,因为它包含 space 字符。相反,它被解析为两个 '
标记。它实际上是完全有效的 Forth 代码,因为 '
is a Forth word (called "tick")。在您的示例中,第一个滴答声对第二个滴答声起作用。结果 34384939008
是 '
.
的 xt
该怎么做?获取字符ASCII码的传统说法是CHAR
或[CHAR]
。第一个在解释模式下工作,第二个在编译模式下工作。 但是 它们不适用于 space 字符的特殊情况,因为同样,所有白色 space 都被解析掉了。
不过,还有一个词压ASCII码space字符:BL
.
当在 Gforth 中输入 'a'
时,字符的 ASCII 码(与使用 key
单词并按 a) 入栈。
这不适用于 ' '
(space)。相反:
' ' ok
.s <1> 34384939008 ok
数字“应该”是 32。如何解释这种行为?还有什么可以做的——除了手动将对应于 ' '
(space) 的 ASCII 码放入堆栈之外?
这个 'a'
语法对 Forth 来说是相当新的。它被添加为传统语法之上的扩展,将所有内容解析为 whitespace-delimited 标记。所以 'a'
是一个原子标记,然后将其解析为字符文字。
现在,' '
不是原子标记,因为它包含 space 字符。相反,它被解析为两个 '
标记。它实际上是完全有效的 Forth 代码,因为 '
is a Forth word (called "tick")。在您的示例中,第一个滴答声对第二个滴答声起作用。结果 34384939008
是 '
.
该怎么做?获取字符ASCII码的传统说法是CHAR
或[CHAR]
。第一个在解释模式下工作,第二个在编译模式下工作。 但是 它们不适用于 space 字符的特殊情况,因为同样,所有白色 space 都被解析掉了。
不过,还有一个词压ASCII码space字符:BL
.