Jul*_*ian 3 dsl groovy continuations goto transformation
我看到这篇关于Scala延续的好文章帖子,它"模仿" GOTOScala语言中的一个语句.(阅读更多关于Continuations的信息)
我想在编程语言Groovy中使用相同的东西.我认为在Groovy编译器阶段转换中是可能的.
我正在研究领域特定语言(DSL),并且首选嵌入在Groovy中.我想GOTO发表声明,因为DSL是一种非结构化语言(并且是从工作流程图生成的).我需要一个'标记'的goto语句,而不是行号.
DSL是工作流定义的语言,并且因为节点之间的箭头没有限制,所以goto需要a.(或不可读的代码while等)
作为Groovy和Scala的初学者我不知道如果我可以将Scala解决方案转换为Groovy,但我不认为Groovy中有延续.
我正在寻找一个算法/代码,用于在Groovy中模拟标记的goto.我想到的一种算法是eval重复使用; 做eval你什么时候做的goto.eval已经使用已经评估的DSL .
我不是在寻找'while'循环或其他东西,而是翻译这段代码以便它可以工作(其他一些语法没问题)
label1:
a();
b();
goto label1;
Run Code Online (Sandbox Code Playgroud)
PS:如果我真的应该/想要GOTO声明,我不喜欢讨论.DSL是一种规范语言,可能无法应对变量,效率等.
PS2:然后GOTO可以使用其他一些关键字.
小智 5
您可能想要更多地了解您正在尝试构建的语言,也许它很简单,处理转换将过度工程化.
使用AST是人们多年来一直在做的事情,它真的很强大.
spock框架人员重写你用标签创建注释代码的测试. http://code.google.com/p/spock/
哈姆雷特·德·艾西已经就此事发表了几次演讲.他的博客上也可以找到几个帖子. http://hamletdarcy.blogspot.com/
Cedric Champeau描述了他建立的一个有趣的转变及其演变http://www.jroller.com/melix/
可能会遗漏很多其他人,但我记得那些人.
您可能已经知道但可能非常有用的起点. http://groovy.codehaus.org/Compile-time+Metaprogramming+-+AST+Transformations
http://groovy.codehaus.org/Building+AST+Guide
长话短说,我说它很有可能