Python中的迷你语言

我在Python中创build了一个简单的迷你语言parsing器,编程接近问题领域和所有这些。

无论如何,我想知道这里的人怎么会这样做 – 在Python中做这种事情的首选方法是什么?

我不打算给出具体的细节,因为目前我只是在研究Python整个领域是多么容易。

感谢您的input!

Pyparsing在写“小语言” 方面很方便。 我在PyCon'06上做了一个简单的冒险游戏引擎的介绍,其中parsing和解释的语言是游戏命令集(“库存”,“拿剑”,“滴书”等)。 (源代码在这里 )

您还可以在pyparsing wiki 出版物页面find其他pyparsing文章的链接。

我对PLY (Python Lex-Yacc)拥有有限但积极的经验。 它将Lex和Yaccfunction组合在一个Python类中。 你可能想检查一下。

同行Stackoverflow'er Ned Batchelder对他的网站上的可用工具有一个很好的概述 。 还有一个Python网站本身的概述。

我会推荐funcparserlib 。 它是专门为parsing小语言和DSL编写的,比pyparsing更快更小(请参阅主页上的统计信息)。 极简主义者和function程序员应该喜欢funcparserlib

编辑:顺便说一句,我是这个图书馆的作者,所以我的意见可能有偏见。

Python是一种非常简单和可扩展的语言,我只是build议创build一个全面的Python模块,并对其进行编码。

我看到,当我input上面的内容时, PLY已经被提及。

为了提高生产力,我总是使用像CocoPy ( Tutorial )这样的parsing器生成器来将你的语法转换成一个(正确的)parsing器(除非你想为了学习而手动实现parsing器)。

其余的是写实际的解释器/编译器(创build基于栈的字节码或内存AST被解释,然后评估它)。

如果你现在问我这个,我会尝试python的textx库。 你可以很容易地用python创build一个dsl! 优点是它为你创build一个AST,并且将lexing和parsing结合起来。

http://igordejanovic.net/textX/