我正在尝试在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 ;
答案 0 :(得分:4)
你的翻译确实有效,它只是没有阻止,看到输出中的前两个单词:
num exec lit lit exec num num num ...
但是,你在某个地方留下了0
,这就是你创建堆栈溢出的原因,你可以在代码中使用~~
来检查堆栈并跟踪未使用的0
Bernd Paysan向GForth介绍了Recognizers,我建议你看看它们,因为它们可以减轻你编写翻译的任务。