0

这是一个非常基本的问题。我尝试搜索 SO,但无法得到任何可靠的答案。对不起,如果它真的很基本。

我正在尝试编写一个插件/库来将 Javascript 转换为Apache Jelly

所以想法是编写 Javascript 代码,将其转换为 Jelly 代码。

示例:类似 Javascript 的代码:

if(x == 1){
  print("inside if");
}

Apache 转换后的代码:

  <j:if test="x=1">
     inside if
  </j:if>

问题是,我如何解析整个 Javascript 代码并将其替换为其他代码。我确实看过 Jison,但这基本上是一个解析生成器,它解析值并解释它们。我觉得使用 jison 对我的任务来说有点开销。

知道我可以用什么来实现我想要做的事情吗?

编辑 1:是的,在JSLint有一个 Javascript 自上而下的解析器,但是有什么简单的方法可以指定需要替换的内容吗?例如,在上面的代码中 - 将if循环替换为<j:if>

4

1 回答 1

3

您可能误解了 Jison 计算器示例。您不必解析器中执行任何代码,它只是用于说明概念的计算器。您可以将任何您想要的内容放入解析器操作中,例如,生成 xml 格式的代码可能如下所示:

 `if` condition block:
      { $$ = '<j:if test=' + $2 + '>' + $3 + '</if>' }

另一个(更好的)选择是使用抽象 JS 解析器来构建AST并通过遍历这棵树来生成 XML。这具有将解析与代码生成解耦的优势 + 您可以简单地利用已经制作的语法,例如https://github.com/cjihrig/jsparser

于 2013-09-15T16:02:50.990 回答