package de.fuberlin.projectF.CodeGenerator.model;
import java.util.LinkedList;
/**
*
* @author Peter Hirschfeld Das ist ein Token. Der Aufbau erklärt den Token von
* selbst.
*
*/
public class Token {
protected TokenType type = TokenType.Undefined; // Typ des Tokens
protected String target = ""; // Ziel aus der 3Adress-Code Zeile
protected String typeTarget = "";// Variablentyp des Ziels
protected String op1 = ""; // Operand1 aus der 3Adress-Code Zeile
protected String typeOp1 = ""; // Variablentyp des Operand1
protected String op2 = ""; // Operand2 aus der 3Adress-Code Zeile
protected String typeOp2 = ""; // Variablentyp des Operand2
protected LinkedList<Parameter> parameterList;
// protected Map<Integer, Parameter> parameterList; // Argumentenliste bei
// Methodendefinitionen.
// Da kann es viel in
// einer Zeile geben
public TokenType getType() {
return type;
}
public void setType(TokenType type) {
this.type = type;
}
public String getTarget() {
return target;
}
public void setTarget(String target) {
this.target = target;
}
public String getTypeTarget() {
return typeTarget;
}
public void setTypeTarget(String typeTarget) {
this.typeTarget = typeTarget;
}
public String getOp1() {
return op1;
}
public void setOp1(String op1) {
this.op1 = op1;
}
public String getTypeOp1() {
return typeOp1;
}
public void setTypeOp1(String typeOp1) {
this.typeOp1 = typeOp1;
}
public String getOp2() {
return op2;
}
public void setOp2(String op2) {
this.op2 = op2;
}
public String getTypeOp2() {
return typeOp2;
}
public void setTypeOp2(String typeOp2) {
this.typeOp2 = typeOp2;
}
public void addParameter(String operand, String type) {
if (parameterList == null)
parameterList = new LinkedList<Parameter>();
Parameter parameter = new Parameter();
parameter.setOperand(operand);
parameter.setType(type);
parameterList.add(parameter);
}
public Parameter getParameter(int count) {
if (parameterList == null)
return null;
return parameterList.get(count);
}
public LinkedList<Parameter> getParameters() {
return parameterList;
}
public void removeParameters(int num) {
parameterList.remove(num);
}
public int getParameterCount() {
if (parameterList == null)
return 0;
return parameterList.size();
}
public class Parameter {
String operand;
String type;
public String getOperand() {
return operand;
}
public void setOperand(String operand) {
this.operand = operand;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
}
public void print() {
// Ausgabe Type des Tokens
if (this.type != null)
System.out.println("\tType: " + this.type);
// Ausgabe Target der LLVM Zeile
if (this.target != null) {
System.out.print("\tTarget: " + target);
if (this.typeTarget != null)
System.out.print(" (" + typeTarget + ")");
System.out.println();
}
// Ausgabe des Operanden1 der LLVM Zeile
if (this.op1 != null) {
System.out.print("\tOp1: " + this.op1);
if (this.typeOp1 != null)
System.out.print(" (" + this.typeOp1 + ")");
System.out.println();
}
// Ausgabe des Operanden2 der LLVM Zeile
if (this.op2 != null) {
System.out.print("\tOp2: " + this.op2);
if (this.typeOp2 != null)
System.out.print(" (" + this.typeOp2 + ")");
System.out.println();
}
for (int j = 0; j < this.getParameterCount(); j++) {
System.out.print("\tParameter: "
+ this.getParameter(j).getOperand());
System.out.println(" (" + this.getParameter(j).getType() + ")");
}
System.out.println();
}
}