我想在套接字对象上设置DSL来设置端口号。
我希望DSL能够按照此API设置主机端口号:
host: 8080
如果这是一个字符串操作(例如host: localhost
),我可以使用parse-word
。但这并不理想,因为Forth非常擅长解析数字,重新发明轮子是一件坏事。
Forth中是否有任何标准单词取出输入字符串中的第一项,将其解析为数字并将其推入堆栈?
答案 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.
。它甚至不会处理负数。)