说我找到了一个用python编写的好的开源软件/库。我想将我创建的一些函数或方法包装成我自己易于理解的语言。
do porter_stemm(DOC)
(DSL)等同于用python编写的函数或一系列方法。
我想创建一个易于学习的DSL,但需要将这个DSL翻译成原始的开源软件软件。
我不确定我在这里是否清楚,但我的意图是:答案 0 :(得分:1)
编写DSL的语法和解析器,例如,在Python中,使用pyparsing(比传统的lexx-yacc方法更简单) - 解析器可以生成具有语义意义的节点树,然后您可以(更简单地)遍历该树并对其进行解释,或者(稍微简单一点)遍历该树并生成等效的Python代码。这是我为大多数主机语言建议的方法。一些主机语言(Lisp和Scheme是主要语言)具有强大的宏,因此在这些语言中,用宏构建DSL更为常见。
使用宿主语言嵌入你的DSL基本上意味着你并不是真正做DSL而是更传统的框架,所以这真的是一种不同的方法(可能更强大,但对于非程序员来说可能不那么容易学习) ; - 。)
答案 1 :(得分:0)
通常,DSL仍然具有与其宿主语言相同的基本语法,并且只是扩展语言的功能。因此,所有内容仍然是用Python编写的,它只是带有一些特定于域的函数,变量等的Python。
我使用DSL的经验主要是使用Lisp系列语言。在那里,典型的DSL可以用宏实现,它生成特定于DSL的代码模式。 (另外,与DSL相关的功能)。关键是,尽管宏和函数可以扩展语言的功能,但它们仍然以该语言实现。
我想你可以更进一步,用Python编写一个解释器 - 但是你仍然可以免费获得Python的运行性,因为你的解释器会将你的自定义语言翻译成Python。