2009-06-23 71 views

回答

3

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

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

+0

谢谢,这似乎是我一直在寻找的东西,我会仔细看看。 – 2009-06-24 05:53:46

0

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

+1

这实际上是自顶向下的运算符优先级。我认为它也出现在本书的一章中,“美丽的代码”。 – Nosredna 2009-06-24 02:00:37

3

我建立了一个JavaScript解析DSLChevrotain

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

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

这是一个解析器组合像讽刺,但它是非常相似 ,因为它可以让你“定义解析使用JavaScript语法的语法“ 没有任何代码生成阶段。

使用它类似于“牵手楼”递归体面的分析器, 只是没有最头痛如:

  • 先行创建函数(决定采取哪一种选择)
  • 自动错误恢复。
  • 左递归检测
  • 歧义检测。
  • 位置信息。
  • ...

为鼷鹿科自动处理。

0

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

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

特点

简单和表达语法句法 集成了词汇和句法分析 分析器具有优良的错误报告开箱 基于解析表达式语法形式主义 - 比传统的LL(k)的功能更强大, LR(k)解析器 可从您的浏览器,命令行或通过JavaScript API使用

相关问题