用JavaScript編寫解析器,對於任何語言,顯然都使用Map來存儲名稱映射到變量。JavaScript Map shadowing
大多數語言都允許某種方式或其他變量在內部作用域中映射到外部作用域中的一個變量。實現這一功能的理想數據結構是功能圖。如果沒有這一點,似乎有兩種選擇。
款待地圖就好像它是一個功能圖,創建外映射的副本,內變量添加到複製,讓它成爲當內範圍結束垃圾收集。這是優雅的,但每次花費O(N)時間複製現有變量,因此如果在給定點處存在許多變量,則可能會變得很慢。
進入完整的命令風格,只需使用單個映射,保存舊的綁定並將其恢復到內部作用域的末尾。這很快,但不雅,且容易出錯。
有沒有更好的選擇我錯過了?關於哪種選擇最好,是否有共識?
「*明顯使用Map來存儲名稱映射到變量。*」 - 爲什麼? – Bergi
你在編寫解析器還是解釋器?解析器不需要存儲實際變量。 – Bergi
@Bergi那麼,現在我正在爲TPTP文件格式編寫一個解析器,它確實需要存儲實際變量。 – rwallace