创建我自己的编程语言

时间:2010-09-07 20:22:48

标签: c++ compiler-construction programming-languages interpreter

  

可能重复:
  References Needed for Implementing an Interpreter in C/C++
  How to create a language these days?
  Learning to write a compiler

我知道一些c ++,非常擅长php,亲们使用css html,还可以使用javascript。所以我在考虑如何创建c ++我的意思是计算机如何理解代码的含义?它怎么读...所以我可以创建自己的语言以及如何创建?

13 个答案:

答案 0 :(得分:47)

如果您对编译器设计感兴趣(“计算机如何理解代码的含义”),我强烈推荐Dragon Book。我在大学时使用它,并且自己创建编程语言。

答案 1 :(得分:37)

“我时不时地感受到设计节目的诱惑 语言,但我只是躺下,直到它消失。“ - L.彼得 德语

编辑(对于那些渴望上下文的人):

"[L. Peter Deutsch] also wrote the PDP-1 Lisp 1.5 implementation, Basic PDP-1 LISP, 'while still in short pants' between the age of 12-15 years old."

答案 2 :(得分:19)

如果您想了解计算机如何理解代码,您可能需要学习一些汇编语言。它是一种低级语言,可以让您更好地理解真正执行的各种简单指令。您还应该能够了解如何使用条件跳转来实现更高级别的构造,例如循环。

对于更低级别的理解,您需要学习电子学。数字逻辑向您展示如何使用电子“门”并实现可以理解汇编语言代码生成的机器代码的通用CPU。

对于真正低水平的东西,你可以学习材料科学,它可以教你如何真正使门在原子水平上工作。

你听起来像一个足智多谋的人。您可能希望根据您的理解水平搜索这些主题的书籍和/或网站,并专注于您最感兴趣的内容。对所有这些的相当完整的理解来自计算机科学或计算机工程学士学位,但对于你所处的有动力的人来说,很多事情都是可以理解的。

答案 3 :(得分:11)

是的,可以创建自己的语言。看看编译器编译器。或者如果你敢于使用某些脚本语言的源代码。一些有用的工具是yacc和bison以及lexx。

其他人提到了龙书。在我大学时代,我们使用了一本被称为“编译理论与实践”的书。

没有必要学习汇编程序来编写语言。例如,Javascript在称为解释器的东西中运行,解释器是执行javascript文件的应用程序。在这种情况下,解释器通常内置在浏览器中。

最简单的启动程序语言可能是编写一个简单的基于文本的计算器。即获取文本文件,运行它并执行计算。你可以很容易地用C ++编写它。

我的大学项目的第一语言是给予我们的BNF定义的语言。然后我们必须编写一个解析器,将其解析为内存中的树结构,然后编写为3地址代码(就像汇编程序一样)。您可以很容易地将3个地址代码转换为实际汇编程序或为其编写解释器。

答案 4 :(得分:7)

烨!这绝对是可能的。其他人提到了龙书,但网上也有很多信息。例如,llvm有一个关于实现编程语言的教程:http://llvm.org/docs/tutorial/

答案 5 :(得分:4)

我真的推荐Programming Language Pragmatics。这本书很棒,可以帮助您从语言到编译器的工作方式以及创建自己的语言。它比“龙书”更容易获得,并解释了在前进之前事情是如何运作的。

答案 6 :(得分:3)

有可能。您应该了解编译器和/或解释器:它们的用途和制作方法。

答案 7 :(得分:3)

开始学习ASM并阅读字节代码的工作方式,你可能有机会:)

答案 8 :(得分:3)

如果你知道C - 听起来像你那样 - 抓住这本古老书籍的旧版本: http://www.amazon.com/Craft-Take-Charge-Programming-Book-Disk/dp/0078818826

在其中有一章,作者在C中创建了一个“C”解释器。它在学术上并不像Dragon书那样严肃,但我记得它非常简单,非常实用且易于理解,因为你刚刚开始,这将是对语言“语法”的想法的一个很棒的介绍,并“标记”一个程序。

这将是您开始的理想场所。此外,二手书的价格为0.01美元,比龙书还要便宜。 ;)

答案 9 :(得分:3)

从创建解析器开始。阅读EBNF语法。这将回答有关计算机如何读取代码的问题。这是一个非常高级的话题,所以不要期望自己太多,但要玩得开心。我用过的一些资源是bison,flex和PLY

答案 10 :(得分:3)

是的!对编译器感兴趣是我对专业CS的关注(之前我曾经在EE的路上,并且只在大学时正式转换过方),这是学习TON关于各种计算机科学主题的好方法。你有点年轻(当我开始使用解析器和口译员时,我在高中时),但是现在有更多的信息在你的指尖。

从小处开始:设计你能想到的最微小的语言 - 从一个简单的数学计算器开始,它允许变量赋值和替换。冒险时,尝试添加“if”或循环。忘记像lex和yacc这样的神秘工具,尝试手工编写一个简单的递归下降解析器,也许转换为简单的字节码并为它编写一个解释器(避免了解特定机器的组装,寄存器分配等所有困难部分)。你将从这个项目中学到很多东西。

和其他人一样,我推荐龙书(1986年版,我不喜欢新书,坦白说)。

我会为你的其他项目添加它,我建议使用C或C ++,抛弃PHP,不是因为我是一个语言偏见,而是因为我认为通过C / C ++的困难来教你一个更多关于底层机器架构和编译器问题。

(注意:如果你是一名专业人士,建议不是创造一种新语言。这几乎不是正确的解决方案。但作为一个学习和探索的项目,它太棒了。)

答案 11 :(得分:1)

如果你想要一个非常通用(但写得很好)的主题介绍 - 计算基础 - 我强烈推荐Charles Petzold出版的一本名为 Code 的书。他解释了您感兴趣的一些主题,从那里您可以决定自己想要创建什么。

答案 12 :(得分:1)

看看这本书, The Elements of Computing Systems: Building a Modern Computer from First Principles它将逐步介绍设计计算机语言,编译器,虚拟机,汇编程序和计算机的几个方面。我认为这可以帮助您回答一些问题。