2011-05-03 36 views
32

我见过使用Javascript构建的几种语言(即CoffeeScriptLessCSS)。使用Javascript编写解析器的教程

是否有任何地方用Javascript编写语言/解析器的教程?

+0

CoffeeScript不是基于Node.js(“核心编译器,但不依赖于节点”),它不是DSL。 – Andrey 2011-05-03 19:37:53

+0

感谢您的澄清。 – exupero 2011-05-03 20:09:41

+2

http://zaach.github.com/jison/ – Andrey 2011-05-03 20:16:33

回答

14

Jison仿照GNU Bison语法分析器生成器。它采用类似Bison或JSON格式的语言语法,并输出该语言的JavaScript解析器。如果你想制作基于另一种着名语言的解释器,那么可以在某处可以调整Jison的地方使用Bison语法。 我发现从头开始使用DSL非常简单。

13

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

下面是使用非常简单的元编译方法编写编译器的教程。它恰巧将JavaScript作为开始的地方,但它也不是致力于JavaScript。本教程基于Val Schorre撰写的关于“MetaII”的论文,这是一种编译器...,日期为(是的,你读得对)。我学会了如何从本文建立我的第一个编译器(但不使用JavaScript :),它仍然是一个有价值的技术:

Meta II Compiler Tutorial targeting JavaScript

如果你想要的东西更直接,考虑writing a recursive descent parser by hand.。在你写了一些这些之后,你会非常欣赏MetaII的天才。

+4

Downvoter:建议性的反馈将是首选,而不是你的显性“旗”。我没有看到这个回应是什么,它没有直接解决OP对于用JavaScript来“构建语言”的方法的要求,因为这正是引用的教程所做的。 – 2011-05-20 23:47:53

+0

我认为这非常相关。解析器是将语言解释为机器级理解的东西。如果OP想要对解析器有任何实际的权力,他将需要知道如何编写一个编译器;否则,他将无法独立完成他的项目。他将在教程请求后发布教程请求,并继续使用文档不完整的意大利面条代码进行缓慢爬取。如果他编写了一个编译器,他可以在睡梦中编写代码。 – 2012-08-02 13:44:27

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和其他链接,那么类似这样的东西不是问题,但是更大的问题是为什么不仅仅是为了咖啡或类似的语言。