支持goto的Java编译器或JVM语言?

是否有一个java编译器标志允许我使用goto作为有效的构造? 如果没有,是否有支持goto的第三方java编译器? 如果没有,是否有任何其他支持goto语言,同时可以轻松调用用Java编写的方法?

原因是我正在制作一种用Java实现的语言。 Gotos是我语言的重要组成部分; 我希望能够将其编译为本机或JVM字节码,尽管它必须能够轻松使用Java库(即.C支持goto ,但要使用它我必须在C中重写库)。

我想生成C或Java等源文件,而不是字节码或机器代码。 我正在使用第三方编译器来做到这一点。

JVM支持转到字节码级别。 如果您使用自己的语言,则应使用BCEL或ASM等库,而不是生成.java文件。

JVM字节码包含goto指令(例如,参见BCEL文档)。

不要忘记Java本身支持跳转到标签的概念,使用:

 break {labelname} 

要么

 continue {labelname} 

有关详细信息,请参阅此JDC技术提示 。 如果您的语言编译为JVM字节码,那么您可以使用它。

根据定义,没有Java编译器允许goto。 Java编译器必须实现JLS ,而JLS不允许使用。 但是,显然可以将带有gotos的语言编译到JVM。 AMPC是一个声称支持C89的C-to-JVM编译器。

还要注意Java字节码有一个goto指令,虽然它显然是基于指令而不是基于行的。

您可以编写代码生成器来定位Jasmin 。 您可以根据需要在Jasmin中使用goto。 🙂

几乎任何你可以用goto做的事情都可以用循环来完成。 goto实际上是多余的,并且通常是不可信的编程方式。 恕我直言。

如果你想向后转

 LABEL: do { // code before goto // goto LABEL continue LABEL; // code after goto break; } while(true); 

如果你想转发前锋

 LABEL: do { // code before goto // goto LABEL continue LABEL; // code after goto break; } while(false); // Label is effectively here // code after LABEL. 

goto关键字保留但在Java编程语言中未使用。 (摘自Java语言规范的 第3.9节 。)

因此,至少在Java编程语言中,没有办法启用goto

但是,如前所述,Java虚拟机中的goto操作码是可用的,并在Java编译器从源生成字节码时使用。

第7章:在实现JVM语言时,可能会对Java虚拟机规范中 的Java虚拟机进行编译 。

Apache Thrift可用于从单一来源生成不同编程语言的源代码。 http://incubator.apache.org/thrift/

Java不允许使用goto关键字。 但是,它允许使用标签并使用breakcontinue使用标签而不是goto 。 事实上,Java不是没有goto语句的语言,而是一种令人不舒服的语言。

你不应该使用goto,因为它是EVIL 😉

更严重的是,也许你可以看看E. Dijkstra的着名文章: http : //www.u.arizona.edu/~rubinson/copyright_violations/Go_To_Considered_Harmful.html