Parsing 自定义编程语言:如何?

Parsing 自定义编程语言:如何?,parsing,compiler-construction,language-design,vm-implementation,mud,Parsing,Compiler Construction,Language Design,Vm Implementation,Mud,希望这个问题不会太复杂或模糊。我知道我想在脑子里想什么,所以祈祷好运,我可以在文本中把这个表达清楚 我正在寻找一种具有我自己规范语法的语言,所以我想我需要自己创建一种。在过去的几天里,我一直在阅读编译器、词法分析器、解析器、汇编语言、虚拟机等方面的知识,我正在努力按照实现目标所需的内容(底部附有一些规范的文件)对所有内容进行分类。从本质上讲,我非常困惑我需要使用什么工具才能继续前进 一点背景知识:该语言有望用于实现一个多人、基于文本的MUD服务器。因此,它需要简单的内置功能来创建/维护客户端TC

希望这个问题不会太复杂或模糊。我知道我想在脑子里想什么,所以祈祷好运,我可以在文本中把这个表达清楚

我正在寻找一种具有我自己规范语法的语言,所以我想我需要自己创建一种。在过去的几天里,我一直在阅读编译器、词法分析器、解析器、汇编语言、虚拟机等方面的知识,我正在努力按照实现目标所需的内容(底部附有一些规范的文件)对所有内容进行分类。从本质上讲,我非常困惑我需要使用什么工具才能继续前进

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

那么,我最好的选择是什么来创建一种适合我的语言呢

我的结论如下。这只是我最好的猜测,所以如果你认为我走错了方向,请与我较量。我写这篇文章主要是想看看当专家们发表评论时我有多困惑


  • 为了代码安全,我需要一种在虚拟机中编译和运行的语言。如果我这样做,我会有很多工作要做,不是吗?我自己编写一个虚拟机,在较低级别上编写汇编语言,然后在较高级别上编写代码库来处理IO、套接字等,而不是使用现有模块

  • 我只是很困惑

  • 我不确定我说的是否有道理


  • 如果有人能让我冷静下来,我会非常感激的!或者,如果我偏离了方向,有更简单的方法,请让我知道

    编写自己的语言和工具链来解决看似标准的问题听起来是错误的选择。你最终会发展出另一种语言,而不是写你的泥

    许多游戏开发人员采用脚本语言来描述自己的游戏世界,例如,请参见:


    另请参见:在本例中使用现有语言(Pythong和LUA)进行游戏内脚本编写。

    因为您对编译器和创建计算机语言了解不多:不要。世界上大约有五个人擅长这项运动

    如果你还想尝试:创建一个好的通用语言至少需要3年的时间。全场比赛结束时间这是一项巨大的事业

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

    这里有两个选项:

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

  • 爪哇。有了新功能,您可以在几分钟内创建自己的语言。这并不意味着你能在几分钟内创造出一门好的语言。只是一种语言

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

    Java没有太多的虚饰,但是有数以百万计的框架,它们可以做你能想象到的一切。。。还有很多你做不到的事情


    也就是说:为什么只局限于一种语言?使用,您可以在JavaVM中运行Python源代码。因此,您可以用Java编写核心(web服务器、SQL等),用Python编写灵活的UI部分、adventures等等。

    设计自定义的领域特定编程语言是解决问题的正确方法。实际上,几乎所有的问题都可以通过DSL更好地解决。你可能会喜欢谷歌搜索的术语是:
    领域特定语言
    面向语言编程

    有人会说,设计和实现编译器是一项复杂的任务。这根本不是真的。实现编译器是一件小事。有大量高质量的编译器可用,您所需要做的就是定义一个从您自己的语言到另一种语言或其他语言组合的简单转换。你需要一个解析器——现在已经不是什么大问题了,有了Antlr和大量基于PEG的自制解析器生成器。您需要一些东西来定义您的语言的语义——现代函数式编程语言在这一领域大放异彩,您所需要的只是支持ADT和模式匹配的东西。你需要一个目标平台。有很多可能性:JVM和.NET、C、C++、LLVM、通用LISP、方案、Python和其他文本字符串。 有现成的框架可用于构建您自己的语言。从字面上讲,任何常见的Lisp或Scheme实现都可以用作这样的框架。LLVM也有你需要的所有东西。NET工具箱还可以-有很多代码生成选项可用。有专门的框架,如用于构建具有复杂语义的语言


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

    如果你真的想创建自己的小语言,一个更简单且通常更快的解决方案是查看像and和类似系统这样的工具(这是一个流行的替代方案),然后你可以为现有的虚拟机生成代码,或者制作一个简单的虚拟机