3

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 ;
4

1 に答える 1

4

インタープリターは機能しますが、ブロックされないだけです。出力の最初の数単語を確認してください。

num exec lit lit exec num num num ...

0ただし、スタックのどこかにを残しておくと、スタック オーバーフローが発生します。~~コードで使用して、スタックをチェックし、未消費の を追跡できます0

Bernd Paysan はRecognizersを GForth に導入しました。インタープリターを作成するタスクを容易にするので、それらを参照することをお勧めします。

于 2013-02-13T17:25:20.123 に答える