2012-04-29 2 views
1

자바의 하위 집합에 대한 컴파일러를 작성 중이며 거의 완료되었습니다. 한 가지 문제는 jasmin-keywords와 같은 클래스, 필드 및 메서드를 처리하는 것입니다.자스민에서 키워드로 지정된 필드를 처리하는 방법

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와 .field 지침, 그들은 이름이 키워드 인 경우 컴파일 에러의 원인이다 . 나는 둘레에 작은 따옴표와 큰 따옴표를 넣으려고했다. 작은 따옴표를 사용하여 jasmin은 클래스 파일로 어셈블되지만, 하나는 확인 오류를 발생시킵니다 (실제로는 차선책 인 이름에 따옴표가 포함 된 것처럼 보입니다). 큰 따옴표를 사용하면 컴파일되지 않습니다.

이것에 대한 해결책이 있습니까, 아니면 재스민에서 불가능합니까?

답변

0

몇 시간 동안 노력한 후에 나는 jasmin을 패치하기로 결정했습니다. 패치를 제출할 때 repo의 코드가 최신 버전이 아니라는 사실을 깨달았습니다. 그런 다음 최신 버전의 코드를 얻은 후에 구현 한 기능이 이미 존재한다는 것을 깨달았지만 어떤 이유로 2.4 데비안에는이 기능이 없지만 sourceforge의 2.4 기능은있었습니다.

+0

그럼 단일 인용문으로 해결 되었습니까? – Nubsis

+1

예. 최신 버전의 jasmin을 사용하는 경우 단일 인용 부호로 해결합니다. ubunt/debian repos의 재스민은 최근의 것이 아닙니다. – Torandi