Python中的迷你语言

时间:2009-10-10 12:06:19

标签: python dsl

我正在用Python创建一个简单的迷你语言解析器,在问题域附近进行编程以及所有这些。

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

我不会详细说明我所追求的内容,因为目前我只是在研究整个领域在Python中的容易程度。

感谢您的投入!

6 个答案:

答案 0 :(得分:39)

Pyparsing对于编写“小语言”非常方便。我写了一个presentation at PyCon'06来编写一个简单的冒险游戏引擎,其中被解析和解释的语言是游戏命令集(“库存”,“拿剑”,“掉书”等)。 (源代码here。)

您还可以在pyparsing wiki Publications page找到其他pyparsing文章的链接。

答案 1 :(得分:22)

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

Stackoverflow'er Ned Batchelder在他的网站上有nice overview个可用工具。还有Python website本身的概述。

答案 2 :(得分:20)

我会推荐funcparserlib。它专门用于解析小语言和DSL,它比pyparsing更快更小(参见其主页上的统计数据)。极简主义者和功能程序员应该喜欢funcparserlib

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

答案 3 :(得分:5)

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

我看到,当我输入上述内容时,PLY已被提及。

答案 4 :(得分:3)

为了提高工作效率,我总是使用像CocoPyTutorial)之类的解析器生成器将您的语法转换为(正确的)解析器(除非您想手动实现解析器)为了学习)。

其余的是编写实际的解释器/编译器(创建基于堆栈的字节代码或内存AST进行解释,然后对其进行评估)。

答案 5 :(得分:3)

如果你现在问我这个问题,我会尝试使用textx库进行python。你可以使用python轻松创建一个dsl!优点是它为您创建了一个AST,并且结合了lexing和解析。

http://igordejanovic.net/textX/