我想用haskell将我的DSL翻译成R

时间:2014-08-19 21:54:12

标签: haskell code-generation dsl

我想用haskell将我的DSL翻译成R.我的意思是我想首先解析我的DSL,然后从中生成R代码。我知道在haskell中实现了DSL,但他们都认为编译DSL的目标语言是haskell代码。

请注意,最终产品应生成R代码。因此,它不仅仅是在haskell中实现的DSL,而是生成非haskell代码的DSL;在我的情况下R代码。

DSL的伪代码可以类似于:

d =_ a o b o c
# ==> 
d <- function(x) a( b( c( x))) # generated R code



f1 a b =_ a + b
# ==> 
f1 <- function(a, b) a + b # generated R code



f2 =_ \x. a (\y. y + y) (x * x) (\z. z / z)
# ==>
f2 <- function(x) a( function(y) y + y, x * x, function(z) z / z) # generated R code



put_ "abc " "def"
# ==>
print(put("abc ", "def ", sep="")) # generated R code

1 个答案:

答案 0 :(得分:1)

您需要编写一个小的编译器,它将读取您的DSL文件并生成R代码。您可以查看几个编译器,以了解如何编写它。

Haskell到C:JhcAJHC),Copilot
Haskell到JS:FayRoy

还有硬件语言的编译器。我建议看一下Fay的参考资料