2012-02-24 4 views
0

a recent question about a DSL私はDSL式を手続き型(その場合はPython)になる埋め込み言語の式と混ぜようとしました。いくつかの実験の後、私はLispyのスタイルの賛成で厳格な手続き構文の継続を放棄した時点で午前、すなわち代わりのDSLが「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} 

任意の意見に向かう傾向(経験に基づくことが好ましい)この構文決定には?

+3

'f(x)'は「手続き型構文」ではないので、通常の数式表現の構文です。 –

+0

ヒント:* ANY *可能な構文で準分数を使用できます。 Pythonは例外ではありません。 –

答えて

2

この構文を少し変更すると、 'と'が正しく使用されますが、「DSL」は必要ありません。

あなたは普通のPythonを持っています。人生は素晴らしい。

from my_standard_package import * 

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

あなたがする必要があるのは、追加するだけです。あなたは関数と表現という2つのことを持っているように見えるので、おそらくこれを意味します。

(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) 

このように、パラメータ付きの関数は、後で評価できる他の関数を構築するために使用されます。はい。これにはより多くの構文が必要です。しかしながら。さらに別の言語を作成することも避けています。

+0

あまりにも遅く答えると申し訳ありませんが、尖った髪のボスの迷惑に気を取られて、どうにかして忘れました。 – slartibartfast

関連する問題