如何获取JavaScript *代码文件的JSON(或等效)表示*(代码,作为字符串,在输入中)?

时间:2015-04-11 04:03:32

标签: javascript json parsing serialization representation

一切都在标题中! ^^

我知道js的一些SourceCode浏览器;当代码在当前非正式的js编码规范中相对遵守结构时,它们通常允许找到一些小东西。

(例如,使用new运算符,主要通过定义(F foo() {})创建的函数,而不是通过表达式语句或文字对象(var foo = F(){},{{1} }),等等;我确实发生了不遵守的规范。

但是,我真正感兴趣的是对代码的完整解析,一个工具返回,例如,包含整个代码的JSON文件,即所有语句,函数调用,甚至函数的参数调用(通常在js sourcebrowsers中被遗忘,因为这些对象实际上是匿名对象/函数;但是它们恰好大量用于类似函数的编程,因此对于我遇到的所有源代码浏览器都不可见)

当然,目的是创建JSONized代码,我自己的源代码浏览器,希望能够比普通代码更远,并且能满足我轻松浏览代码的需求,也可以轻松查看,定义了哪个变量在哪里,以及其他一些可能增强我编码体验的东西。

无论如何;我并不特别依赖于JSON格式,当然,因为我在JS中编写源代码浏览器,它是即时的简单输入,但任何其他数据表示格式都可以,重要的是转换的解析器编码成一个喉舌对象¹。 任何寻找和做某事的事情(例如L / Hinter,其中包含更详细和更丰富的信息),欢迎使用;)

提前感谢:)

¹“对象”:JS定义的对象,即与字典相同或相同的抽象数据;不是一个对象,因为基于类的OO语言定义它(类实例)

1 个答案:

答案 0 :(得分:0)

我认为您正在搜索将javascript代码表示为抽象语法树(AST)的标准。有一个广泛使用的javascript AST标准,它被称为ESTree。有一个活跃的社区支持标准化项目,它会针对新版本的javascript进行更新。

或者,还有Shift AST提供略微不同的标准AST,并且它具有在线实时解析工具。

AST生成器的实现通常提供Parserparse()方法,它将您的javascript代码作为字符串参数值,并返回标准定义的抽象语法树对象。

例如传递此代码:

c = a + b;

会产生这个AST:

type: "Script"
directives:[]
statements:
    0:
        type: "ExpressionStatement"
        expression:
            type: "AssignmentExpression"
            binding:
                type: "BindingIdentifier"
                name: "c"
            expression:
                type: "BinaryExpression"
                left:
                    type: "IdentifierExpression"
                    name: "a"
                operator: "+"
                right:
                    type: "IdentifierExpression"
                    name: "b"

最后,有代码生成器执行相反的过程:当有AST并想要从中生成javascript代码时。

可以找到ESTree解析器的更新且维护良好的实现here