/* Generated By:JavaCC: Do not edit this line. Parser.java */ import java.util.*; import java.io.*; import edu.neu.ccs.demeter.*; public class Parser implements ParserConstants { // oit is uugly. Why isn't there a Character.valueOf(String)? static char unescapifyChar(String s) { char c = s.charAt(0); if (c == '\\') { switch (s.charAt(1)) { case 'n': c = '\n'; break; case 't': c = '\t'; break; case 'b': c = '\b'; break; case 'r': c = '\r'; break; case 'f': c = '\f'; break; case '\\': c = '\\'; break; case '\'': c = '\''; break; case '\"': c = '\"'; break; default: c = (char) Integer.parseInt(s.substring(1, s.length()), 8); break; } } return c; } // Even uglier... static String unescapify(String s) { char str[] = new char[s.length()]; int i = 0, o = 0; while (i < s.length()) { char c = s.charAt(i++); if (c == '\\') { int j = i + 1; while (j < s.length() && Character.digit(s.charAt(j), 8) != -1) { j++; } c = unescapifyChar(s.substring(i-1, j)); i = j; } str[o++] = c; } return String.valueOf(str, 0, o); } final public Main _Main() throws ParseException { Main it = null; it=new Main(); {if (true) return it;} throw new Error("Missing return statement in function"); } final public ClassGraph _ClassGraph() throws ParseException { ClassGraph it = null; ClassDef_DList _classes; it=new ClassGraph(); _classes = _ClassDef_DList(); it.set_classes(_classes); jj_consume_token(0); {if (true) return it;} throw new Error("Missing return statement in function"); } final public ClassDef _ClassDef() throws ParseException { ClassDef it = null; ClassName _classname; ClassParts _classparts; it=new ClassDef(); jj_consume_token(1); _classname = _ClassName(); it.set_classname(_classname); _classparts = _ClassParts(); it.set_classparts(_classparts); jj_consume_token(2); {if (true) return it;} throw new Error("Missing return statement in function"); } final public ClassParts _ClassParts() throws ParseException { ClassParts it = null; switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case 4: case 5: it = _ConstOrAltClass(); break; case 8: it = _RepetitionClass(); break; default: jj_la1[0] = jj_gen; jj_consume_token(-1); throw new ParseException(); } {if (true) return it;} throw new Error("Missing return statement in function"); } final public void common_ClassParts(ClassParts it) throws ParseException { } final public ConstOrAltClass _ConstOrAltClass() throws ParseException { ConstOrAltClass it = null; switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case 4: it = _ConstructionClass(); break; case 5: it = _AlternationClass(); break; default: jj_la1[1] = jj_gen; jj_consume_token(-1); throw new ParseException(); } {if (true) return it;} throw new Error("Missing return statement in function"); } final public void common_ConstOrAltClass(ConstOrAltClass it) throws ParseException { PartOrSyntax_List _parts; _parts = _PartOrSyntax_List(); it.set_parts(_parts); common_ClassParts(it); } final public PartOrSyntax _PartOrSyntax() throws ParseException { PartOrSyntax it = null; switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case 1: case IDENTIFIER: it = _Part(); break; case 3: it = _OptionalPart(); break; case STRING_LITERAL: it = _Syntax(); break; default: jj_la1[2] = jj_gen; jj_consume_token(-1); throw new ParseException(); } {if (true) return it;} throw new Error("Missing return statement in function"); } final public void common_PartOrSyntax(PartOrSyntax it) throws ParseException { } final public Part _Part() throws ParseException { Part it = null; PartName _partname; ClassSpec _classspec; it=new Part(); switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case 1: jj_consume_token(1); _partname = _PartName(); it.set_partname(_partname); jj_consume_token(2); break; default: jj_la1[3] = jj_gen; ; } _classspec = _ClassSpec(); it.set_classspec(_classspec); common_PartOrSyntax(it); {if (true) return it;} throw new Error("Missing return statement in function"); } final public OptionalPart _OptionalPart() throws ParseException { OptionalPart it = null; Part_Sandwich _part; it=new OptionalPart(); jj_consume_token(3); _part = _Part_Sandwich(); it.set_part(_part); jj_consume_token(2); common_PartOrSyntax(it); {if (true) return it;} throw new Error("Missing return statement in function"); } final public ConstructionClass _ConstructionClass() throws ParseException { ConstructionClass it = null; it=new ConstructionClass(); jj_consume_token(4); common_ConstOrAltClass(it); {if (true) return it;} throw new Error("Missing return statement in function"); } final public AlternationClass _AlternationClass() throws ParseException { AlternationClass it = null; Subclass_Barlist _subclasses; Common _common; it=new AlternationClass(); jj_consume_token(5); _subclasses = _Subclass_Barlist(); it.set_subclasses(_subclasses); switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case 6: _common = _Common(); it.set_common(_common); break; default: jj_la1[4] = jj_gen; ; } common_ConstOrAltClass(it); {if (true) return it;} throw new Error("Missing return statement in function"); } final public Subclass _Subclass() throws ParseException { Subclass it = null; ClassSpec _classspec; it=new Subclass(); _classspec = _ClassSpec(); it.set_classspec(_classspec); {if (true) return it;} throw new Error("Missing return statement in function"); } final public Common _Common() throws ParseException { Common it = null; it=new Common(); jj_consume_token(6); jj_consume_token(7); jj_consume_token(6); {if (true) return it;} throw new Error("Missing return statement in function"); } final public RepetitionClass _RepetitionClass() throws ParseException { RepetitionClass it = null; RepeatedPart_Sandwich _sandwiched; it=new RepetitionClass(); jj_consume_token(8); _sandwiched = _RepeatedPart_Sandwich(); it.set_sandwiched(_sandwiched); common_ClassParts(it); {if (true) return it;} throw new Error("Missing return statement in function"); } final public RepeatedPart _RepeatedPart() throws ParseException { RepeatedPart it = null; ClassSpec _nonempty; ClassSpec_Sandwich _repeated; it=new RepeatedPart(); switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case IDENTIFIER: _nonempty = _ClassSpec(); it.set_nonempty(_nonempty); break; default: jj_la1[5] = jj_gen; ; } jj_consume_token(1); _repeated = _ClassSpec_Sandwich(); it.set_repeated(_repeated); jj_consume_token(2); {if (true) return it;} throw new Error("Missing return statement in function"); } final public ClassSpec _ClassSpec() throws ParseException { ClassSpec it = null; ClassName _classname; it=new ClassSpec(); _classname = _ClassName(); it.set_classname(_classname); {if (true) return it;} throw new Error("Missing return statement in function"); } final public Syntax _Syntax() throws ParseException { Syntax it = null; it = _PlainSyntax(); {if (true) return it;} throw new Error("Missing return statement in function"); } final public void common_Syntax(Syntax it) throws ParseException { common_PartOrSyntax(it); } final public PlainSyntax _PlainSyntax() throws ParseException { PlainSyntax it = null; String _string; it=new PlainSyntax(); _string = _String(); it.set_string(_string); common_Syntax(it); {if (true) return it;} throw new Error("Missing return statement in function"); } final public DirName _DirName() throws ParseException { DirName it = null; Ident _name; it=new DirName(); _name = _Ident(); it.set_name(_name); {if (true) return it;} throw new Error("Missing return statement in function"); } final public ClassName _ClassName() throws ParseException { ClassName it = null; Ident _name; it=new ClassName(); _name = _Ident(); it.set_name(_name); {if (true) return it;} throw new Error("Missing return statement in function"); } final public PartName _PartName() throws ParseException { PartName it = null; Ident _name; it=new PartName(); _name = _Ident(); it.set_name(_name); {if (true) return it;} throw new Error("Missing return statement in function"); } final public TraversalName _TraversalName() throws ParseException { TraversalName it = null; Ident _name; it=new TraversalName(); _name = _Ident(); it.set_name(_name); {if (true) return it;} throw new Error("Missing return statement in function"); } final public VisitorName _VisitorName() throws ParseException { VisitorName it = null; Ident _name; it=new VisitorName(); _name = _Ident(); it.set_name(_name); {if (true) return it;} throw new Error("Missing return statement in function"); } final public MethodName _MethodName() throws ParseException { MethodName it = null; Ident _name; it=new MethodName(); _name = _Ident(); it.set_name(_name); {if (true) return it;} throw new Error("Missing return statement in function"); } final public JavaCode _JavaCode() throws ParseException { JavaCode it = null; String _code; it=new JavaCode(); jj_consume_token(9); _code = _String(); it.set_code(_code); jj_consume_token(10); {if (true) return it;} throw new Error("Missing return statement in function"); } final public ClassDef_DList _ClassDef_DList() throws ParseException { ClassDef_DList it = null; Nonempty_ClassDef_DList _first; it=new ClassDef_DList(); jj_consume_token(1); _first = _Nonempty_ClassDef_DList(); it.set_first(_first); jj_consume_token(2); {if (true) return it;} throw new Error("Missing return statement in function"); } final public PartOrSyntax_List _PartOrSyntax_List() throws ParseException { PartOrSyntax_List it = null; Nonempty_PartOrSyntax_List _first; it=new PartOrSyntax_List(); jj_consume_token(1); switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case 1: case 3: case STRING_LITERAL: case IDENTIFIER: _first = _Nonempty_PartOrSyntax_List(); it.set_first(_first); break; default: jj_la1[6] = jj_gen; ; } jj_consume_token(2); {if (true) return it;} throw new Error("Missing return statement in function"); } final public Part_Sandwich _Part_Sandwich() throws ParseException { Part_Sandwich it = null; Syntax_List _first; Part _inner; Syntax_List _second; it=new Part_Sandwich(); _first = _Syntax_List(); it.set_first(_first); _inner = _Part(); it.set_inner(_inner); _second = _Syntax_List(); it.set_second(_second); {if (true) return it;} throw new Error("Missing return statement in function"); } final public Subclass_Barlist _Subclass_Barlist() throws ParseException { Subclass_Barlist it = null; Nonempty_Subclass_Barlist _first; it=new Subclass_Barlist(); jj_consume_token(1); _first = _Nonempty_Subclass_Barlist(); it.set_first(_first); jj_consume_token(2); {if (true) return it;} throw new Error("Missing return statement in function"); } final public RepeatedPart_Sandwich _RepeatedPart_Sandwich() throws ParseException { RepeatedPart_Sandwich it = null; Syntax_List _first; RepeatedPart _inner; Syntax_List _second; it=new RepeatedPart_Sandwich(); _first = _Syntax_List(); it.set_first(_first); _inner = _RepeatedPart(); it.set_inner(_inner); _second = _Syntax_List(); it.set_second(_second); {if (true) return it;} throw new Error("Missing return statement in function"); } final public ClassSpec_Sandwich _ClassSpec_Sandwich() throws ParseException { ClassSpec_Sandwich it = null; Syntax_List _first; ClassSpec _inner; Syntax_List _second; it=new ClassSpec_Sandwich(); _first = _Syntax_List(); it.set_first(_first); _inner = _ClassSpec(); it.set_inner(_inner); _second = _Syntax_List(); it.set_second(_second); {if (true) return it;} throw new Error("Missing return statement in function"); } final public Syntax_List _Syntax_List() throws ParseException { Syntax_List it = null; Nonempty_Syntax_List _first; it=new Syntax_List(); jj_consume_token(1); switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case STRING_LITERAL: _first = _Nonempty_Syntax_List(); it.set_first(_first); break; default: jj_la1[7] = jj_gen; ; } jj_consume_token(2); {if (true) return it;} throw new Error("Missing return statement in function"); } final public Nonempty_ClassDef_DList _Nonempty_ClassDef_DList() throws ParseException { Nonempty_ClassDef_DList it = null; ClassDef _it; Nonempty_ClassDef_DList _next; it=new Nonempty_ClassDef_DList(); _it = _ClassDef(); it.set_it(_it); switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case 1: _next = _Nonempty_ClassDef_DList(); it.set_next(_next); break; default: jj_la1[8] = jj_gen; ; } {if (true) return it;} throw new Error("Missing return statement in function"); } final public Nonempty_PartOrSyntax_List _Nonempty_PartOrSyntax_List() throws ParseException { Nonempty_PartOrSyntax_List it = null; PartOrSyntax _it; Nonempty_PartOrSyntax_List _next; it=new Nonempty_PartOrSyntax_List(); _it = _PartOrSyntax(); it.set_it(_it); switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case 1: case 3: case STRING_LITERAL: case IDENTIFIER: _next = _Nonempty_PartOrSyntax_List(); it.set_next(_next); break; default: jj_la1[9] = jj_gen; ; } {if (true) return it;} throw new Error("Missing return statement in function"); } final public Nonempty_Subclass_Barlist _Nonempty_Subclass_Barlist() throws ParseException { Nonempty_Subclass_Barlist it = null; Subclass _it; Nonempty_Subclass_Barlist _next; it=new Nonempty_Subclass_Barlist(); _it = _Subclass(); it.set_it(_it); switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case 11: jj_consume_token(11); _next = _Nonempty_Subclass_Barlist(); it.set_next(_next); break; default: jj_la1[10] = jj_gen; ; } {if (true) return it;} throw new Error("Missing return statement in function"); } final public Nonempty_Syntax_List _Nonempty_Syntax_List() throws ParseException { Nonempty_Syntax_List it = null; Syntax _it; Nonempty_Syntax_List _next; it=new Nonempty_Syntax_List(); _it = _Syntax(); it.set_it(_it); switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case STRING_LITERAL: _next = _Nonempty_Syntax_List(); it.set_next(_next); break; default: jj_la1[11] = jj_gen; ; } {if (true) return it;} throw new Error("Missing return statement in function"); } final public boolean _boolean() throws ParseException { Token t; switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case TRUE: t = jj_consume_token(TRUE); {if (true) return true;} break; case FALSE: t = jj_consume_token(FALSE); {if (true) return false;} break; default: jj_la1[12] = jj_gen; jj_consume_token(-1); throw new ParseException(); } throw new Error("Missing return statement in function"); } final public char _char() throws ParseException { Token t; t = jj_consume_token(CHARACTER_LITERAL); String s = t.image; {if (true) return unescapifyChar(s.substring(1, s.length()-1));} throw new Error("Missing return statement in function"); } final public byte _byte() throws ParseException { int i; i = _int(); {if (true) return (byte) i;} throw new Error("Missing return statement in function"); } final public short _short() throws ParseException { int i; i = _int(); {if (true) return (short) i;} throw new Error("Missing return statement in function"); } final public int _int() throws ParseException { Number num; num = _Number(); {if (true) return num.intValue();} throw new Error("Missing return statement in function"); } final public long _long() throws ParseException { Number num; num = _Number(); {if (true) return num.longValue();} throw new Error("Missing return statement in function"); } final public float _float() throws ParseException { Number num; num = _Number(); {if (true) return num.floatValue();} throw new Error("Missing return statement in function"); } final public double _double() throws ParseException { Number num; num = _Number(); {if (true) return num.doubleValue();} throw new Error("Missing return statement in function"); } final public Boolean _Boolean() throws ParseException { Token t; switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case TRUE: t = jj_consume_token(TRUE); {if (true) return Boolean.TRUE;} break; case FALSE: t = jj_consume_token(FALSE); {if (true) return Boolean.FALSE;} break; default: jj_la1[13] = jj_gen; jj_consume_token(-1); throw new ParseException(); } throw new Error("Missing return statement in function"); } final public Character _Character() throws ParseException { char c; c = _char(); {if (true) return new Character(c);} throw new Error("Missing return statement in function"); } final public Integer _Integer() throws ParseException { int i; i = _int(); {if (true) return new Integer(i);} throw new Error("Missing return statement in function"); } final public Long _Long() throws ParseException { long l; l = _long(); {if (true) return new Long(l);} throw new Error("Missing return statement in function"); } final public Float _Float() throws ParseException { float f; f = _float(); {if (true) return new Float(f);} throw new Error("Missing return statement in function"); } final public Double _Double() throws ParseException { double d; d = _double(); {if (true) return new Double(d);} throw new Error("Missing return statement in function"); } final public Number _Number() throws ParseException { Token t; String s = null; int radix = 0; Number num = null; switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case DECIMAL_LITERAL: case HEX_LITERAL: case OCTAL_LITERAL: switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case DECIMAL_LITERAL: t = jj_consume_token(DECIMAL_LITERAL); s = t.image; radix = 10; break; case HEX_LITERAL: t = jj_consume_token(HEX_LITERAL); // Strip off the "0x". s = t.image.substring(2, t.image.length()); radix = 16; break; case OCTAL_LITERAL: t = jj_consume_token(OCTAL_LITERAL); s = t.image; radix = 8; break; default: jj_la1[14] = jj_gen; jj_consume_token(-1); throw new ParseException(); } switch (s.charAt(s.length()-1)) { case 'l': case 'L': s = s.substring(0, s.length()-1); num = new Long(new java.math.BigInteger(s, radix).longValue()); break; default: num = new Integer(new java.math.BigInteger(s, radix).intValue()); break; } break; case FLOATING_POINT_LITERAL: t = jj_consume_token(FLOATING_POINT_LITERAL); s = t.image; switch (s.charAt(s.length()-1)) { case 'd': case 'D': num = Double.valueOf(s.substring(0, s.length()-1)); break; case 'f': case 'F': num = Float.valueOf(s.substring(0, s.length()-1)); break; default: num = Float.valueOf(s); break; } break; default: jj_la1[15] = jj_gen; jj_consume_token(-1); throw new ParseException(); } {if (true) return num;} throw new Error("Missing return statement in function"); } final public String _String() throws ParseException { Token t; t = jj_consume_token(STRING_LITERAL); String s = t.image; {if (true) return unescapify(s.substring(1, s.length()-1));} throw new Error("Missing return statement in function"); } final public StringBuffer _StringBuffer() throws ParseException { String s; s = _String(); {if (true) return new StringBuffer(s);} throw new Error("Missing return statement in function"); } final public Ident _Ident() throws ParseException { Token t; t = jj_consume_token(IDENTIFIER); {if (true) return new Ident(t.image);} throw new Error("Missing return statement in function"); } final public Text _Text() throws ParseException { Token t; t = jj_consume_token(TEXT_LITERAL); String s = t.image; {if (true) return new Text(s.substring(2, s.length()-2));} throw new Error("Missing return statement in function"); } final public Line _Line() throws ParseException { Token t; token_source.SwitchTo(1); t = jj_consume_token(LINE); {if (true) return new Line(t.image);} throw new Error("Missing return statement in function"); } final public Word _Word() throws ParseException { Token t; token_source.SwitchTo(2); t = jj_consume_token(WORD); {if (true) return new Word(t.image);} throw new Error("Missing return statement in function"); } public ParserTokenManager token_source; ASCII_UCodeESC_CharStream jj_input_stream; public Token token, jj_nt; private int jj_ntk; private int jj_gen; final private int[] jj_la1 = new int[16]; final private int[] jj_la1_0 = {0x130,0x30,0x1100000a,0x2,0x40,0x10000000,0x1100000a,0x1000000,0x2,0x1100000a,0x800,0x1000000,0xc000000,0xc000000,0x1c0000,0x3c0000,}; final private int[] jj_la1_1 = {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,}; public Parser(java.io.InputStream stream) { jj_input_stream = new ASCII_UCodeESC_CharStream(stream, 1, 1); token_source = new ParserTokenManager(jj_input_stream); token = new Token(); jj_ntk = -1; jj_gen = 0; for (int i = 0; i < 16; i++) jj_la1[i] = -1; } public void ReInit(java.io.InputStream stream) { jj_input_stream.ReInit(stream, 1, 1); token_source.ReInit(jj_input_stream); token = new Token(); jj_ntk = -1; jj_gen = 0; for (int i = 0; i < 16; i++) jj_la1[i] = -1; } public Parser(java.io.Reader stream) { jj_input_stream = new ASCII_UCodeESC_CharStream(stream, 1, 1); token_source = new ParserTokenManager(jj_input_stream); token = new Token(); jj_ntk = -1; jj_gen = 0; for (int i = 0; i < 16; i++) jj_la1[i] = -1; } public void ReInit(java.io.Reader stream) { jj_input_stream.ReInit(stream, 1, 1); token_source.ReInit(jj_input_stream); token = new Token(); jj_ntk = -1; jj_gen = 0; for (int i = 0; i < 16; i++) jj_la1[i] = -1; } public Parser(ParserTokenManager tm) { token_source = tm; token = new Token(); jj_ntk = -1; jj_gen = 0; for (int i = 0; i < 16; i++) jj_la1[i] = -1; } public void ReInit(ParserTokenManager tm) { token_source = tm; token = new Token(); jj_ntk = -1; jj_gen = 0; for (int i = 0; i < 16; i++) jj_la1[i] = -1; } final private Token jj_consume_token(int kind) throws ParseException { Token oldToken; if ((oldToken = token).next != null) token = token.next; else token = token.next = token_source.getNextToken(); jj_ntk = -1; if (token.kind == kind) { jj_gen++; return token; } token = oldToken; jj_kind = kind; throw generateParseException(); } final public Token getNextToken() { if (token.next != null) token = token.next; else token = token.next = token_source.getNextToken(); jj_ntk = -1; jj_gen++; return token; } final public Token getToken(int index) { Token t = token; for (int i = 0; i < index; i++) { if (t.next != null) t = t.next; else t = t.next = token_source.getNextToken(); } return t; } final private int jj_ntk() { if ((jj_nt=token.next) == null) return (jj_ntk = (token.next=token_source.getNextToken()).kind); else return (jj_ntk = jj_nt.kind); } private java.util.Vector jj_expentries = new java.util.Vector(); private int[] jj_expentry; private int jj_kind = -1; final public ParseException generateParseException() { jj_expentries.removeAllElements(); boolean[] la1tokens = new boolean[37]; for (int i = 0; i < 37; i++) { la1tokens[i] = false; } if (jj_kind >= 0) { la1tokens[jj_kind] = true; jj_kind = -1; } for (int i = 0; i < 16; i++) { if (jj_la1[i] == jj_gen) { for (int j = 0; j < 32; j++) { if ((jj_la1_0[i] & (1<