Compiler construction 为初学者创建一种小型编程语言

Compiler construction 为初学者创建一种小型编程语言,compiler-construction,programming-languages,language-design,bison,yacc,Compiler Construction,Programming Languages,Language Design,Bison,Yacc,我想创建自己的编程语言。也许不完全是一种从头开始的编程语言,但可能是基于另一种语言 我听说过雅克。所以,我安装了Flex和Bison。但是我不知道如何用它来制作编译器。我已经在其中创建了helloworld项目,但是我如何在其中创建编译器呢 有什么简单的方法可以创建一种小型编程语言吗?我听说过把一种语言翻译成一种语言,例如,Write(),让计算机理解为Print() 这是可能的吗?我在大学的一个高学期的一次演讲中,用雅克语言创造了一门非常小的语言。这是一件非常复杂的事情,我不建议就这样做 您可

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

我听说过雅克。所以,我安装了Flex和Bison。但是我不知道如何用它来制作编译器。我已经在其中创建了
helloworld
项目,但是我如何在其中创建编译器呢

有什么简单的方法可以创建一种小型编程语言吗?我听说过把一种语言翻译成一种语言,例如,
Write()
,让计算机理解为
Print()


这是可能的吗?

我在大学的一个高学期的一次演讲中,用雅克语言创造了一门非常小的语言。这是一件非常复杂的事情,我不建议就这样做


您可以创建一个库,例如在C#中,定义一些简单的指令,如“message(string)”,并将它们映射到更复杂的事情,如打开窗口和显示消息。它不是一种独立的语言,但你可以定义自己的基本指令,即使它们只是包装所用语言的基本指令。

我的看法是,更简单的方法不是弄乱旨在自动创建词法分析器和解析器的核心工具,而是着手创建一个语法相当简单的简单解释器,解析器可以手工编写,包括一个简单的状态机

我想说,对于这项任务来说,一种近乎理想的解释语言是,其原因是:

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

    然后,从正在处理的脚本的源行解析的一组单词将按以下方式解释:第一个单词是命令的名称,其余单词是该命令的位置参数。快速了解它

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

  • 可以逐渐使口译员更加“强壮”。例如,首先可能会忽略实现变量替换(Tcl<2.0没有变量替换)和所有高级功能(语法和语义,如名称空间)。类似地,对于这样一个玩具解释器的脚本,也可以从没有命令或几乎没有命令开始。然后,它们可能会逐渐增加

通过使用Tcl的功能,您可以快速了解Tcl是什么。需要更多的文档。你可以让Tcl玩它


<> >您可以在<代码> > TCL >代码> IRC通道上对<代码> IRC .FeleNo..net < /C>和在<代码> COMP.Lang.TCL新闻组(通过谷歌组可用).您可以考虑学习如何从一个难以置信的1964(是,您读到那篇文章)编译一个编译器,关于如何构建“元编译器”.

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

早在1970年左右,我就从这篇论文中学到了如何构建编译器。令人惊讶的是,它是多么的聪明和概念上的简单

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


你可以。本教程背后的人是James Neights博士,他是术语“领域分析”的来源。

定义自己的编程语言是一个有趣的挑战,也是对创造力的考验。你应该考虑的一个问题是,你希望“语言”在某种程度上被用来作为一种完全分析程序的东西,然后在执行任何事情之前,用上下文无关的方式解释命令。或者类似于Forth或PostScript的东西,其中命令在来自输入流时被处理,但它能够将输入附加到列表中,或者从列表中读取命令,就像它们来自输入流一样,这使得我们能够通过将所有指令读入列表来有效地定义过程,然后执行列表中的所有指令

另一个相关的问题是,您是否希望您的语言在大规模应用程序开发中实用。例如,如果应用程序不需要超过26个变量,那么使用字母a-z到26个变量的固定映射可能比尝试实现符号表或为变量分配空间更简单。局部变量和参数传递可能有些复杂;让所有变量都在一个全局范围内,并要求代码使用这些全局变量传递参数,这将简化语言设计,但用这种语言编写代码很容易变得难以管理,特别是如果希望避免定义过多的一次性变量[例如,因为只有26个变量可用]


我使用了相当多的领域特定语言,包括我设计的一些语言;我喜欢某些语言,也不喜欢其他语言。设计语言时最重要的事情是确定自己的目标。这并不是说定义目标会使其他一切都到位,但如果你对自己的目标没有感觉的话你将无法知道哪些设计理念可以让你达到这些目标,哪些设计理念应该被遵循,哪些设计理念与你的目标不符,哪些设计理念应该被放弃。

我是基于web的编程语言Jetsam的创建者。要创建你自己的编程语言,你首先需要经历各种各样的过程不同的编程语言,如C到C++、java、QML、HTML、JavaScript、Ruby、Python,还有一些其他的。我用Web创建了它,而这种语言只是在Web上工作。 搞乱所有这些语言,回到它们的基础上来。你可以
write Hello world
write Bye!
public class Main
{
System.out.println("Hello world");
System.out.println("Bye!");
}