2012-04-29 12 views
1

私はjavaのサブセット用のコンパイラを作成しています。私が問題を抱えているのは、ジャスミンキーワードのようなクラス、フィールド、メソッドを処理することです。例えばジャスミンでキーワードとして名前のフィールドを扱う方法

このようなジャスミンにコンパイルう
class Test { 
public static void main(String[] args) { 
    int a; 
    a = new pop().run(); 
} 
} 

class pop { 

    int lcmp; 
    int stack; 
    int isub; 
    int iload_0; 

    public int run() { 
     int aaload; 
     lcmp = 1; 
     aaload = lcmp; 
     return aaload; 
    } 

    public int swap() { 
     return 0; 
    } 

    public int iload_0() { 
     int istore; 
     boolean ret; 
     return 0; 
    } 
} 

.source evul_names.java 
.class Test 
.super java/lang/Object 
.method public <init>()V 
    aload_0 
    invokespecial java/lang/Object/<init>()V 
    return 
.end method 

.method public static main([Ljava/lang/String;)V 
.limit locals 2 
.limit stack 2 
.var 0 is a I 
.line 4 
    new pop 
    dup 
    invokespecial pop/<init>()V 
    invokevirtual pop/run()I 
    istore_0 ; a 
    return 
.end method 

.source evul_names.java 
.class pop 
.super java/lang/Object 

.field public lcmp I 
.field public stack I 
.field public isub I 
.field public iload_0 I 

.method public <init>()V 
    aload_0 
    invokespecial java/lang/Object/<init>()V 
    return 
.end method 

.method public run()I 
.limit locals 3 
.limit stack 2 
.line 15 
.var 0 is <this> Lpop; 
.var 1 is aaload I 
.line 17 
    iconst_1 
    aload_0 ; this 
    swap 
    putfield pop/lcmp I 
.line 18 
    aload_0 ; this 
    getfield pop/lcmp I 
    istore_1 ; aaload 
.line 19 
    iload_1 ; aaload 
    ireturn 
.end method 

.method public swap()I 
.limit locals 2 
.limit stack 1 
.line 22 
.var 0 is <this> Lpop; 
.line 23 
    iconst_0 
    ireturn 
.end method 

.method public iload_0()I 
.limit locals 4 
.limit stack 1 
.line 26 
.var 0 is <this> Lpop; 
.var 1 is istore I 
.var 2 is ret Z 
.line 29 
    iconst_0 
    ireturn 
.end method 

問題は.classファイルと選択図】図ディレクティブで、彼らは名前がキーワードである場合はコンパイルエラーが発生します。私はそれらの回りに一重引用符と二重引用符を入れようとしました。一重引用符を使用すると、ジャスミンはクラスファイルにアセンブルされますが、検証エラーが発生します(名前に二重引用符が含まれているようです)。二重引用符を使用すると、まったくコンパイルされません。

これにはまったく解決策がありますか、それともジャスミンでこれを行うことは不可能ですか?

答えて

0

数時間試した後、私はジャスミンにパッチを当てることにしました。パッチを提出したとき、私はレポのコードが最新バージョンではないことに気付きました。そして、最新バージョンのコードを入手した後、私が実装した機能はすでに存在していたが、何らかの理由で2.4のdebianはそれを持っていなかったが、sourceforgeの2.4があった。

+0

だから一重引用符で解決しましたか? – Nubsis

+1

はい、最近のバージョンのジャスミンを使用している場合は、一重引用符で解決します。 ubunt/debian reposのジャスミンは最近ではありません。 – Torandi

関連する問題