技术开发 频道

如何创建一门编程语言?第一弹:设计与解析资源

  【IT168 评论】创建编程语言是每个程序员都梦寐以求的,所以本文就来和大家来聊一聊这件关乎程序员梦想的事情。

  创建编程语言最难的部分是你很难找到一个完全契合你想法的完整例子。也许你可以找到一个写了一半的解析器教程,一个半成品的语言设计建议列表,一个很浅显的例子……虽然这些东西对于你来说可能用处不大,但是你却需要花费大量的时间去逛论坛来获得这些链接。

  收集资料并对其进行评估,对我来说是一件非常有趣的事情。而对于程序员来说,与其费劲力气来收集资料,还不如多花点时间来用好它。编程语言的创建可以分为三个部分,分别是设计、解析和执行。本文,我们将给大家推荐一些编程语言设计和解析的资源。

  设计语言

  创建编程语言的第一步就是要把想法转换为行动,这也是你要在设计阶段要做的工具。下面我们就来看看有哪些好的资源可以让你加强对语言设计的了解。

  文章列表:

  设计下一种编程语言?了解其他人是如何学习的! 本文主要介绍了设计编程语言的一些注意事项,文风前线一定。

  地址:http://www.theenterprisearchitect.eu/blog/2013/02/14/designing-the-next-programming-language-understand-how-people-learn/

  语言设计的五个问题。本文收集了保罗·格雷厄姆(Paul Graham)在编程语言设计方面的一些好的笔记。

  地址:http://www.paulgraham.com/langdes.html

  书籍列表:

  编程语言中的设计概念。如果你想要创建出有意义的编程语言,那这本书就是你一定要读的。理论是实践的基础,只有了解了不同的编程语言的行为,才能创造有特点的编程语言。

  编程语言的设计基础:这本书大部分是关于编程语言的学习和分类的,通过了解不同的可用编程语言,可以知道你自己创建的编程语言的实现。

  地址:https://mitpress.mit.edu/books/design-concepts-programming-languages

  编程语言语用学,第4版。这是对于当代编程语言解读最全面的书籍,它讨论了从C#到OCaml,不同种类的编程语言的不同方面,同时也涵盖了语言学习的步骤,如中间语言、链接、虚拟机等等。

  地址:http://www.cambridge.org/it/academic/subjects/computer-science/programming-languages-and-applied-logic/practical-foundations-programming-languages-2nd-edition

  计算机程序的结构与解析,第二版。这是一本适合于计算机专业出身的程序员的书,在程序员圈内广受好评,有助于开发一种新的思考编程语言的方式,同时它也涵盖了编程语言的许多不同方面,例如垃圾收集。

  地址:https://mitpress.mit.edu/books/structure-and-interpretation-computer-programs

  类型系统

  关于类型系统的争论由来已久,大家做了很多努力,但最终也没有一个统一的结论,因为无论你支持哪一个,其它人的选择也同样是有道理的。

  文章列表:

  这是关于类型系统主题的两个很好的介绍性文章。第一篇文章讨论了二分法静态/动态类型检查,第二篇涉及内省。

  在争论之前,你应该了解哪些关于类型系统的知识:本文可以让读者更好地了解类型系统的定义和细节。

  地址:https://cdsmith.wordpress.com/2011/01/09/an-old-article-i-wrote/

  类型系统(PDF):本文引入了更为精确的不同类型系统的定义。

  地址:http://lucacardelli.name/Papers/TypeSystems.pdf

  书籍列表:

  类型和编程语言。这是一本关于理解类型系统的综合书,它一定会对你设计编程语言和编译器的能力产生影响。它具有强大的理论基础,但同时也解释了个人观念在实际操作中的重要性。

  地址:https://mitpress.mit.edu/books/types-and-programming-languages

  功能编程和类型系统。这是个关于功能编程类型系统的有趣的大学课程,它被法国的一所著名大学用来教学,包含了一些笔记和演示材料。

  地址:http://gallium.inria.fr/~remy/mpri/

  编程语言的类型系统。这是一个简单的课程,用于(功能)编程语言的类型系统。

  地址:http://www.doc.ic.ac.uk/~svb/TSfPL/

  解析

  解析是指将具体的语法转换为更易于管理计算机的表单。这通常意味着将人类编写的文本转换为更有用的代码,即抽象语法树。

如何创建一门编程语言?设计与解析资源

  解析中通常有两个组件:词法分析器和正确的解析器。Lexers,也称为记号器或扫描仪,将各个字符转换为令牌。解析器将程序员中的令牌放到抽象语法树中的合适位置。由于它们总是协同工作,所以可以选择一个工具来同时完成这两项任务。

  工具

  使用 Flex 作为词法分析器生成器, (Berkeley)Yacc 或 Bison 来生成正确的解析器,它们是黄金搭档。它们诞生于几十年前,现在仍然是开源软件,由C/C++创建。虽然现在它们仍然可以工作,但是对于功能和语言的支持有局限。

  ANTLR 既是词法分析器又是解析器生成器,它是用Java编写的,但它可以使用C#,C ++,Python,Javascript,Go等各种语言生成词法分析器和解析器。

  如果你想要获得非常好的性能,也可以创建自己的解析器。

  教程列表:

  Flex和Bison教程:详细介绍了这个两个工具以及使用方法。

  地址:http://aquamentus.com/flex_bison.html

  Lex和Yacc教程:我把在lex / Yacc上发现的视频教程分为两部分(第1部分,第2部分)。在一小时的视频中,您可以了解使用lex和yacc的基本知识。

  地址:http://epaperpress.com/lexandyacc/index.html

  ANTLR Mega教程是一个著名的教程,这里有你想要了解的所有有关ANTLR的知识。

  地址:https://tomassetti.me/antlr-mega-tutorial/

  书籍列表:

  lex&yacc:尽管这是一本1992年写的一本书,但仍是现在大家极力推荐的书籍。

  地址:http://shop.oreilly.com/product/9781565920002.do

  flex&bison:文本处理工具。这是关于flex&bison写的最好的书籍。

  地址:http://shop.oreilly.com/product/9780596155988.do

  ANTLR 4终极参考:由该工具的主要作者撰写,可以说是ANTLR标志性的书籍。

  地址:https://pragprog.com/book/tpantlr2/the-definitive-antlr-4-reference

  解析技术,第2版:一本全面高级的书,它能提供给你的永远要比你需要的解析知识要多。

  地址:http://www.springer.com/us/book/9780387202488

1
相关文章