用JavaScript编写解析器,对于任何语言,显然都使用Map来存储名称映射到变量。JavaScript Map shadowing
大多数语言都允许某种方式或其他变量在内部作用域中映射到外部作用域中的一个变量。实现这一功能的理想数据结构是功能图。如果没有这一点,似乎有两种选择。
款待地图就好像它是一个功能图,创建外映射的副本,内变量添加到复制,让它成为当内范围结束垃圾收集。这是优雅的,但每次花费O(N)时间复制现有变量,因此如果在给定点处存在许多变量,则可能会变得很慢。
进入完整的命令风格,只需使用单个映射,保存旧的绑定并将其恢复到内部作用域的末尾。这很快,但不雅,且容易出错。
有没有更好的选择我错过了?关于哪种选择最好,是否有共识?
“*明显使用Map来存储名称映射到变量。*” - 为什么? – Bergi
你在编写解析器还是解释器?解析器不需要存储实际变量。 – Bergi
@Bergi那么,现在我正在为TPTP文件格式编写一个解析器,它确实需要存储实际变量。 – rwallace