使用Javascript编写解析器的教程

时间:2011-05-03 19:29:40

标签: javascript parsing

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

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

3 个答案:

答案 0 :(得分:14)

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

这是一个使用非常简单的元编译方法编写编译器的教程。碰巧将JavaScript作为起点,但它也没有提交给JavaScript。本教程基于Val Schorre关于“MetaII”的论文,这是一种metacompiler ....日期 1964 (是的,你读的是正确的)。我从本文学习了如何构建我的第一个编译器(但不是用JavaScript :),它仍然是一个有价值的技术:

Meta II Compiler Tutorial targeting JavaScript

如果您想要更直接的内容,请考虑writing a recursive descent parser by hand.。在你写完其中的一些之后,你会非常感激MetaII的天才。

答案 1 :(得分:14)

Jison以GNU Bison解析器生成器为模型。它采用类似Bison或JSON格式的语言语法,并为该语言输出Javascript解析器。如果你想要建立一个基于另一种着名语言的翻译,可能会有一个Bison语法在你可以为Jison调整的地方。 我发现开始使用从头开始的DSL非常简单。

答案 2 :(得分:1)

我首先会看到更多编译成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或类似语言。