当DSL变得“迷失”时

时间:2012-02-24 10:34:38

标签: python lisp dsl

a recent question about a DSL中,我试图将DSL表达式与嵌入语言的表达混合,这种表达式恰好是程序性的(在这种情况下是Python)。在进行了一些实验之后,我就放弃了严格的程序语法的继续,转而采用lispy风格,而不是我最初的想法

 @MY_DSL_FOO_FUNCTION(params,@ANOTHER_DSL_FUNCTION(...),expression_in_python,more_expressions_in_python)

我现在倾向于

  {MY_DSL_FOO_FUNCTION params,{ANOTHER_DSL_FUNCTION ...},expression_in_python,more_expressions_in_python}

关于此语法决定的任何意见(最好是基于经验)?

1 个答案:

答案 0 :(得分:2)

如果您稍微修改一下这种语法,以便正确地使用()' a和#,那么您就不需要" DSL"。

你有普通的Python。生活很美好。

from my_standard_package import *

(MY_DSL_FOO_FUNCTION, params, (ANOTHER_DSL_FUNCTION, ), expression_in_python, more_expressions_in_python)

您需要做的只是添加,等等。因为你似乎有两件事 - 函数和表达式,也许你的意思是这个。

( MY_DSL_FOO_FUNCTION(params), ANOTHER_DSL_FUNCTION(), expression_in_python, more_expressions_in_python )

那可能更像是Pythonic。

但也许你的目标是某种后期绑定,其中元组稍后会在某些其他环境中进行评估。

from functools import partial
( partial(MY_DSL_FOO_FUNCTION, params), ANOTHER_DSL_FUNCTION, lambda: expression_in_python, lambda: more_expressions_in_python )

通过这种方式,带参数的函数用于构建可以在以后评估的其他函数。是。这确实涉及更多语法。然而。它还避免了创建另一种语言。