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结合起来。