2010-05-06 82 views
0

说我发现了一个很好的开源软件/库,用python编写。我想将我创建的一些函数或方法包装成易于理解的语言。如何在另一种语言之上开发特定于领域的语言?

do porter_stemm(DOC)(在DSL)将等同于功能或一系列写在Python方法。

我想创建一个DSL是简单易学,但需要这种DSL翻译成原始的开源软件的软件。

IM不知道如果我在这里清楚,但我的本意是:

  1. 创建一个简单易学,用户可以使用在一定的利基解决问题的代码语言。
  2. 这种简单的语言需要通过一些中间件翻译或编译或解释为原始开源软件的语言(python)。

回答

0

通常情况下,DSL仍然具有与其主机语言相同的基本语法,并且只是扩展了语言的功能。所以对于你的一切仍然是用Python编写的,它只是Python的一些特定领域的函数,变量等

我与DSL的经验大多是与语言Lisp的家庭。在那里,一个典型的DSL可能会用宏来实现,这些宏会生成特定于DSL的代码模式。 (另外,与DSL有关的功能)。关键是,尽管宏和函数可能会扩展语言的功能,但仍然以该语言实现。

我想你可以走的更远了一步,写了一个Python解释器 - 但你仍然可以得到Python的运行性能为免费的,你的翻译翻译自定义语言回了Python。

1

使用pyparsing(比传统的lexx-yacc类似的方法更简单)编写您的DSL的语法和解析器(例如Python),解析器可以生成一个语义上有意义的节点树,然后您可以更简单)走这棵树并解释它,或者(稍微简单一些)遍历该树并生成等效的Python代码。这是我为大多数主机语言建议的方法。某些主机语言(Lisp和Scheme是主要语言)具有强大的宏,因此在这些语言中使用宏构建DSL更为常见。

将你的DSL嵌入到主机语言中基本上意味着你并不是真正在做一个DSL,而是一个更传统的框架,所以这是一种非常不同的方法(可能更强大,但可能不那么容易学习,程序员;-)。

相关问题