package mycompiler; import java.util.Vector; import typinferenz.TypinferenzException; import mycompiler.myclass.Class; public abstract class SyntaxTreeNode { protected SyntaxTreeNode parent; /** * Wird nach dem Parsen aufgerufen. * Erfüllt folgenden Aufgaben: * 1. Füllt fehlende Typangaben mit TPHs auf. * 2. Verknüpft die Knoten des Syntaxbaums. (setzt Parent) * */ public void parserPostProcessing(SyntaxTreeNode parent) { this.parent = parent; for(SyntaxTreeNode node : this.getChildren())node.parserPostProcessing(this); } public SyntaxTreeNode getParent() { return this.parent; } public abstract Vector getChildren(); public Class getParentClass(){ SyntaxTreeNode parent = this.getParent(); if(parent instanceof Class)return (Class)parent; if(parent == null)throw new TypinferenzException("Das Wurzelelement eines Syntaxbaumes muss Class sein"); return parent.getParentClass(); } /** * Eine Beschreibung/Name des SyntaxTree-Nodes * @return */ public String getDescription(){ return this.toString(); } @Override public boolean equals(Object object){ if(!(object instanceof SyntaxTreeNode))return false; SyntaxTreeNode equal = (SyntaxTreeNode)object; if(!equal.getDescription().equals(this.getDescription()))return false; if(!this.getParent().equals(equal.getParent()))return false; //auch das Elternelement überprüfen. return true; } }