是否有用于在JavaScript中定义解析器的框架?

时间:2009-06-23 23:19:18

标签: javascript parsing

是否有一个允许使用JavaScript语法定义解析语法的JavaScript框架,类似于Irony为C#做的方式?

4 个答案:

答案 0 :(得分:4)

我已经构建了一个名为 Chevrotain 的JavaScript解析 DSL

来源: https://github.com/SAP/chevrotain

在线游乐场: http://sap.github.io/chevrotain/playground/

像反讽这样的Parser组合器,但它非常相似 因为它允许你“使用JavaScript语法定义解析语法” 没有任何代码生成阶段。

使用它类似于“手工构建”一个递归的正确解析器, 只有没有大多数头痛,如:

  • 预测功能创建(决定采取哪种替代方案)
  • 自动错误恢复。
  • 左递归检测
  • 歧义检测。
  • 职位信息。
  • ...

因为Chevrotain会自动处理。

答案 1 :(得分:3)

我不太了解Irony的工作方式,但是Chris Double有一个库,可以让你在这里用JavaScript定义语法:http://www.bluishcoder.co.nz/2007/10/javascript-parser-combinators.html。代码为available on GitHub

它是一个“解析器组合器”库,这意味着您将语法中每个产品的解析器组合成一个解析整个事物的更大的解析器。每个“子语法”只是通过调用库函数创建的函数。

答案 2 :(得分:0)

这不是你需要的,但是this article在javascript中为javascript本身制作一个递归下降解析器。

答案 3 :(得分:0)

PEG.js可能是一种解决方案。

  

PEG.js是一个用于JavaScript的简单解析器生成器,可生成具有出色错误报告功能的快速解析器。您可以使用它来处理复杂的数据或计算机语言,并轻松构建变换器,解释器,编译器和其他工具。

     

功能

     

简单而富有表现力的语法语法   整合词法和句法分析   解析器具有出色的错误报告功能   基于解析表达式语法形式 - 比传统的LL(k)和LR(k)解析器更强大   可以从浏览器,命令行或JavaScript API

中使用