有沒有什麼好的理由用數字識別記號,現在?我正在關注Crafting a Compiler
。爲什麼使用整數作爲標記?
作者提出的代碼是在這裏:
public class Token {
public final static int ID = 0, FLTDCL = 1, INTDCL = 2, PRINT = 3,
ASSIGN = 4, PLUS = 5, MINUS = 6, EOF = 7, INUM = 8, FNUM = 9;
public final static String[] token2str = new String[] { "id", "fltdcl",
"intdcl", "print", "assign", "plus", "minus", "$", "inum", "fnum" };
public final int type;
public final String val;
public Token(int type) {
this(type, "");
}
public Token(int type, String val) {
this.type = type;
this.val = val;
}
public String toString() {
return "Token type\t" + token2str[type] + "\tval\t" + val;
}
}
,而不是使用醜陋的陣列,豈不是更聰明修改構造函數以接受type
變量,而不是整數,字符串?那麼我們可以擺脫
public final static int ID = 0, FLTDCL = 1, INTDCL = 2, PRINT = 3,
ASSIGN = 4, PLUS = 5, MINUS = 6, EOF = 7, INUM = 8, FNUM = 9;
或者它是否需要以後使用字符串反而會更糟?
我認爲這只是速度 - 編譯器真的需要他們可以得到的速度,並使用字符串傷害緩存位置。但也可能有另一個(更好的)理由,我不知道(因此爲什麼我沒有發佈這個答案)。 – Mehrdad
隱蔽標識符是夠糟糕的,但至少他可以鍵入的字符串版本出來... – delnan