【问题标题】:Converting Javascript code转换 Javascript 代码
【发布时间】:2013-09-15 15:52:23
【问题描述】:

这是一个非常基本的问题。我尝试搜索 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 自上而下的解析器,但是有什么简单的方法可以指定需要替换的内容吗?例如,在上面的代码中——用&lt;j:if&gt;替换if循环

【问题讨论】:

  • 如果你想用 JavaScript 解析 JavaScript,JSLint source code 可能会给你一些想法。
  • 谢谢,如何替换我刚刚解析的内容?
  • 解释 JavaScript 源代码以发现它所描述的程序结构的程序称为 JavaScript 解析器。这就是你必须写的。
  • 您在解析原始代码时生成新代码。 JSLint 的目标是验证 JS 代码,您将阅读该代码,理解它,并根据自己的需要调整它。如果不了解解析器的工作原理,我认为您无法实现所需的目标。

标签: javascript parsing tokenize


【解决方案1】:

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

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

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

【讨论】:

  • 只是想补充一下,Mozilla有一个漂亮的解析器叫做Esprima,比thg435给出的更好。
猜你喜欢
  • 2020-07-07
  • 1970-01-01
  • 1970-01-01
  • 2012-03-20
  • 2014-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多