⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 typedescriptor.java

📁 JDK1.4编译器前端
💻 JAVA
字号:

package AST;
import java.util.HashSet;import java.util.LinkedHashSet;import java.io.FileNotFoundException;import java.io.File;import java.util.*;import beaver.*;import java.util.ArrayList;import java.util.zip.*;import java.io.*;public class TypeDescriptor extends java.lang.Object {
    // Declared in BytecodeDescriptor.jrag at line 172    private BytecodeParser p;    // Declared in BytecodeDescriptor.jrag at line 173    private String descriptor;    // Declared in BytecodeDescriptor.jrag at line 174    public TypeDescriptor(BytecodeParser parser, String descriptor) {      p = parser;      this.descriptor = descriptor;    }    // Declared in BytecodeDescriptor.jrag at line 179    public boolean isBoolean() {      return descriptor.charAt(0) == 'Z';    }    // Declared in BytecodeDescriptor.jrag at line 183    public Access type() {      return type(descriptor);    }    // Declared in BytecodeDescriptor.jrag at line 187    public Access type(String s) {      char c = s.charAt(0);      switch (c) {        case 'B':          return new PrimitiveTypeAccess("byte");        case 'C':          return new PrimitiveTypeAccess("char");        case 'D':          return new PrimitiveTypeAccess("double");        case 'F':          return new PrimitiveTypeAccess("float");        case 'I':          return new PrimitiveTypeAccess("int");        case 'J':          return new PrimitiveTypeAccess("long");        case 'S':          return new PrimitiveTypeAccess("short");        case 'Z':          return new PrimitiveTypeAccess("boolean");        case 'L':          return this.p.fromClassName(s.substring(1, s.length() - 1));        case '[':          return new ArrayTypeAccess(type(s.substring(1)));        case 'V':          return new PrimitiveTypeAccess("void");        default:          this.p.println("Error: unknown type in TypeDescriptor");          throw new Error("Error: unknown Type in TypeDescriptor: " + s);      }      //return null;    }    // Declared in BytecodeDescriptor.jrag at line 219    public List parameterList() {      List list = new List();      String s = descriptor;      while(!s.equals("")) {        s = typeList(s, list);      }      return list;    }    // Declared in BytecodeDescriptor.jrag at line 227    public List parameterListSkipFirst() {      List list = new List();      String s = descriptor;      if(!s.equals(""))        s = typeList(s, new List()); // skip first      while(!s.equals("")) {        s = typeList(s, list);      }      return list;    }    // Declared in BytecodeDescriptor.jrag at line 238    public String typeList(String s, List l) {      char c = s.charAt(0);      switch (c) {        case 'B':          l.add(new ParameterDeclaration(new Modifiers(),                 new PrimitiveTypeAccess("byte"), "p" + l.getNumChild()));          return s.substring(1);        case 'C':          l.add(new ParameterDeclaration(new Modifiers(),                 new PrimitiveTypeAccess("char"), "p" + l.getNumChild()));          return s.substring(1);        case 'D':          l.add(new ParameterDeclaration(new Modifiers(),                 new PrimitiveTypeAccess("double"), "p" + l.getNumChild()));          return s.substring(1);        case 'F':          l.add(new ParameterDeclaration(new Modifiers(),                 new PrimitiveTypeAccess("float"), "p" + l.getNumChild()));          return s.substring(1);        case 'I':          l.add(new ParameterDeclaration(new Modifiers(),                 new PrimitiveTypeAccess("int"), "p" + l.getNumChild()));          return s.substring(1);        case 'J':          l.add(new ParameterDeclaration(new Modifiers(),                 new PrimitiveTypeAccess("long"), "p" + l.getNumChild()));          return s.substring(1);        case 'S':          l.add(new ParameterDeclaration(new Modifiers(),                 new PrimitiveTypeAccess("short"), "p" + l.getNumChild()));          return s.substring(1);        case 'Z':          l.add(new ParameterDeclaration(new Modifiers(),                 new PrimitiveTypeAccess("boolean"), "p" + l.getNumChild()));          return s.substring(1);        case 'L':          int pos = s.indexOf(';');          String s1 = s.substring(1, pos);          String s2 = s.substring(pos+1, s.length());          l.add(new ParameterDeclaration(new Modifiers(),                this.p.fromClassName(s1),                "p" + l.getNumChild()));          return s2;        case '[':          int i = 1;          while(s.charAt(i) == '[') i++;          ArrayTypeAccess bottom = new ArrayTypeAccess(new ParseName("")); // dummy child will be replaced          ArrayTypeAccess top = bottom;          for(int j = 0; j < i - 1; j++)            top = new ArrayTypeAccess(top);          l.add(new ParameterDeclaration(new Modifiers(), top, "p" + l.getNumChild()));          return arrayTypeList(s.substring(i), bottom);        default:          this.p.println("Error: unknown Type \"" + c + "\" in TypeDescriptor");          throw new Error("Error: unknown Type in TypeDescriptor: " + s);      }      //return "";    }    // Declared in BytecodeDescriptor.jrag at line 298    public String arrayTypeList(String s, ArrayTypeAccess typeAccess) {      char c = s.charAt(0);      switch (c) {        case 'B':          typeAccess.setAccess(new PrimitiveTypeAccess("byte"));          return s.substring(1);        case 'C':          typeAccess.setAccess(new PrimitiveTypeAccess("char"));          return s.substring(1);        case 'D':          typeAccess.setAccess(new PrimitiveTypeAccess("double"));          return s.substring(1);        case 'F':          typeAccess.setAccess(new PrimitiveTypeAccess("float"));          return s.substring(1);        case 'I':          typeAccess.setAccess(new PrimitiveTypeAccess("int"));          return s.substring(1);        case 'J':          typeAccess.setAccess(new PrimitiveTypeAccess("long"));          return s.substring(1);        case 'S':          typeAccess.setAccess(new PrimitiveTypeAccess("short"));          return s.substring(1);        case 'Z':          typeAccess.setAccess(new PrimitiveTypeAccess("boolean"));          return s.substring(1);        case 'L':          //String[] strings = s.substring(1).split("\\;", 2);          //typeAccess.setAccess(this.p.fromClassName(strings[0]));          //return strings[1];          int pos = s.indexOf(';');          String s1 = s.substring(1, pos);          String s2 = s.substring(pos+1, s.length());          typeAccess.setAccess(this.p.fromClassName(s1));          return s2;        default:          this.p.println("Error: unknown Type in TypeDescriptor");          throw new Error("Error: unknown Type in TypeDescriptor: " + s);      }      //return null;    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -