什么提示你能得到一个人正在写一个编程或脚本语言?我 我不是担心如何,程序也没有设计一个编译器而是如何开发一个快速使用的工具,并代码的发电机。

最后一次我想我编码的,它在c++和国和语法采取了几乎长为编写实际逻辑。我知道遵循的工具,将有所帮助。

我想我可能会产生c++编码和海湾合作委员会编制的。使用的工具上多久你会估计,它会采取写程序或脚本语言?


变化对这个问题已经问过多次,早 学习写一个编译器. 这里是一个不完整的列表,因此资源 在主题。

有帮助吗?

解决方案

估计这样的东西可能需要依赖于许多不同的因素。例如,一个有经验的程序员可以很容易地敲出一个简单的算术表达评估在几个小时,有单元的测试。但是初级程序员可能需要学习关于析技术,递归下降,抽象的表示形式表达的树木、树-步行战略等等。这可能很容易地采取周或更高,只是为算术表达方式。

但是,不要让这阻止你。因为杰夫和Joel正在讨论与埃里克水槽上 最近的播客栈溢出, 写一个编译是一个很好的方式了解的许多不同方面的程序。我已经建立了几个编译器而他们是我的最令人难忘的编程项目。

一些经典的书籍建筑物的编译器:

其他提示

戴夫·汉森,谁与克里斯·弗雷泽用了10年的建筑世界上最精心设计的编译器之一,有一次告诉我,他从经验中得到的主要事情之一是,不要试图用C或C编译器++。

如果你想快速开发的东西,不产生本地代码;目标现有的虚拟机如CLR,JVM,或的Lua 的虚拟机。使用最大适合生成代码。

如果你正在写一个解释的另一个很好的选择是只使用内存管理和您的底层编程语言的其他设施。解析到一个AST,然后通过AST的树径解释。这将快让你掉在地上。性能是不是最大的,但它是可以接受的。 (使用这种技术我曾经写过一个PostScript解释在Modula-3语言。第一个实现了一个星期,虽然它后来经历了一些性能调整,主要是在词法分析器,它从来没有被替换。)

避免LALR解析器生成器;使用的东西,节省您的时间,像ANTLR或 Elkhound GLR分析器发电机。

在编译程序设计经典书

“编译器设计原理”由Alfred V.阿霍和Jeffrey D.乌尔曼。现在的存在了相当长的一段时间,它的粉红色骑士和绿龙是众所周知的至少一对夫妇CS几代学生的。

也...

“编译原理,技术和工具”由Alfred V.阿霍,莫妮卡S.榄,拉维塞提,杰弗里·乌尔曼

如果你有兴趣写一个编译器,那么这些无疑是开始的最好的地方。

  

至于谁知道C ++很好的人,   什么提示,你可以给一个人谁   正在写一个程序或脚本语言?

不要去做。 (或至少觉得漫长而艰难的,在这之前!)

如果你想编写一个脚本语言,以公开的方法/一些定制编写的对象的属性,这将是更好地执行那些Java(或.NET / VB或所有这些恶心Microsoftisms),然后使用在 Bean脚本框架语言作为脚本语言之一。 (与任何等效是Microsoft端。)

有关编译器的任何问题都将在有一个答案“去读一读龙书,读过那本书,这本书......”所以,不管他们在几分钟之内的内容。所以我跳过部分(像我在第一时间告诉)。读这些书来学习如何使用你想要的工具,大约是有用的阅读角动量学习如何骑自行车。

因此,要回答你问什么,没有质疑你的意图,我可以很容易地推荐ANTLR和antlrworks对于初学者。您可以轻松地生成您的AST(其中真正的奇迹发生,我认为),并在视觉上调试你的语法。它为您生成一个工作编译器的一个很好的一部分。

如果你知道你的东西,并希望有更多的控制或不喜欢ANTLR,你可以使用的柠檬解析器生成和 ragel 状态机的编译器(具有用于词法特殊支持)一起

如果你并不需要太多的性能,因为你计划生成的C / C ++代码,你可以跳过自己做任何优化,在离开的东西到你的C / C ++编译器。

如果你可以用一个缓慢的运行活着,就可以进一步缩短开发工作只是做解释,因为它往往是更容易实现动态特性这种方式。

我想每个人都缺少一个非常重要的一点。

为什么 的你想要写一个编译器/解释/分析器等。

这将严重决定了很多你做什么。

我已经在不少语言实现的工作,一些比较怪异,一些特定领域,通过命令环境有的干脆照本宣科的进展(通常在命令环境后来被隐藏)。每个所需的不同水平的技术人员。

许多书籍可用。我爱的人是一个BYTE书:螺纹解释型语言 - 敢打赌那是绝版。

简单的脚本引擎可以用几个晚上的思考,有点试验和错误来制作的。

但我敢打赌,有网上课程,现在,将节省您大量的时间。

我强烈推荐看着现有的字节码解释器。如果你可以让你的语言嵌入CIL(.NET)或Java(甚至其他如Python或鹦鹉),你会救自己所有的努力使一个可行的配套环境,并可以用语言概念实验得到。

如果你在写一个解释器或编译计划,因为要写入下一个大的事情不要做。写它,因为你已经有一个宗旨,为它记住或学习。如果你这样做,你会发现你不小心写的下一件大事。

,我已经用于LALR一个好的工具是 GOLD解析系统。它是免费的,语法是巴科斯范式,并有多个实例,包括写在C#,VB.NET,Java和其他引擎。这让你写一个语法,编译语法到一个文件,然后使用一个引擎来解析语法。

如上面所建议的,我建议靶向某种类型的字节代码,如IL。这将允许您利用现有框架的巨额。

好运

如果你不想进入编写编译器,以减少你的语言汇编/机器,那么你的下一个选项是写一个编译器将字节码语言的虚拟机,如JVM,PVM或。 NET。

当然,如果你甚至不想这样做 - 你只是想创建自己的“领域特定语言”,我将建立它的Common Lisp。 Lisp的宏提供创造任何你想要的语法和它解析成Lisp语言的一个相当直接的方法。而且你不必对字节码或组装担心。当然,你需要学习Lisp的。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top