如果您不熟悉,這里是 lis.py 的鏈接:http ://norvig.com/lispy.html我正在嘗試在 Go 中實現一個小的 lisp 解釋器。我受到 Peter Norvig 在 Python 中的 Lis.py lisp 實現的啟發。我的問題是我想不出一種稍微有效的方法來解析 s 表達式。我曾想過一個計數器,當它看到“(”時會增加 1,當它看到“)”時會減少。這樣,當計數器為 0 時,您就知道您有一個完整的表達式。但問題在于,這意味著您必須為每個單獨的表達式循環,這會使解釋器對于任何大型程序都非常慢。任何替代想法都會很棒,因為我想不出任何更好的方法。
2 回答

墨色風雨
TA貢獻1853條經驗 獲得超6個贊
您可能需要有一個接口“Sexpr”并確保您的符號和列表數據結構與接口匹配。然后,您可以使用 S 表達式只是“單個符號”或“S 表達式列表”這一事實。
也就是說,如果第一個字符是“(”,它不是一個符號,而是一個列表,所以開始累積一個 []Sexpr,一次讀取每個包含的 Sexpr,直到在輸入流中遇到“)”。任何包含的列表都已經消耗了其終端“)”。
如果它不是“(”,則您正在閱讀一個符號,因此請閱讀直到遇到非符號組成的字符,然后取消使用它并返回該符號。
- 2 回答
- 0 關注
- 274 瀏覽
添加回答
舉報
0/150
提交
取消