自定义编程语言:怎么样?

Sam*_*Sam 9 compiler-construction parsing language-design mud vm-implementation

希望这个问题不会太复杂或模糊.我知道我想要的是什么,所以手指交叉我可以在文本中得到这个.

我正在寻找一种语法与我自己的规范,所以我想我需要自己创建一个.我花了最近几天阅读有关编译器,词法分析器,解析器,汇编语言,虚拟机等的内容,而且我正在努力根据我实现目标所需的内容进行排序(文件附在底部一些规格).从本质上讲,我对于我需要使用哪些工具才能前进而感到非常困惑.

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

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

我的结论如下.这只是我最好的教育猜测,所以如果你认为我正朝着错误的方向前进,那么请对我提出质疑.我大多只是把它包括在内,看看当专家们发表意见时我是多么的困惑.

  1. 为了代码安全,我应该想要一种编译并在虚拟机中运行的语言.如果我这样做,我将有很多工作要做,不是吗?在较低级别编写虚拟机,汇编语言,然后在更高级别的代码库上编写自己处理IO,套接字等,而不是使用现有模块?

  2. 我只是很困惑.

  3. 我不确定我是否有意义.

如果有人能够平息我的大脑,我真诚地感激它!或者,如果我离开课程并且有更简单的方法,请告诉我!

SK-*_*gic 10

设计自定义域特定的编程语言是解决问题的正确方法.实际上,使用DSL几乎可以解决所有问题.你可能想谷歌的条款是:domain specific languageslanguage-oriented programming.

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

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

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