自定义编程语言:如何?

希望这个问题不会太复杂或模糊。 我知道我脑子里想要什么,所以手指交叉,我可以在文本中找到它。

我正在寻找一种语言,使用我自己的规范语法,所以我认为我需要自己创建一个语言。 我花了几天时间阅读关于编译器,词法分析器,解析器,汇编语言,虚拟机等的内容,并且我正在努力根据我需要完成的目标来分类所有内容(附在底部的文件一些规格)。 从本质上讲,我对于需要使用什么工具进行前瞻充满了疑惑。

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

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

我的结论如下。 这只是我受过最好教育的猜测,所以如果你认为我在走错方向,请和我比赛。 我主要只是包括这个,看看当专家来发表评论时我是多么的困惑。

  • 对于代码安全性,我应该需要一种编译并在虚拟机中运行的语言。 如果我这样做,我会有很多工作要做,不是吗? 在底层编写虚拟机,汇编语言,然后在更高层的代码库上编写自己的IO,套接字等,而不是使用现有的模块?

  • 我只是很困惑。

  • 我不确定我是否有道理。

  • 如果任何人都能够解决我的大脑,我会真诚地感谢! 或者,如果我的方式偏离了课程,并且有更简单的方法可以做到这一点,请让我知道!


    设计定制的特定于领域的编程语言是解决问题的正确方法。 事实上,几乎所有的问题都可以通过DSL来解决。 您可能想要google的术语是: domain specific languageslanguage-oriented programming

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

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

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


    编写自己的语言和工具链来解决似乎是一个标准问题听起来像是错误的路要走。 你最终会开发另一种语言,而不是写你的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)游戏脚本。


    由于您对编译器和创建计算机语言了解不多,因此:不要。 世界上大约有五个人擅长。

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

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

    这里有两个选项:

  • Python,一种美丽的脚本语言。 虚拟机会将语言编译为字节码,无需浪费时间使用编译器。 语法非常灵活,但由于Python中的所有内容都有很好的理由,所以它不太灵活。

  • Java的。 使用新的Xtext框架,您可以在几分钟内创建自己的语言。 这并不意味着你可以在几分钟内创建一个良好的语言。 只是一种语言。

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

    Java并没有带来太多的装饰,但是有数百万个框架可以完成你想象中的所有事情...以及许多你不能做的事情。

    这就是说:为什么只限于一种语言? 使用Jython,您可以在Java VM中运行Python源代码。 因此,您可以用Java编写核心(Web服务器,SQL等)以及Python中灵活的UI部分,冒险和其他内容。

    链接地址: http://www.djcxy.com/p/43703.html

    上一篇: Custom programming language: how?

    下一篇: Tool to parse by grammar to AST (or .y+.lang => xml)