Traductor e intérprete del lenguaje CL 1.23
CL_AST.java
Go to the documentation of this file.
00001 
00026 import org.antlr.runtime.tree.*;
00027 import org.antlr.runtime.Token;
00028 
00061 final class CL_AST extends CommonTree {
00062 
00069     private TypeTree tipus;
00070 
00079     private boolean esReferenciable;
00080 
00087     CL_AST(Token t) {
00088         super(t);
00089         tipus = new TypeTree();
00090         esReferenciable = false;
00091     }
00092 
00093     //  // El metodo dupNode() no es neceario porque en este
00094     //  // compilador no se reescribe el AST:
00095     //  public Tree dupNode() {
00096     //      return new CL_AST(this);
00097     //  }
00098 
00102     TypeTree getTypeTree() {
00103         return tipus;
00104     }
00105 
00109     void setTypeTree(TypeTree t) {
00110         tipus = t;
00111     }
00112 
00118     void setTypeTree(int type) {
00119         tipus = new TypeTree(type);
00120     }
00121 
00126     void setTypeError() {
00127         tipus = new TypeTree(TypeCheck.TypeError);
00128     }
00129 
00133     boolean getReferenciable() {
00134         return esReferenciable;
00135     }
00136 
00141     void setReferenciable(boolean b) {
00142         esReferenciable = b;
00143     }
00144 
00152     public CL_AST getChild(int i) {
00153         return (CL_AST) super.getChild(i);
00154     }
00155 
00167     private String toNodeString() {
00168         switch (getType()) {
00169         case CLParser.IDENT:
00170         case CLParser.INT_CONST:
00171         case CLParser.STRING_CONST:
00172             return CLParser.tokenNames[getType()].toLowerCase() + "(" + getText() + ")";
00173         default:
00174             return getText();
00175         }
00176     }
00177 
00188     @Override
00189     public String toString() {
00190         String s = toNodeString();
00191         if (tipus.isTypeUndefined()) {
00192             return s;
00193         } else {
00194             s = s + "    <" + tipus.toStringTree() + ">";
00195             if (esReferenciable) {
00196                 s = s + "    [R]";
00197             }
00198             return s;
00199         }
00200     }
00201 
00211     static private void toIndentedTreeString(CL_AST t, String s, StringBuffer sb) {
00212         if (t != null) {
00213             sb.append(t.toString() + "\n");
00214             if (t.getChildCount() > 0) {
00215                 CL_AST child;
00216                 String s1;
00217                 for (int i = 0; i < t.getChildCount(); i++) {
00218                     sb.append(s + "  \\__");
00219                     child = (CL_AST) t.getChild(i);
00220                     if (i < t.getChildCount() - 1) {
00221                         s1 = s + "  |";
00222                     } else {
00223                         s1 = s + "   ";
00224                     }
00225                     for (int j = 0; j < child.toNodeString().length(); j++) {
00226                         s1 = s1 + " ";
00227                     }
00228                     toIndentedTreeString(child, s1, sb);
00229                 }
00230             }
00231         }
00232     }
00233 
00238     static String toIndentedTreeString(CL_AST t) {
00239         StringBuffer sb = new StringBuffer();
00240         String s1 = "";
00241         for (int j = 0; j < new String("program").length() - 2; j++) {
00242             s1 = s1 + " ";
00243         }
00244         toIndentedTreeString(t, s1, sb);
00245         return sb.toString();
00246     }
00247 
00248 }
 All Classes Files Functions Variables Enumerations