4

我想实现一个用于在套接字对象上设置端口号的DSL 。

我希望 DSL 遵循这个 API 来设置主机端口号:

host: 8080

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

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

4

1 回答 1

4

>NUMBER是一个 ANS 词(在 CORE 中),将字符串转换为数字,但使用起来很麻烦。您的 Forth 可能有一个更灵活的变体。您的 Forth 可能还支持类似 的语法#16 $10 %10000,无论BASE. 因此,一种方法是:

: 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.在点处停止解析。它甚至不处理负数。)

于 2016-01-22T21:54:42.640 回答