【问题标题】:Getting ASCII code with Gforth使用 Gforth 获取 ASCII 码
【发布时间】:2017-02-11 04:19:44
【问题描述】:

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

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

' '  ok
.s <1> 34384939008  ok

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

【问题讨论】:

    标签: char forth gforth


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 大声笑,tick 甚至不是一个深奥的词...令人尴尬 ;-) 我刚开始使用 FORTH 并错过了。
    • 只有一个问题:运行时和编译模式下char[char]有两个不同的版本可能是什么原因?
    • 在解释代码中,只有CHAR 是有意义的。但是CHAR[CHAR] 在编译后的代码中都很有用。 [CHAR] 在编译时工作,因此它解析程序中的下一个单词。 CHAR 在运行时工作,因此它不对程序文本进行操作,而是在稍后的时间处理输入流。这可以很方便,例如直接的话。
    猜你喜欢
    • 2021-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-19
    相关资源
    最近更新 更多