类似于" parse-word"的字,但用于将整数推入堆栈

时间:2016-01-12 03:16:02

标签: forth gforth

我想在套接字对象上设置DSL来设置端口号。

我希望DSL能够按照此API设置主机端口号:

host: 8080

如果这是一个字符串操作(例如host: localhost),我可以使用parse-word。但这并不理想,因为Forth非常擅长解析数字,重新发明轮子是一件坏事。

Forth中是否有任何标准单词取出输入字符串中的第一项,将其解析为数字并将其推入堆栈?

1 个答案:

答案 0 :(得分:3)

>NUMBER是一个ANS单词(在CORE中),它将字符串转换为数字,但使用起来很麻烦。你的Forth可能有一个更灵活的变种。您的Forth可能还支持#16 $10 %10000等语法,无论BASE如何,所有语法都会计算为16。所以有一种方法可以做到这一点:

: parse-num ( "number" -- n | d | r )  parse-word evaluate ;

或者使用>NUMBER,并且仅返回单个单元格号码:

: parse-num ( "number" -- n )
  0. parse-word >number ( d c-addr u )
    abort" not a number" drop
    abort" double received where single-cell number expected" ;

如果返回的字符串不是在PARSE-WORD的整个输出转换为数字时产生的空字符串,或者双字母的高位不是0,则会中止如果输入了一个单元格无法表示的数字,就会出现这种情况。 (注意。>NUMBER也不会处理双重数字语法。它会停止在点处解析1.。它甚至不会处理负数。)