Files
MY_COMPILER/midend/symbol/Symbol.java
2025-12-10 17:58:17 +08:00

78 lines
1.8 KiB
Java

package midend.symbol;
import java.util.ArrayList;
import midend.llvm.value.IrValue;
public class Symbol {
private String name;
private SymbolType type;
private int line;
private ArrayList<Integer> valueList;
private IrValue irValue;
public Symbol(String name, SymbolType type, int line) {
this.name = name;
this.type = type;
this.line = line;
valueList = new ArrayList<>();
irValue = null;
}
public void setIrValue(IrValue irValue) {
this.irValue = irValue;
}
public IrValue getIrValue() {
return irValue;
}
public void addValue(int value) {
valueList.add(value);
}
public void addValue(ArrayList<Integer> valueList) {
this.valueList.addAll(valueList);
}
public ArrayList<Integer> getValueList() {
return valueList;
}
public int getValue(int index) {
return valueList.get(index);
}
public String getName() {
return name;
}
public String getTypeStr() {
return type.toString();
}
public SymbolType getType() {
return type;
}
public int getLine() {
return line;
}
public String toString() {
return name + " " + type.toString() + "\n";
}
public boolean isThatType(int type) { // 0 for normal var, 1 for array, 2 for func
if (type == 1) {
return this.type == SymbolType.INT_ARRAY || this.type == SymbolType.CONST_INT_ARRAY
|| this.type == SymbolType.STATIC_INT_ARRAY;
} else if (type == 2) {
return this.type == SymbolType.INT_FUNC || this.type == SymbolType.VOID_FUNC;
} else {
return this.type == SymbolType.INT || this.type == SymbolType.CONST_INT
|| this.type == SymbolType.STATIC_INT;
}
}
}