背景執行轉到: 由於過寒假短的項目,我想實現使用Python和PLY稱爲斧一種編程語言(專爲圖形計算器)。簡要說明:該語言只允許全局變量並大量使用指針。在AST
我試圖實現這種語言跳轉,但不知道該怎麼做。
我的一般方法,是先用簾布層的代碼解析成一個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]]
,這樣我就可以使用flat-ish數組的索引去代碼中的特定行,但這似乎缺少某種優雅,幾乎感覺像是退後一步(儘管我可能是錯的)。
我已經看了this,但無法瞭解它是如何工作的。
任何幫助或暗示,將不勝感激。
「跳」?你覺得你的意思是「跳躍」?爲什麼你會在節點之間「跳躍」?請提供一個特定的例子,您可以跳轉到任意節點。在基於樹的語言中很難找到跳躍的明智需求。 – 2011-12-27 12:12:08
我選擇實施的語言有goto語句。我想匹配規範,這就是爲什麼我需要轉到。我製作了這種基於樹的版本,因爲當時這似乎是明智的做法。我猜這是一個錯誤:還有什麼其他形式的語言? – Michael0x2a 2011-12-27 17:38:09
AX真的*需要*一個GOTO?似乎很奇怪。有無數種語言的「形式」:過程式,功能性等等。在程序語言中,Python和Java(除其他外)都沒有GOTO。這是一件非常罕見的事情。 – 2011-12-27 17:41:14