从JSLINT解析树生成JavaScript

从JSLINT解析树生成JavaScript,javascript,parsing,jslint,roundtrip,Javascript,Parsing,Jslint,Roundtrip,对于Crockford,在调用JSLINT()解析某些JavaScript源代码后,它通过JSLINT.tree 它将非常强大,能够分析树,根据分析对其进行结构更改,然后从修改后的树生成新的JavaScript 是否有一个开源项目通过提供从解析树到JavaScript的转换来构建JSLINT (这是否可能,即JSLINT是否保存了足够完整的从解析到往返的所有重要信息?我不知道JSLINT是否可以做到这一点(查看一些论坛帖子,看起来维护树不是他们的目标,但它是执行Lint过程的副产品) 该项目可能

对于Crockford,在调用
JSLINT()
解析某些JavaScript源代码后,它通过
JSLINT.tree

它将非常强大,能够分析树,根据分析对其进行结构更改,然后从修改后的树生成新的JavaScript

是否有一个开源项目通过提供从解析树到JavaScript的转换来构建JSLINT


(这是否可能,即JSLINT是否保存了足够完整的从解析到往返的所有重要信息?

我不知道JSLINT是否可以做到这一点(查看一些论坛帖子,看起来维护树不是他们的目标,但它是执行Lint过程的副产品)


该项目可能有助于从javascript生成AST,并将AST重新转换为代码。请参阅AST到javascript的方法

不是开源的,但完全符合OP的要求:我们的

该前端基于我们的通用可定制编译器技术,可用于构建任意代码分析器和转换器。DMS有许多前端可用于多种语言(COBOL,java,C++,…)< /P> 特别是,基于DMS的解析器(包括其JavaScript解析器)收集用于重新生成源树的完整信息,包括令牌的列开始和结束信息、数字文本的基数、字符串引用约定的差异等,以便在未应用转换的情况下进行保真打印。DMS还为树处理提供许多其他有用的服务,如访问者、符号表构造支持、流分析支持、模式匹配以及源到源转换

它可以提供所有这些服务,因为它的工程成本已经在许多语言和应用程序中分摊


我们这样做是因为正如丹尼尔所说,“可能性是无限的”。他给出了一个测试代码以观察运行时故障的示例;这种仪器是一个非常有用的想法,它有什么好处?你能提供一个可能的用例吗?可能性是无限的。考虑在不修改语法的情况下增强语义的方法(这很好,因为它不会破坏现有的编辑工具)。下面是一个随机示例:假设您说如果函数的参数使用后缀
\uu
命名,那么它们不能是
null
未定义的
,并且希望在运行时自动检查。搜索解析树、查找声明此类参数的函数以及在这些函数的开头插入运行时检查都很简单。好吧,但是为什么要首先构建整个语法树呢?我还没有研究过像UglifyJS或YUICompressor这样的压缩机的来源,但我认为它们会提供一个更合理的基础。1。因此,您可以对整个树执行分析和修改。为什么不构建整个语法树呢?2.快速查看一下YUICompressor的源代码,就会发现它使用了Rhino中的解析器类,它构建了一个完整的语法树。不知道YUICompressor在多大程度上使用了这些信息,但它可以。这看起来绝对完美。+1因为它看起来像是一个很棒的工具包,可能比我所寻找的强大得多,而且对于我的修补,我显然倾向于免费的libs。我们发现人们从小想法开始,然后,当他们获得信心时,他们会建立越来越大的项目。有很多脚本语言最初是为“一些命令”设计的,人们在其中构建了巨大的系统。随着人们对更改代码的能力越来越熟悉,人们将做越来越多的更改,并要求DMS提供的支持。只要“免费libs”解决方案对您有效,您就可以获得更多的权力!但我敢打赌,在你对自己能做的事有了良好的健康体验之后,你会重新考虑这个立场:-}