Groovy 中如何使用 GOTO 语句?

2024-03-29

我看到了这个关于 Scala 延续的好博客文章 http://blog.richdougherty.com/2009/03/goto-in-scala.html“模仿”一个GOTOScala 语言中的语句。 (阅读更多关于此处继续 http://www.scala-lang.org/node/2096)

我希望在 Groovy 编程语言中也能有同样的效果。我认为这是可能的Groovy 编译器阶段转换 http://groovy.codehaus.org/Compiler+Phase+Guide.

我正在研究领域特定语言 (DSL),并且首选嵌入到 Groovy 中。我想要GOTO声明,因为 DSL 是一种非结构化语言(并且是从工作流程图生成的)。我需要一个“标记”的 goto 语句,而不是行号。

DSL 是一种用于工作流定义的语言,并且由于节点之间的箭头没有限制,因此goto是需要的。 (或不可读的代码while etc)

作为 Groovy 和 Scala 的初学者,我不知道是否可以将 Scala 解决方案翻译为 Groovy,但我认为 Groovy 中有延续。

我正在寻找一种算法/代码来模拟 Groovy 中的标记 goto。我想到的一种算法是使用eval反复;做eval当你处于goto。 DSL 的评估采用eval已经。

我不是在寻找“while”循环或其他东西,而是翻译这段代码以使其能够工作(其他一些语法没有问题)

label1: 
a();
b();
goto label1; 

附: 如果我真的应该使用/想要 GOTO 语句,我不喜欢讨论。 DSL 是一种规范语言,可能无法处理变量、效率等问题。

PS2:然后还有一些其他关键字GOTO可以使用。


您可能想更多地了解您正在尝试构建的语言,也许它很简单,处理转换将是过度设计。
使用 AST 是很多高手多年来一直在做的事情,而且它真的很强大。
spock 框架人员重写了您创建的测试,用标签注释代码。http://code.google.com/p/spock/ http://code.google.com/p/spock/

哈姆雷特·达西曾多次就此事发表过演讲。在他的博客上也可以找到一些帖子。http://hamletdarcy.blogspot.com/ http://hamletdarcy.blogspot.com/
塞德里克·尚波 (Cedric Champeau) 描述了他所构建的一个有趣的转型及其演变http://www.jroller.com/melix/ http://www.jroller.com/melix/

除了我记得的那些人之外,可能还想念很多其他人。
您可能已经知道但确实有用的可能起点。http://groovy.codehaus.org/Compile-time+Metaprogramming+-+AST+Transformations http://groovy.codehaus.org/Compile-time+Metaprogramming+-+AST+Transformations
http://groovy.codehaus.org/Building+AST+Guide http://groovy.codehaus.org/Building+AST+Guide

长话短说,我想说这很有可能

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Groovy 中如何使用 GOTO 语句? 的相关文章

随机推荐