2009-06-14 10 views
5

gotoを有効な構文として使用できるJavaコンパイラフラグはありますか?そうでない場合、gotoをサポートするサードパーティのJavaコンパイラはありますか?そうでない場合は、gotoをサポートする他の言語がありますが、同時にJavaで書かれたメソッドを簡単に呼び出すことができますか?gotoをサポートするJavaコンパイラまたはJVM言語?

私はJavaで実装されている言語を作っているからです。ゴットは私の言葉の重要な部分です。私はネイティブまたはJVMのバイトコードにコンパイルできるようにしたいが、Javaライブラリ(つまり、Cはgotoをサポートしているが、Cでライブラリを書き直す必要がある)を簡単に使用できる必要がある。

私はCやJavaなどのソースファイルではなく、バイトコードまたはマシンコードを生成します。私はそれを行うためにサードパーティのコンパイラを使用しています。

+2

Plan B:OpenJDKをダウンロードし、gotoをサポートするためにJavaコンパイラをハックアップします。 :-P –

答えて

9

バイトコードレベルでJVMをサポートしています。 独自の言語を使用している場合は、BCELまたはASMのようなライブラリを使用し、.javaファイルは生成しないでください。

5

JVMバイトコード(例えばBCELドキュメントを参照)GOTO命令を含んでいます。

のJava自体が使用して、ラベルにジャンプの概念をサポートしていることを忘れないでください:

break {labelname} 

または

continue {labelname} 

は、より多くの情報のため、このJDC tech tipを参照してください。あなたの言語がJVMのバイトコードにコンパイルされているなら、これを利用できるかもしれません。

+0

構文は角かっこなしです。 break labelname; –

+0

はい。ラベルを挿入する必要があることを示す{labelname}を付けていました。おそらくあまり明確ではない、私は感謝する。 –

2

Javaコンパイラで定義することはできません。 JavaコンパイラはJLSを実装する必要があり、JLSではgotosは使用できません。しかし、JVMを使って言語をコンパイルすることも可能です。 AMPCは、C89をサポートすると主張する1つのC/JVMコンパイラです。

はまた、それは明らかに命令ベースラインベースではないのですけれどもJavaバイトコードは、GOTO命令を持っていることに注意してください。

2

あなたはJasminをターゲットに、あなたのコードジェネレータを書くことができます。ジャスミンでgotoを好きなだけ使うことができます。

+0

ジャスミンのターゲット設定はASM/BCELのターゲティング(J-16の回答のように)とほぼ同じです。 :-P –

1

:-) gotoキーワードは、Javaプログラミング言語で予約したが未使用されます。 (Section 3.9からThe Java Language Specificationまで)

したがって、少なくともJavaプログラミング言語では、gotoの使用を有効にする方法はありません。

しかしながら、既に述べたように、Java仮想マシンでgoto opcodeは、機能的であり、Javaコンパイラがソースからバイトコードを生成する際に使用されます。 JVM言語を実装する際にThe Java Virtual Machine Specificationから

Chapter 7: Compiling for the Java Virtual Machineは興味深いかもしれません。あなたが後藤で行うことができます

2

ほとんど何でもあなたがループで行うことができます。 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. 
0

Javaではgotoキーワードを使用できません。ただし、ラベルを使用してbreakまたはcontinueを使用し、ラベルをgotoの代わりに使用することができます。事実、Javaはgoto文がない言語ではなく、それを不快に実装した言語です。

0

Apache Thriftは、単一のソースから異なるプログラミング言語でソースコードを生成するために使用できます。 http://incubator.apache.org/thrift/

関連する問題