为初学者创建一个小编程语言

Gab*_*abe 5 compiler-construction yacc programming-languages language-design bison

我想创建自己的编程语言.也许不是从头开始编程语言,但可能是基于另一种语言.

我听说过Yacc.所以,我安装了Flex和Bison.但我不明白如何使用它编译.我已经Hello world在其中制作了该项目,但我如何在其中制作编译器?

有没有简单的方法来创建一个小的编程语言,我听说过翻译一种语言,例如,Write()并使计算机理解它Print().

这有可能吗?

Ira*_*ter 6

你可能会考虑从一个神话般的1964年开始构建编译器(是的,你读的是正确的)论文META II:面向语法的编译器编写语言,介绍如何构建"元编译器".

本文包含10页的编译器编写原理,易于实现的虚拟编译器指令集的定义,编译器编译器以及使用编译器编译器构建的示例编译器.

我从1970年开始学习如何从这篇论文中构建编译器.令人惊讶的是它的巧妙和概念简单.

如果有一篇论文我会让每个计算机科学专业的学生都阅读,那就是它.

你可以在这里获得论文,参见JavaScript中的MetaII教程和实现.该教程背后的人是James Neighbors博士,他是"域名分析"一词的来源.


kos*_*tix 5

我对此的看法是,更简单的方法不是搞乱旨在自动创建词法分析器和解析器的核心工具,而是开始创建一个相当简单的语法的简单解释器,可以手动编写解析器 -涉及一个简单的状态机。

我想说,用于该任务的几乎理想的解释语言是Tcl,原因是:

  • 超级简单的语法(几乎没有):语法主要定义将字符分组为单词。

    然后,从正在处理的脚本的源代码行解析出的一组单词将以这种方式解释:第一个单词是命令的名称,其余单词是该命令的位置参数。在维基百科上快速了解它。

  • 一切都是字符串,因为参数的解释掌握在处理它们的命令手中。

  • 逐渐让口译员变得更加“强大”是可能的。例如,一开始可能会省略变量替换的实现(Tcl < 2.0 没有它们)和所有高级功能(语法和语义,如命名空间)。同样,可以在没有命令或几乎没有可用于此类玩具解释器的脚本的命令的情况下开始。然后可能会逐渐添加。

通过学习 Tcl 的教程,您可以快速了解 Tcl 是什么。还有更多文档。你可以在那里使用 Tcl 来玩它。

您可以在新闻组上的#tclIRC 频道上寻求帮助(可通过 Google 网上论坛获取)。irc.freenode.netcomp.lang.tcl