【问题标题】:Javascript AST builder and code writer in JavaJava 中的 Javascript AST 构建器和代码编写器
【发布时间】:2014-07-16 18:25:24
【问题描述】:

是否有任何 Java 库允许我在代码中创建 Javascript AST,然后将 AST 序列化为有效的 Javascript 字符串?

我找到的最接近的东西是escodegen,它是用 Javascript 编写的,所以我必须使用 Rhino 或 Node 来执行它,但它接受 Mozilla Parser API JSON 定义中的 AST。 Java 代码只需要构建一个 JSON。

但我希望这不是最好的事情,应该有更多的 Java 原生方式来做到这一点。

【问题讨论】:

  • Rhino 中有一个 AST API。
  • 很好,我会检查一下。它是否允许编写 AST?
  • 参见 AstNode.toSource()
  • 谢谢,刚刚检查过了。您能否将其作为正常答案回答,我会接受吗?

标签: java javascript abstract-syntax-tree


【解决方案1】:

在问题的 cmets 中尝试了 McDowell 的建议。 Rhino 的AstNode.toSource() 正在按预期工作。我可以像这样使用 Groovy 构建和序列化简单的 AST:

    def astRoot = new AstRoot()
    astRoot.with {
        def expressionStatement = new ExpressionStatement()
        addChild(expressionStatement)
        expressionStatement.with {
            expression = new FunctionCall()
            expression.with {  
                target = new Name()
                target.identifier = "alert"

                def arg = new StringLiteral()
                arg.value = "Test"
                arg.quoteChar = '"'
                arguments = [ arg ]
            }
        }
    }

    println astRoot.toSource()

这打印:alert("Test")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多