【问题标题】:JavaScript parser in JavaScript [closed]JavaScript中的JavaScript解析器[关闭]
【发布时间】:2010-03-31 16:08:03
【问题描述】:

我需要在 JavaScript 源代码中添加一些轻量级的语法糖,并使用基于 JavaScript 的构建系统对其进行处理。是否有任何用 JavaScript 编写的开源 JavaScript 解析器?当在 V8 或类似的高性能 JavaScript 实现上运行时,它们是否相当快?

感谢您提供的任何指点!

【问题讨论】:

  • “我需要在 JavaScript 源代码中添加一些轻量级的语法糖” 你愿意吗?比如什么?
  • 您需要它来进行代码展示或编辑器吗?
  • Objective-J 就是这样做的。您可能想查看其开源代码。但它使用与 Objective-C 完全不同的语法,并在运行时解释为 Javascript afaik。
  • JSLint 包含一个用 JavaScript 编写的 JavaScript 解析器。请参阅jslint.com/fulljslint.js 在第 2049 行附近开始解析器。 JSLint 也是为处理 html 而编写的,因此您必须掩盖这些部分。
  • Crescent French:请重新发表您的评论作为答案,我会给您投票。谢谢!

标签: javascript parsing


【解决方案1】:

UglifyJS(JavaScript 中的 JS 压缩器/美化器)包含一个完整的 JavaScript 解析器,它公开了一个简单的 API。它在一些大型项目 (WebKit) 中经过大量测试和使用。

【讨论】:

  • UglifyJS 很棒,谢谢你。还要感谢 HTMLArea,它是我在 7 或 8 年前开发所见即所得编辑器时的一个很好的参考。不过,我建议在链接到 UglifyJS 时提及您的兴趣。
  • 我只想指出,这个解析器已经准备好了,而且似乎工作得很好。它包含在一个单独的文件中,因此无需费力地通过 jslint.js 取出不需要的部分。 +1
【解决方案2】:

Javascript 中的fastest Javascript 解析器是esprima

它也给你

抽象语法树 (AST) 的合理格式,与 Mozilla Parser API 兼容

【讨论】:

    【解决方案3】:

    Crescent Fresh 在 cmets 中回答了这个问题:

    JSLint 包含一个用 JavaScript 编写的 JavaScript 解析器。请参阅JSlint by Douglas Crockford 在第 2712 行附近开始解析器。 JSLint 也是为了处理 html 而编写的,因此您必须掩盖这些部分

    【讨论】:

    【解决方案4】:

    acorn 是一个用 JavaScript 编写的非常快速的 JavaScript 解析器。它甚至比现在的esprima 还要快。我在 Chrome 表单中得到的结果esprima's speed comparison page

    Source            Esprima    UglifyJS2    Traceur    Acorn
    Underscore 1.4.1  15.1       23.8         14.2       7.6
    Backbone 1.0.0    17.1       30.2         16.7       7.9
    jQuery 1.9.1      241.1      247.2        125.4      81.4
    Total             273.3 ms   301.2 ms     156.3 ms   96.9 ms
    

    它与 Mozilla 的 Parser API 兼容,因此您可以使用 escodegen 从解析树生成 JavaScript。

    【讨论】:

      【解决方案5】:

      它本身不是 JavaScript 解析器,但有一个名为 Jison 的项目(如 Bison)用于生成用 JS 编写的解析器。

      【讨论】:

      • 嗯,问题 JavaScript 解析器...??
      【解决方案6】:

      我见过在 JavaScript 中实现的唯一 metacircular interpreterNarcissus 引擎。

      它也是由 Brendan Eich 开发的,他们使用了很多 SpiderMonkey 特有的非标准扩展,我认为它不适用于 V8。

      【讨论】:

      • 有趣!我想有一个解析器隐藏在某个地方。 :-) 不幸的是,我正在寻找在 V8 下运行的东西。但是感谢您提供非常有趣的链接!
      【解决方案7】:

      微软在 TypeScript 中开发了 TypeScript 编译器。由于 TypeScript 是 JavaScript 的严格超集,并且 TypeScript 编译为 JavaScript,因此生成的编译器在技术上是用 JavaScript 编写的 JavaScript 编译器。

      这当然取决于您对“编译器”的定义。但是,如果接受语言 A 超集的编译器不是语言 A 编译器,则不包括 GCC、Clang 和几乎所有其他编译器。

      【讨论】:

        【解决方案8】:

        https://developer.mozilla.org/en-US/docs/SpiderMonkey/Parser_API:

        独立 SpiderMonkey shell 的最新版本包括 SpiderMonkey 解析器的反射,作为 JavaScript 提供 API。

        请注意,这只是 JavaScript 中的一个 API,解析器是 C++。

        【讨论】:

          【解决方案9】:

          JS/CC - 用于 JavaScript 的 LALR(1) 解析器和词法分析器生成器,用 JavaScript 编写 - http://jscc.phorward-software.com/

          【讨论】:

          • 链接自最新编辑后有效
          猜你喜欢
          • 2010-09-28
          • 2011-03-23
          • 2011-05-19
          • 2010-11-10
          • 2023-03-26
          • 2011-09-06
          • 1970-01-01
          • 2010-11-05
          • 1970-01-01
          相关资源
          最近更新 更多