自定义翻译

时间:2013-02-06 16:29:39

标签: forth

我正在尝试在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 ;

1 个答案:

答案 0 :(得分:4)

你的翻译确实有效,它只是没有阻止,看到输出中的前两个单词:

num exec lit lit exec num num num ...

但是,你在某个地方留下了0,这就是你创建堆栈溢出的原因,你可以在代码中使用~~来检查堆栈并跟踪未使用的0

Bernd Paysan向GForth介绍了Recognizers,我建议你看看它们,因为它们可以减轻你编写翻译的任务。