亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 Go 中解析 s 表達式

在 Go 中解析 s 表達式

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

2 回答

?
夢里花落0921

TA貢獻1772條經驗 獲得超6個贊

在 Rosetta 代碼中有一個在 Go 中實現的 S 表達式解析器:

Go 中的 S 表達式解析器

它可能會讓您了解如何解決問題。


查看完整回答
反對 回復 2021-10-18
?
墨色風雨

TA貢獻1853條經驗 獲得超6個贊

您可能需要有一個接口“Sexpr”并確保您的符號和列表數據結構與接口匹配。然后,您可以使用 S 表達式只是“單個符號”或“S 表達式列表”這一事實。

也就是說,如果第一個字符是“(”,它不是一個符號,而是一個列表,所以開始累積一個 []Sexpr,一次讀取每個包含的 Sexpr,直到在輸入流中遇到“)”。任何包含的列表都已經消耗了其終端“)”。

如果它不是“(”,則您正在閱讀一個符號,因此請閱讀直到遇到非符號組成的字符,然后取消使用它并返回該符號。


查看完整回答
反對 回復 2021-10-18
  • 2 回答
  • 0 關注
  • 274 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號