10

希望这个问题不会太复杂或模糊。我知道我想在我的脑海里,所以交叉手指我可以在文本中理解这一点。

我正在寻找一种具有我自己的规范语法的语言,所以我假设我需要自己创建一个。在过去的几天里,我一直在阅读有关编译器、词法分析器、解析器、汇编语言、虚拟机等方面的内容,并且我正在努力根据实现目标所需的内容来整理所有内容(文件附在底部一些规格)。从本质上讲,我对具体需要使用哪些工具来前进感到非常困惑。

一点背景知识:制作的语言有望用于实现基于文本的多人 MUD 服务器。因此,它需要简单的内置功能来创建/维护客户端 TCP/IP 连接、非阻塞 IO、通过 SQL 或类似方式访问数据库。我也对安全性感兴趣,因为我不希望为这种语言编写的代码在没有专业软件的情况下被普通公众窃取和使用。这可能意味着它应该编译为目标代码

那么,创建符合这些规范的语言的最佳选择是什么

我的结论如下。这只是我最有根据的猜测,所以如果你认为我走错了方向,请与我竞争。我主要只是为了看看当专家来发表评论时我有多困惑。

  1. 为了代码安全,我应该想要一种可以在虚拟机中编译和运行的语言。如果我这样做,我将有很多工作要做,不是吗?自己写一个虚拟机,汇编语言在底层,然后在高层,代码库自己处理IO,sockets等,而不是使用现有的模块?

  2. 我只是很困惑。

  3. 我不确定我是否有道理。

如果有人可以让我的大脑平静一点,我将由衷地感激!或者,如果我偏离了路线并且有更简单的方法可以做到这一点,请告诉我!

4

6 回答 6

10

设计定制的特定领域编程语言是解决问题的正确方法。实际上,使用 DSL 可以更好地解决几乎所有问题。您可能想用谷歌搜索的术语是:domain specific languageslanguage-oriented programming.

有人会说设计和实现编译器是一项复杂的任务。这根本不是真的。实现编译器是一件小事。有大量可用的高质量编译器,您需要做的就是定义从您自己的语言到另一种语言或其他语言组合的简单转换。你需要一个解析器——现在这没什么大不了的,周围有 Antlr 和大量基于 PEG 的自制解析器生成器。你需要一些东西来定义你的语言的语义——现代函数式编程语言在这个领域大放异彩,你所需要的只是支持 ADT 和模式匹配的东西。你需要一个目标平台。有很多可能性:JVM 和 .NET、C、C++、LLVM、Common Lisp、Scheme、Python 以及任何其他由文本字符串组成的东西。

有现成的框架来构建您自己的语言。从字面上看,任何 Common Lisp 或 Scheme 实现都可以用作这样的框架。LLVM 也有你需要的所有东西。.NET 工具箱没问题 - 有很多代码生成选项可用。有像这样的专门框架用于构建具有复杂语义的语言。

选择任何你喜欢的方式。这很容易。比你想象的要容易得多。

于 2011-04-20T12:37:14.950 回答
3

编写自己的语言和工具链来解决看似标准的问题听起来像是错误的方法。你最终会开发另一种语言,而不是编写你的 MUD。

许多游戏开发者采用脚本语言来描述自己的游戏世界,例如:http ://www.gamasutra.com/view/feature/1570/reflections_on_building_three_.php

另请参阅:https : //stackoverflow.com/questions/356160/which-game-scripting-language-is-better-to-use-lua-or-python 在这种情况下使用现有语言(Pythong 和 LUA) -游戏脚本。

于 2011-04-20T12:13:11.247 回答
3

由于您对编译器和创建计算机语言知之甚少:不要。世界上大约有五个人擅长它。

如果你还想尝试:创建一个好的通用语言至少需要 3 年时间。全职。这是一项艰巨的任务。

因此,您应该尝试一种现有的语言,它已经解决了几乎所有问题,除了自定义”部分。但也许语言做的事情比你想象的要好,你根本不需要“自定义”部分。

这里有两个选项:

  1. Python,一种漂亮的脚本语言。虚拟机将为您将语言编译成字节码,无需在编译器上浪费时间。语法非常灵活,但由于 Python 中的所有内容都有充分的理由,所以它不太灵活。

  2. 爪哇。使用新的Xtext 框架,您可以在几分钟内创建自己的语言。这并不意味着您可以在几分钟内创建一门好的语言。只是一种语言。

Python 附带了很多库,但如果您需要其他任何东西,空气很快就会变得稀薄。从积极的方面来说,你可以在短时间内写出大量优秀且可靠的代码。1 行 python 通常等于 10 行 Java。

Java 并没有太多的装饰,但实际上有数以百万计的框架可以完成您可以想象的一切......以及很多您无法做到的事情。

那就是说:为什么要限制自己使用一种语言?使用Jython,您可以在 Java VM 中运行 Python 源代码。所以你可以用 Java 编写核心(Web 服务器、SQL 等),用 Python 编写灵活的 UI 部分、冒险和东西。

于 2011-04-20T12:19:32.230 回答
2

如果您真的想创建自己的小语言,一个更简单且通常更快的解决方案是查看lexyacc等工具以及类似系统(ANTLR是一种流行的替代方案),然后您可以生成代码到现有的虚拟机或自己做一个简单的。

自己动手是一种很棒的学习体验,将帮助您了解其他虚拟机的幕后情况。

于 2011-11-15T13:02:57.233 回答
0

理解编程语言设计和实现概念的一个很好的来源是麻省理工学院出版社的计算机程序结构和解释。对于任何想要设计和实现一门语言的人,或者任何希望成为更好的程序员的人来说,这都是一本很好的读物。

于 2011-12-22T12:29:45.053 回答
-3

据我所知,您想知道如何开发自己的编程语言。

如果是这样,您可以通过不同的方法完成此操作。几分钟前我刚刚完成了我自己的,我使用 HTML 和 Javascript(和 DOM)来开发我自己的。我使用了很多 x.split 和 x.indexOf("code here")!=-1 来这样做...我没有太多时间举个例子,但是如果您使用 W3schools 并搜索“indexOf”和“分裂”我相信你会找到你可能需要的东西。我真的很想向您展示我所做的并通过下面的代码,但由于可能盗窃和声称我的工作,我不能。

我几乎只是在这里说您可以使用 HTML 和 Javascript 制作自己的编程语言,这样您和其他人就不会对他们寄予厚望。我希望这对大多数事情都有帮助....

于 2017-09-01T00:06:26.873 回答