【问题标题】:Tutorials for writing a parser with Javascript [closed]使用 Javascript 编写解析器的教程 [关闭]
【发布时间】:2011-08-17 23:48:34
【问题描述】:

我见过几种基于 Javascript 的语言(即 CoffeeScriptLessCSS)。

是否有使用 Javascript 编写语言/解析器的教程?

【问题讨论】:

  • CoffeeScript 不是基于 Node.js(“然而,核心编译器不依赖于 Node”)并且它不是 DSL。
  • 感谢您的澄清。

标签: javascript parsing


【解决方案1】:

Jison 以 GNU Bison 解析器生成器为模型。它采用类 Bison 或 JSON 格式的语言语法,并输出该语言的 Javascript 解析器。如果您想制作基于另一种知名语言的解释器,那么您可以在某个地方为 Jison 调整 Bison 语法。 我发现从头开始 DSL 非常简单。

【讨论】:

    【解决方案2】:

    您为什么认为“在 JavaScript 上”实现语言的基本概念从根本上依赖于 JavaScript?大多数情况下,它只是一种编程语言,可以应用标准的类似编译器的方法;一个“仅仅”编译为 JavaScript 而不是机器指令。

    这是使用非常简单的元编译方法编写编译器的教程。它恰好以 JavaScript 作为起点,但它也没有致力于 JavaScript。本教程基于 Val Schorre 关于“MetaII”的论文,这是一种元编译器 .... 日期为 1964(是的,您没看错)。我从这篇论文中学会了如何构建我的第一个编译器(但不是使用 JavaScript :),它仍然是一项有价值的技术:

    Meta II Compiler Tutorial targeting JavaScript

    如果您想要更直接的内容,请考虑writing a recursive descent parser by hand.。写完其中几篇之后,你就会真正体会到 MetaII 的天才之处了。

    【讨论】:

    • Downvoter:建设性反馈将是首选,而不是你明显的“旗帜”。我看不出这个响应是什么,它没有直接解决 OP 对使用 JavaScript“构建语言”的方法的请求,因为这正是所引用的教程所做的。
    • 我认为这非常相关。解析器是将语言解释为机器级理解的东西。如果 OP 想要对他的解析器拥有任何真正的权力,他将需要知道如何编写编译器;否则,他将无法独立完成他的项目。他将在教程请求后发布教程请求,并继续以缓慢的爬行速度处理文档不足的意大利面条代码。不过,如果他编写编译器,他就能在睡梦中编写代码。
    【解决方案3】:

    我会首先查看更多可以编译为 javascript 的语言,然后看看它们的作用。这是一个列表:https://github.com/jashkenas/coffee-script/wiki/List-of-languages-that-compile-to-JS

    请参阅该页面底部的解析器生成器列表,这些生成器使事情变得更简单,例如 jison 和 peg.js。

    编写可编译为 javascript 的替代语言时存在某些限制或障碍,因为 javascript 并非设计为“字节码”或其他语言的运行时。例如,Java 和 C# 中没有静态类型或类系统。如果你只是做一个小的改动来修复一些javascript的问题,比如coffeescript和该链接页面顶部列出的其他问题,那么这样的东西不是问题,但更大的问题是为什么不只是贡献Coffeescript 或类似的语言。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-08
      • 2010-12-21
      • 2011-11-14
      • 2011-08-14
      • 2012-07-04
      • 2020-10-30
      • 2011-08-25
      相关资源
      最近更新 更多