【发布时间】:2012-02-26 17:27:05
【问题描述】:
使用 Crockford 的 JSLINT,在调用 JSLINT() 解析一些 JavaScript 源代码后,它通过 JSLINT.tree 提供对解析树的访问
能够分析树,根据分析对其进行结构更改,然后从修改后的树生成新的 JavaScript,这将非常强大。
是否有一个基于 JSLINT 的开源项目,提供从解析树到 JavaScript 的转换?
(这是否可能,即 JSLINT 是否从解析中保留了足够完整的信息以往返所有重要的信息?)
【问题讨论】:
-
那应该有什么好处?你能提供一个可能的用例吗?
-
可能性是无限的。想想在不修改语法的情况下可以增强语义的方法(这很好,因为它不会破坏现有的编辑工具)。这是一个随机的例子:假设你说如果一个函数的参数以
_后缀命名,那么它们不能是null或undefined,并且你希望在运行时自动检查这一点。搜索解析树、查找声明此类参数的函数并在这些函数的开头插入运行时检查将是微不足道的。 -
好的,但是你为什么要首先构建整个语法树呢?我没有研究过像 UglifyJS 或 YUICompressor 这样的压缩器的来源,但我认为它们会提供一个更明智的基础。
-
1.所以你可以对整棵树进行分析和修改。为什么不构建整个语法树? 2. 快速浏览 YUICompressor 的源码可以看出它使用了 Rhino 的 Parser 类,它构建了一个完整的语法树。不知道
YUICompressor在多大程度上使用了这些信息,但它可以。
标签: javascript parsing jslint roundtrip