我在課堂上發現了這個奇怪的錯誤。我有這個IRNode類,我有3個字符串:op1,op2和op3。當我將它們打印出來之前,將它們分配給不同的字符串,然後將它們打印出來給出不同的值。它將它們存儲爲null。返回錯誤值的方法
輸出的打印語句是這樣的:
OP1: 20, OP2: a, OP3: null
;STOREI
,而應該是:
OP1: 20, OP2: a, OP3: null
;STOREI 20 a
我的代碼:
public IRNode (String op, String o1, String o2, String o3) {
opcode = op;
op1 = o1;
op2 = o2;
op3 = o3;
//IRNodeNext = null;
}
public void printIR() {
System.out.format("OP1: %s, OP2: %s, OP3: %s\n",op1, op2,op3);
String o1 = this.op1;
String o2 = this.op2;
String o3 = this.op3;
System.out.print(";"+opcode);
if (o1 != null) System.out.format(" ",o1);
if (o2 != null) System.out.format(" ",o2);
if (o3 != null) System.out.format(" ",o3);
System.out.format("\n");
}
PS。這是我的編譯器項目。這是在創建AST和IRNode列表之後。
*****編輯****** 實際上發現這是一個愚蠢的錯誤。但我現在正面臨另一個奇怪的錯誤。
op1 = thisNode.returnOP1();
op2 = thisNode.returnOP2();
op3 = thisNode.returnOP3();
在這裏,我得到OP1,OP2和OP3像前面。在返回時,我檢查了一下,我返回了正確的值。 例如, 對於STOREI 20 我返回OP1 = 20和OP2 =一個
但是當我只是那些3行代碼之後接收它,我收到錯誤的值。我得到op1 = 20,op2 = $ s,op3 = a
爲什麼會發生這種情況?
這是什麼意思,「在將它們分配給不同的字符串之前,然後將它們打印出來給出不同的值,並將它們存儲爲空。」?我在這裏可以看到的唯一問題是你有''''''%s'''應該可能在哪裏。也許? – nihilon
編輯應該是一個新問題,因爲原來的問題得到了回答。老實說,考慮你的第一個問題是什麼,如果這個問題是另一個類似的錯誤,我不會感到驚訝。我不會把它稱爲你做的,只是爲了禮貌。什麼是'returnOP'方法的代碼?它看起來不像'returnOP2()'或'returnOP3()'返回你期望它們返回的內容。 – nihilon
嘿你是對的。這是一個類似的錯誤,由於打印聲明,我得到了錯誤的值。在我的returnOP函數中,我只是返回相應的OP字符串。 – Aditya