【发布时间】:2017-02-24 03:15:04
【问题描述】:
我想使用 google 闭包编译器解析给定的 ES6 源文件,以构建程序的自定义“面向对象”表示。这种表示将包括源文件中的所有类以及这些类中包含的方法和变量的详细信息。我已经为使用 Antlr 的 Java 程序完成了这项任务——一旦你有了合适的 grammar,你就可以为任何需要的语法规则(类声明、方法声明等)注册进入和退出监听器,这使得实施相当简单。如果能够使用 google 闭包编译器解析 JavaScript 代码以提取有关源代码的类似信息,我将不胜感激。
到目前为止,我有以下代码可以解析给定的 javascript 源文件:
Compiler compiler = new Compiler();
CompilerOptions options = new CompilerOptions();
options.setIdeMode(true);
compiler.initOptions(options);
Node root = new JsAst(SourceFile.fromCode(file.name(), file.content())).getAstRoot(compiler);
NodeTraversal.traverseEs6(compiler, root, new JavaScriptParsePass());
JavaScriptParsePass 类简单地输出每个处理的节点的类型和限定名称,如下所示:
public class JavaScriptParsePass extends AbstractPostOrderCallback implements CompilerPass {
@Override
public void process(Node externs, Node root) {
}
@Override
public void visit(NodeTraversal t, Node n, Node parent) {
System.out.println(n.getType() + ": " + n.getQualifiedName());
}
}
在输入上运行此程序:
class Model { constructor(properties) { this.properties = properties; }
产生输出:
38: Model
124: null
38: null
38: properties
83: null
42: this
40: null
33: this.properties
38: properties
86: null
130: null
125: null
105: null
160: null
159: null
158: null
132: null`
我希望对此输出进行解释,因为排序和空值对我来说没有意义,以及有关如何解决原始问题的一般指导。
【问题讨论】:
标签: javascript google-closure-compiler