Есть ли сейчас веская причина для использования чисел для идентификации токенов?Я слежу за 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;
или это нужно позже, потому что использование строки вместо этого будет хуже?