背景: 冬休み中の短いプロジェクトとして、Python と PLY を使用して、Ax (グラフ電卓用に設計された) というプログラミング言語を実装しようとしています。簡単な注意: この言語はグローバル変数のみを許可し、ポインターを多用します。
この言語で goto を実装しようとしていますが、その方法がわかりません。
私の一般的な方法は、最初に PLY を使用してコードを ast に解析し、次にそれを実行しながら実行することです。
たとえば、ステートメント
If 3
Disp 4
Disp 6
End
...に変わるだろう...
['PROGRAM',
['BLOCK',
['IF',
['CONDITION', 3],
['BLOCK',
['DISP', 4],
['DISP', 6]
]
]
]
]
...これを再帰的に実行します (読みやすくするためにインデントを追加しました)。
ast はツリーであるため、異なるノード間をジャンプする方法がわかりません。おそらく、ツリーをフラットな配列に変換して、フラットな配列['IF', ['CONDITION', 3], ['DISP', 4], ['DISP', 6]]
のインデックスを使用してコードの特定の行に移動できるようにすることを検討しましたが、これには特定の優雅さが欠けているようで、ほとんどステップのように感じます逆に(間違っているかもしれませんが)。
私はこれを見てきましたが、それがどのように機能するかを理解できませんでした。
ヘルプやヒントをいただければ幸いです。