parsing - 自定义编程语言 : how?

标签 parsing compiler-construction language-design vm-implementation mud

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

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

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

那么,创建适合 these specifications 的语言的最佳选择是什么?

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

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

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

    最佳答案

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

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

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

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

    关于parsing - 自定义编程语言 : how?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5729937/

    相关文章:

    VLIW 架构的 GCC 编译器基础架构

    python - Python 是否像 Perl 的 -c 一样有一个 "compile only"开关?

    delphi - 为什么有些字符串例程会产生结果,而有些则要更改Delphi中的原始例程?

    Javascript 明显的疯狂

    ios - Swift 4 从JSON中获取相关数据

    c++ - 错误 : c++ [map] does not name a type

    c++ - 与 C++ 相比,Vala 是一种理智的解析语言吗?

    java - 通过 Java 解析输出

    C - 在什么情况下外部声明成为定义?

    java - OptionalInt 与 Optional<Integer>