我正试图用Gforth编写一个解释器,但它不起作用。我得到的只是一个无限的num num num num。。。
: ?refill
source nip >in @ =
if
refill drop
then
;
: inter
begin
?refill
bl word find dup
if
state @ =
if
." comp "
,
else
." exec "
execute
then
else
dup rot count >number
if
abort
then
drop drop state @
if
." lit "
['] lit , ,
else
." num "
then
then
again
;
inter
: test 10 20 ;
您的解释器确实工作,只是不阻塞,请参阅输出中的前几个单词:
num exec lit lit exec num num num ...
但是,如果在堆栈中的某个位置留下了0
,这就是创建堆栈溢出的原因,您可以在代码中使用~~
来检查堆栈并跟踪未使用的0
。
Bernd Paysan向GForth介绍了Recognizers,我建议你看看它们,因为它们会减轻你编写翻译的任务。