自定义解释器



我正试图用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,我建议你看看它们,因为它们会减轻你编写翻译的任务。

相关内容

  • 没有找到相关文章