如何开始编写一个非常简单的编程语言

Rex*_*ing 16 c programming-languages project

最近,我在寻找有关今年夏天我可以使用C构建的想法,我发现了这篇文章:学习C的有趣项目?

实现编程语言.这不一定非常难 - 我做了一个不能命名的语言 - 但它会迫使你学习C语言的很多重要部分.如果你不想写一个词法分析器和/或解析器你自己,你可以使用lex/flex和yacc/bison,但是如果你打算这样做,你可能想要从一个更小的项目开始.

我对实现编程语言答案很有兴趣,我想知道如何开始这个?我已经阅读了整本K&R书,我也完成了一些练习.如果重要的话,我在C++和Java方面也有一些经验.有小费吗?谢谢!

小智 7

我只能说,我看到很多人问诸如“我如何制作编程语言?”之类的问题。或者“制作一种编程语言有多难”,大多数答案只是告诉他们你必须经过多年的大学学习并阅读 1000 页长的书籍。我在这里告诉大家,您可以发布这些答案,但这对他们制作编程语言的旅程没有任何帮助。我 16 岁,从事编程近 2 年,我编写编程语言。面向对象的也相当高级,但我没有读过任何书,我也没有读过 8 年的大学。为了让人们开始,这里有一个用 C# 编写的简单编程语言:

string code = "print Hello World";
foreach (string a in code.Split('\n'))
{
    if (a.StartsWith("print "))
    {
        Console.WriteLine(a.Substring(6));
    }
}
Run Code Online (Sandbox Code Playgroud)

任何了解基本 C# 的人都应该能够理解这一点。如果没有一些编程经验,您就无法开始编写编程语言。确保你学习了一门编程语言并确保你对它有很多了解,然后开始编写简单的代码,就像我发布的那样,通过实验和实践,你将开始编写一些复杂的编程语言。时间 :)

  • 嘿,我15岁了(不久前才14岁)。我创建了 JavaScript 和 Lua 解释器。这种方法的问题在于它非常静态。我建议人们首先了解词法分析器、解析器和(可选)AST。然而,这很好地展示了创造一种语言有多少种不同的方法。根据我(有限的)经验,当你了解这些概念时,它们会简单得多,即制作词法分析器听起来很困难,但通常你可以将其简化为核心概念。 (3认同)
  • 那是一个转译器... (2认同)

Wal*_*ght 6

我从一个简单的桌面计算器程序开始,可以读取如下内容:

5 + 10*3

并打印答案.然后你可以进行添加变量,控制流程,甚至功能.

  • 尽管实现编译器来评估 `5 10 + 3 *` 更容易:) http://en.wikipedia.org/wiki/Reverse_Polish_notation。仍然是一个简单的台式计算器 (4认同)

Uri*_*Uri 5

了解正则表达式,语法和良好的解析器生成器.

即使您最终实现自己的解析器,这些也是实现任何编程语言的基本概念.


Nic*_*kis 5

从一个非常简单的(玩具)语言开始; 稍后您可以创建更复杂的语法.

你可以写一个解释器来解析字符串,比如

integer x
integer y
set x, 2
set y, 5
add x, y // x = x + y
print x
Run Code Online (Sandbox Code Playgroud)

并立即评估每一行.如果将行存储在向量中,则可以很容易地使用goto命令实现循环.


一个例子,另一个世界(老式游戏)
脚本编辑器:

替代文字


Mar*_*ote 3

嗯,我认为这样的事情确实很难做到,但它也是一个很棒的宠物项目。您应该了解解析器、词法分析器、流程控制、范例(命令式、函数式、面向对象)和许多其他事物的概念。

许多人说《龙之书》是这方面最好的书之一。也许你可以看一下:)

祝你好运!

  • 不要推荐《龙》书用于“非常简单”的玩具项目。只是不要。 (3认同)
  • @Markust:如果您对有关编译器和编程语言的大量计算机科学理论感兴趣,那么《龙》书是一本很好的参考书。这不是一本很棒的“入门”书。 (3认同)