3
在Gforth中输入'a'
时,字符的ASCII编号(将通过使用key
字并按a将放入堆栈的编号相同)被放入堆栈。使用Gforth获取ASCII代码
这不起作用,例如与' '
(空间)。相反:
' ' ok
.s <1> 34384939008 ok
数量“应该”是32如何解释这种现象?除了手动将相应于' '
(空格)的ASCII码放在堆栈上之外,还可以做些什么呢?
在Gforth中输入'a'
时,字符的ASCII编号(将通过使用key
字并按a将放入堆栈的编号相同)被放入堆栈。使用Gforth获取ASCII代码
这不起作用,例如与' '
(空间)。相反:
' ' ok
.s <1> 34384939008 ok
数量“应该”是32如何解释这种现象?除了手动将相应于' '
(空格)的ASCII码放在堆栈上之外,还可以做些什么呢?
这个'a'
语法对于Forth来说是相当新的。它是作为扩展名添加到传统语法之上的,它将所有内容解析为以空格分隔的令牌。所以'a'
是一个原子标记,然后被解析为一个字符文字。
现在,' '
不是原子标记,因为它包含空格字符。相反,它被解析为两个'
令牌。它实际上是完全有效的Forth代码,因为'
是一个Forth单词(叫做“tick”)。在你的例子中,第一个滴答作用在第二个。结果34384939008
是'
的xt。
怎么办?获取字符的ASCII码的传统词是CHAR
或[CHAR]
。第一个在解释模式下工作,第二个在编译模式下工作。 但是它们不适用于空格字符的特定情况,因为再次,所有空格都被解析掉。
但是,还有另一个字推动ASCII代码空间字符:BL
。
哈哈,滴答不是一个深奥的词......尴尬;-)我刚从FORTH开始,错过了。 –
只是一个问题:在运行时和编译模式下,有两个不同版本的'char'和'[char]'可能是什么原因? –
在解释的代码中,只有'CHAR'是有意义的。 但是'CHAR'和'[CHAR]'在编译代码中很有用。 '[CHAR]'在编译时工作,所以它解析程序中的下一个单词。 'CHAR'在运行时工作,所以它不能在程序文本上运行,而是在稍后输入流。这可以在例如直接的话。 –