【发布时间】:2011-08-17 23:48:34
【问题描述】:
【问题讨论】:
-
CoffeeScript 不是基于 Node.js(“然而,核心编译器不依赖于 Node”)并且它不是 DSL。
-
感谢您的澄清。
标签: javascript parsing
【问题讨论】:
标签: javascript parsing
Jison 以 GNU Bison 解析器生成器为模型。它采用类 Bison 或 JSON 格式的语言语法,并输出该语言的 Javascript 解析器。如果您想制作基于另一种知名语言的解释器,那么您可以在某个地方为 Jison 调整 Bison 语法。 我发现从头开始 DSL 非常简单。
【讨论】:
您为什么认为“在 JavaScript 上”实现语言的基本概念从根本上依赖于 JavaScript?大多数情况下,它只是一种编程语言,可以应用标准的类似编译器的方法;一个“仅仅”编译为 JavaScript 而不是机器指令。
这是使用非常简单的元编译方法编写编译器的教程。它恰好以 JavaScript 作为起点,但它也没有致力于 JavaScript。本教程基于 Val Schorre 关于“MetaII”的论文,这是一种元编译器 .... 日期为 1964(是的,您没看错)。我从这篇论文中学会了如何构建我的第一个编译器(但不是使用 JavaScript :),它仍然是一项有价值的技术:
Meta II Compiler Tutorial targeting JavaScript
如果您想要更直接的内容,请考虑writing a recursive descent parser by hand.。写完其中几篇之后,你就会真正体会到 MetaII 的天才之处了。
【讨论】:
我会首先查看更多可以编译为 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 或类似的语言。
【讨论】: