在使用Crockford的JSLINT解析JavaScript源代码后,通过调用JSLINT()
提供了访问解析树的途径,即通过JSLINT.tree
如果能够分析树、基于分析进行结构性更改,并从修改后的树生成新的JavaScript代码,那将是非常强大的。
是否有一个开源项目是基于JSLINT,提供从解析树转换回JavaScript的功能呢?
(这样做是否可行?也就是说,JSLINT是否保留了足够详尽的解析信息来使所有重要细节都不遗漏?)
在使用Crockford的JSLINT解析JavaScript源代码后,通过调用JSLINT()
提供了访问解析树的途径,即通过JSLINT.tree
如果能够分析树、基于分析进行结构性更改,并从修改后的树生成新的JavaScript代码,那将是非常强大的。
是否有一个开源项目是基于JSLINT,提供从解析树转换回JavaScript的功能呢?
(这样做是否可行?也就是说,JSLINT是否保留了足够详尽的解析信息来使所有重要细节都不遗漏?)
虽然不是开源的,但正好符合OP的要求:我们的JavaScript前端。
这个前端基于我们的DMS软件重构工具包,它是通用可定制编译器技术,适用于构建任意代码分析器和转换器。DMS有许多可用于许多语言(COBOL、Java、C++等)的前端。
特别是,基于DMS的解析器(包括其JavaScript解析器)收集了重新生成源树所需的完整信息,包括标记的列起始和结束信息、数字文字的基数、字符串引号约定的差异等,以便在未应用任何转换时进行忠实打印。DMS还提供许多其他有用的树处理服务,如访问者、符号表构建支持、流分析支持、模式匹配以及源到源的转换。
它能够提供所有这些服务,因为它的工程成本已经分摊到了许多许多语言和应用程序中。
我们这样做是因为正如Daniel所说,“可能性是无限的”。他举了一个例子,即对代码进行仪器化以监视运行时故障;这种仪器化是一个非常有用的想法,我们基于这个想法构建了测试覆盖工具。
null
或undefined
,并且您希望在运行时自动检查此内容。在解析树中查找声明此类参数的函数,并在这些函数的开头插入运行时检查将是微不足道的。 - Daniel EarwickerYUICompressor
在多大程度上使用这些信息,但它可能会使用。