#! /bin/sh
# This is a shell archive.  Remove anything before this line, then unpack
# it by saving it into a file and typing "sh file".  To overwrite existing
# files, type "sh file -c".  You can also feed this as standard input via
# unshar, or by typing "sh <file", e.g..  If this archive is complete, you
# will see the following message at the end:
#		"End of shell archive."
# Contents:  gen.c gram.c lex.c main.c symbol.c utils.c Makefile
#   build.h gram.h javaa.tab.h listing.h protos.h types.h utils.h
#   beginlex middlelex endlex javaa.y README HelloWorldApp.jasm
#   HelloWorldApp2.jasm index.html jasm.html features.html
#   examples.html
# Wrapped by djh4@siesta on Fri Jun  7 11:43:44 1996
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f 'gen.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'gen.c'\"
else
echo shar: Extracting \"'gen.c'\" \(66728 characters\)
sed "s/^X//" >'gen.c' <<'END_OF_FILE'
X/* Copyright 1996, Jason Hunt and Washington Univ., St. Louis */
X#include <stdio.h>
X#include <stdlib.h>
X#include <string.h>
X#include <limits.h>
X#include "types.h"
X#include "utils.h"
X#include "build.h"
X#include "gram.h"
X#include "listing.h"
X
X#define CONSTANT_Class -10
X#define CONSTANT_Fieldref -11
X#define CONSTANT_Methodref -12
X#define CONSTANT_InterfaceMethodref -13
X#define CONSTANT_String -14
X#define CONSTANT_Integer -15
X#define CONSTANT_Float -16
X#define CONSTANT_Long -17
X#define CONSTANT_Double -18
X#define CONSTANT_NameAndType -19
X#define CONSTANT_Utf8 -20
X
X
Xint UseStdOut;
X
Xsigned long GetLabel(char*, long, long);
X
XOpCodeTranslator OpCodeArray[202];
Xint OpCodeArrayCounter;
XOpCodeTranslator ConstTypeArray[12];
Xint ConstTypeArrayCounter;
X/* char Code[1000]; */
X/* int CodeCounter; */
XConstPoolEntry ConstPool[1000];
Xint ConstPoolArrayIndex; /*current Const Pool array number*/
Xint ConstPoolIndex; /*current Const Pool index number (as Java VM thinks it is)*/
Xint ConstPoolRealIndex[1000];  /* this holds the "real" index into the 
X				constant pool.  The indexes in the
X				ConstPoolEntry type are really indexes into
X				this array which holds the "true" index, in
X				case we want to implement priority */
Xthisclassstruct ThisClass;
Xshort SuperClass;
XFieldInfo field[50];
Xshort FieldCount;
Xmethodname * methodnameshead;
XMethodInfo currentmethod;
X/*MethodInfo method[10];*/
Xshort MethodCount;
X
Xchar* GetLocalVarSigFromSlot(int);
X
Xvoid copyshort2char(char* myarrayptr, short int myint)
X{
X  memcpy(myarrayptr,&myint,2);
X}
X
X
Xvoid outshort2char(short int myint, FILE* myoutfp)
X{
X  fwrite(&myint,2,1,myoutfp);
X}
X
Xvoid copylong2char(char* myarrayptr, long myint)
X{
X  memcpy(myarrayptr,&myint,4);
X}
X
Xvoid outlong2char(long myint, FILE* myoutfp)
X{
X  fwrite(&myint,4,1,myoutfp);
X}
X
Xvoid outfloat2char(float myfloat, FILE* myoutfp)
X{
X  fwrite(&myfloat,4,1,myoutfp);
X}
X
Xvoid outlonglong2char(long long int mylong, FILE* myoutfp)
X{
X  fwrite(&mylong,8,1,myoutfp);
X}
X
Xvoid outdouble2char(double mydouble, FILE* myoutfp)
X{
X  fwrite(&mydouble,8,1,myoutfp);
X}
X
X/* this function simply takes the passed char and puts it in the next
X   place in the code for the current method.  It makes the code look cleaner.
X*/
Xvoid AddToCode(char mychar)
X{
X  currentmethod.Code[currentmethod.CodeCounter++] = mychar;
X}
X
Xvoid AddShortToCode(short myshort)
X{
X  memcpy(&currentmethod.Code[currentmethod.CodeCounter],&myshort,2);
X  currentmethod.CodeCounter +=2;
X}
X
Xvoid AddLongToCode(long mylong)
X{
X  memcpy(&currentmethod.Code[currentmethod.CodeCounter],&mylong,4);
X  currentmethod.CodeCounter +=4;
X}
X
Xvoid EnterConstType(int myconsttype, char mybyteval)
X{
X   //printf("In EnterConstType with consttype: %i", myconsttype);
X   ConstTypeArray[ConstTypeArrayCounter].opcode = myconsttype;
X   ConstTypeArray[ConstTypeArrayCounter].byteval = mybyteval;
X   ConstTypeArrayCounter++;
X}
X
Xchar GetConstType(int myconsttype)
X{
X   int i; /*counter*/
X   i = 0;
X   //message("In GetConstType");
X   while ((i < ConstTypeArrayCounter) && (ConstTypeArray[i].opcode != myconsttype))
X   {  i++;
X   }
X   if (i < ConstTypeArrayCounter) return ConstTypeArray[i].byteval;
X   else oops("Looking for non-existent constant type");
X}
X 
X/* these functions return an index to the myconsttype if it's already in the 
Xpool, otherwise, it returns -1
X*/ 
Xshort int InConstPool(char myconsttype, char* mystringval)
X{
X  int i;
X  int temp;
X  //message("In InConstPool");
X  switch(myconsttype) {
X    case CONSTANT_Utf8:
X    {
X      i = 1;
X      while (i < ConstPoolArrayIndex) 
X      {
X        if ((myconsttype == ConstPool[i].consttype) &&
X            (strcmp(mystringval, ConstPool[i].stringval) == 0)) 
X          return ConstPool[i].myindex;
X        else
X          i++;
X       }
X       return -1;
X       break;
X    }
X    case CONSTANT_String:
X    case CONSTANT_Class:
X    {
X      temp = InConstPool(CONSTANT_Utf8, mystringval);
X      if (temp == -1) return -1;  /* no Utf8 with that name */
X      i = 1;
X      while (i < ConstPoolArrayIndex) 
X      {
X         if ((myconsttype == ConstPool[i].consttype) &&
X             (ConstPool[i].index1 == temp)) 
X          return ConstPool[i].myindex;
X        else
X          i++;
X       }
X       return -1;
X       break;
X     }
X     default:
X     {
X       oops("InConstPool sent bad consttype");
X       break;
X     }
X  }
X}
X
Xshort int InConstPool(char myconsttype, char* mystringval1, char* mystringval2)
X{
X  int i;
X  int temp1;
X  int temp2;
X  //message("In InConstPool");
X  switch(myconsttype) {
X    case CONSTANT_NameAndType:
X    {
X      temp1 = InConstPool(CONSTANT_Utf8, mystringval1);
X      if (temp1 == -1) return -1;  /* no Utf8 with that name */
X      temp2 = InConstPool(CONSTANT_Utf8, mystringval2);
X      if (temp2 == -1) return -1;  /* no Utf8 with that name */
X      i = 1;
X      while (i < ConstPoolArrayIndex) 
X      {
X         if ((myconsttype == ConstPool[i].consttype) &&
X             (ConstPool[i].index1 == temp1) &&
X             (ConstPool[i].index2 == temp2)) 
X          return ConstPool[i].myindex;
X        else
X          i++;
X       }
X       return -1;
X       break;
X     }
X     default:
X     {
X       oops("InConstPool sent bad consttype");
X       break;
X     }
X  }
X}
X
Xshort int InConstPool(char myconsttype, char* mystringval1, char* mystringval2,
X		      char* mystringval3)
X{
X  int i;
X  int temp1;
X  int temp2;
X  //message("In InConstPool");
X  switch(myconsttype) {
X    case CONSTANT_Fieldref:
X    case CONSTANT_Methodref:
X    case CONSTANT_InterfaceMethodref:
X    {
X      temp1 = InConstPool(CONSTANT_Class, mystringval1);
X      if (temp1 == -1) return -1;  /* no Class with that name */
X      temp2 = InConstPool(CONSTANT_NameAndType, mystringval2, mystringval3);
X      if (temp2 == -1) return -1;  /* no NameAndType */
X      i = 1;
X      while (i < ConstPoolArrayIndex) 
X      {
X         if ((myconsttype == ConstPool[i].consttype) &&
X             (ConstPool[i].index1 == temp1) &&
X             (ConstPool[i].index2 == temp2)) 
X          return ConstPool[i].myindex;
X        else
X          i++;
X       }
X       return -1;
X       break;
X     }
X     default:
X     {
X       oops("InConstPool sent bad consttype");
X       break;
X     }
X  }
X}
X
X
Xshort int InConstPool(char myconsttype, long int mylong)
X{
X  int i;
X  int temp1;
X  int temp2;
X  //message("In InConstPool");
X  switch(myconsttype) {
X    case CONSTANT_Integer:
X    {
X      i = 0;
X      while (i < ConstPoolArrayIndex) 
X      {
X         if ((myconsttype == ConstPool[i].consttype) &&
X             (ConstPool[i].intval == mylong)) 
X          return ConstPool[i].myindex;
X        else
X          i++;
X       }
X       return -1;
X       break;
X    }
X    default:
X    {
X       oops("InConstPool sent bad consttype");
X       break;
X    }
X  }
X}
X
Xshort int InConstPool(char myconsttype, float myfloat)
X{
X  int i;
X  int temp1;
X  int temp2;
X  //message("In InConstPool");
X  switch(myconsttype) {
X    case CONSTANT_Float:
X    {
X      i = 0;
X      while (i < ConstPoolArrayIndex) 
X      {
X         if ((myconsttype == ConstPool[i].consttype) &&
X             (ConstPool[i].floatval == myfloat)) 
X          return ConstPool[i].myindex;
X        else
X          i++;
X       }
X       return -1;
X       break;
X    }
X    default:
X    {
X       oops("InConstPool sent bad consttype");
X       break;
X    }
X  }
X}
X
X
Xshort int InConstPool(char myconsttype, long long int mylong)
X{
X  int i;
X  int temp1;
X  int temp2;
X  //message("In InConstPool");
X  switch(myconsttype) {
X    case CONSTANT_Long:
X    {
X      i = 0;
X      while (i < ConstPoolArrayIndex) 
X      {
X         if ((myconsttype == ConstPool[i].consttype) &&
X             (ConstPool[i].longval == mylong)) 
X          return ConstPool[i].myindex;
X        else
X          i++;
X       }
X       return -1;
X       break;
X    }
X    default:
X    {
X       oops("InConstPool sent bad consttype");
X       break;
X    }
X  }
X}
X
Xshort int InConstPool(char myconsttype, double mydouble)
X{
X  int i;
X  int temp1;
X  int temp2;
X  //message("In InConstPool");
X  switch(myconsttype) {
X    case CONSTANT_Double:
X    {
X      i = 0;
X      while (i < ConstPoolArrayIndex) 
X      {
X         if ((myconsttype == ConstPool[i].consttype) &&
X             (ConstPool[i].doubleval == mydouble))  
X          return ConstPool[i].myindex;
X        else
X          i++;
X       }
X       return -1;
X       break;
X    }
X    default:
X    {
X       oops("InConstPool sent bad consttype");
X       break;
X    }
X  }
X}
X
X
X
X
X/* These routines generate a constant pool entry according to the 
Xspecified paramenters.  If the requested entry already exists, it just
Xreturns the index to that entry.
X*/
Xshort GenConst(char myconsttype, char* mystringval)
X{
X  short int checkresult;
X  short int toreturn;
X  short int touse;
X  //message("In GenConst");
X  checkresult = InConstPool(myconsttype, mystringval);
X  if (checkresult >= 0) return checkresult;
X  toreturn = ConstPoolIndex;
X  touse = ConstPoolArrayIndex;
X  ConstPoolArrayIndex++;
X  ConstPoolIndex++;
X  ConstPool[touse].consttype = myconsttype;
X  ConstPool[touse].myindex = toreturn;
X  switch(myconsttype) {
X    case CONSTANT_Utf8:
X    {
X      ConstPool[touse].stringval = (char *) malloc(strlen(mystringval));
X      strcpy(ConstPool[touse].stringval, mystringval);
X      break;
X    }
X    case CONSTANT_String:
X    case CONSTANT_Class:
X    {
X      ConstPool[touse].index1 = GenConst(CONSTANT_Utf8,mystringval);
X      break;
X    }
X    default:
X    {
X      oops("GenConst sent bad consttype");
X      break;
X    }
X  }
X  return toreturn;
X}
X
X
Xshort GenConst(char myconsttype, char* mystringval1, char* mystringval2)
X{
X  short int checkresult;
X  short int toreturn;
X  short int touse;
X  //message("In GenConst");
X  checkresult = InConstPool(myconsttype, mystringval1, mystringval2);
X  if (checkresult >= 0) return checkresult;
X  toreturn = ConstPoolIndex;
X  touse = ConstPoolArrayIndex;
X  ConstPoolIndex++;
X  ConstPoolArrayIndex++;
X  ConstPool[touse].consttype = myconsttype;
X  ConstPool[touse].myindex = toreturn;
X  switch(myconsttype) {
X    case CONSTANT_NameAndType:
X    {
X      ConstPool[touse].index1 = GenConst(CONSTANT_Utf8,mystringval1);
X      ConstPool[touse].index2 = GenConst(CONSTANT_Utf8,mystringval2);
X      break;
X    }
X    default:
X    {
X      oops("GenConst sent bad consttype");
X      break;
X    }
X  }
X  return toreturn;
X}
X
X
Xshort GenConst(char myconsttype, char* mystringval1, char* mystringval2,
X	       char* mystringval3)
X{
X  short int checkresult;
X  short int toreturn;
X  short int touse;
X  //message("In GenConst");
X  checkresult = InConstPool(myconsttype, mystringval1, mystringval2, 
X			    mystringval3);
X  if (checkresult >= 0) return checkresult;
X  toreturn = ConstPoolIndex;
X  touse = ConstPoolArrayIndex;
X  ConstPoolIndex++;
X  ConstPoolArrayIndex++;
X  ConstPool[touse].consttype = myconsttype;
X  ConstPool[touse].myindex = toreturn;
X  switch(myconsttype) {
X    case CONSTANT_Fieldref:
X    case CONSTANT_Methodref:
X    case CONSTANT_InterfaceMethodref:
X    {
X      ConstPool[touse].index1 = GenConst(CONSTANT_Class,mystringval1);
X      ConstPool[touse].index2 = GenConst(CONSTANT_NameAndType,
X					    mystringval2, mystringval3);
X      break;
X    }
X    default:
X    {
X      oops("GenConst sent bad consttype");
X      break;
X    }
X  }
X  return toreturn;
X}
X
X
Xshort GenConst(char myconsttype, long int mylong)
X{
X  short int checkresult;
X  short int toreturn;
X  short int touse;
X  //message("In GenConst");
X  checkresult = InConstPool(myconsttype, mylong); 
X  if (checkresult >= 0) return checkresult;
X  toreturn = ConstPoolIndex;
X  touse = ConstPoolArrayIndex;
X  ConstPoolIndex++;
X  ConstPoolArrayIndex++;
X  ConstPool[touse].consttype = myconsttype;
X  ConstPool[touse].myindex = toreturn;
X  switch(myconsttype) {
X    case CONSTANT_Integer:
X    {
X      ConstPool[touse].intval = mylong; 
X      break;
X    }
X    default:
X    {
X      oops("GenConst sent bad consttype");
X      break;
X    }
X  }
X  return toreturn;
X}
X
X
Xshort GenConst(char myconsttype, float myfloat)
X{
X  short int checkresult;
X  short int toreturn;
X  short int touse;
X  //message("In GenConst");
X  checkresult = InConstPool(myconsttype, myfloat); 
X  if (checkresult >= 0) return checkresult;
X  toreturn = ConstPoolIndex;
X  touse = ConstPoolArrayIndex;
X  ConstPoolIndex++;
X  ConstPoolArrayIndex++;
X  ConstPool[touse].consttype = myconsttype;
X  ConstPool[touse].myindex = toreturn;
X  switch(myconsttype) {
X    case CONSTANT_Float:
X    {
X      ConstPool[touse].floatval = myfloat; 
X      break;
X    }
X    default:
X    {
X      oops("GenConst sent bad consttype");
X      break;
X    }
X  }
X  return toreturn;
X}
X
X
Xshort GenConst(char myconsttype, long long int mylong)
X{
X  short int checkresult;
X  short int toreturn;
X  short int touse;
X  //message("In GenConst");
X  checkresult = InConstPool(myconsttype, mylong); 
X  if (checkresult >= 0) return checkresult;
X  toreturn = ConstPoolIndex;
X  touse = ConstPoolArrayIndex;
X  ConstPoolIndex++;
X  ConstPoolIndex++;
X  ConstPoolArrayIndex++;
X  ConstPool[touse].consttype = myconsttype;
X  ConstPool[touse].myindex = toreturn;
X  switch(myconsttype) {
X    case CONSTANT_Long:
X    {
X      ConstPool[toreturn].longval = mylong; 
X      break;
X    }
X    default:
X    {
X      oops("GenConst sent bad consttype");
X      break;
X    }
X  }
X  return toreturn;
X}
X
X
Xshort GenConst(char myconsttype, double mydouble)
X{
X  short int checkresult;
X  short int toreturn;
X  short int touse;
X  //message("In GenConst");
X  checkresult = InConstPool(myconsttype,mydouble); 
X  if (checkresult >= 0) return checkresult;
X  toreturn = ConstPoolIndex;
X  touse = ConstPoolArrayIndex;
X  ConstPoolIndex++;
X  ConstPoolIndex++;
X  ConstPoolArrayIndex++;
X  ConstPool[touse].consttype = myconsttype;
X  ConstPool[touse].myindex = toreturn;
X  switch(myconsttype) {
X    case CONSTANT_Double:
X    {
X      ConstPool[touse].doubleval = mydouble; 
X      break;
X    }
X    default:
X    {
X      oops("GenConst sent bad consttype");
X      break;
X    }
X  }
X  return toreturn;
X}
X
X
X
X
Xvoid EnterOpCode(int myopcode, char mybyteval)
X{
X   OpCodeArray[OpCodeArrayCounter].opcode = myopcode;
X   OpCodeArray[OpCodeArrayCounter].byteval = mybyteval;
X   OpCodeArrayCounter++;
X}
X
Xchar GetOpCode(int myopcode)
X{
X   for (int j=0; j<OpCodeArrayCounter;j++)
X     if(myopcode == OpCodeArray[j].opcode) return OpCodeArray[j].byteval;
X   oops("Looking for non-existent op code");
X}
X
Xvoid SetThisClass(short access_flags, char* classname, char* superclassname)
X{
X  //message(superclassname);
X  ThisClass.access_flags = access_flags;
X  ThisClass.classindex = GenConst(CONSTANT_Class,classname);
X  ThisClass.classname = classname;
X  ThisClass.superclassindex = GenConst(CONSTANT_Class,superclassname);
X  ThisClass.superclassname = superclassname;
X  ThisClass.interfacecount = 0;
X  ThisClass.interfacehead = NULL;
X  ThisClass.sourcefileindex = -1;  /* it will get set later */
X}
X
Xchar* GetThisClass()
X{
X  return ThisClass.classname;
X} 
X
Xchar* GetSuperClass()
X{
X  return ThisClass.superclassname;
X}
X
X
Xvoid SetSourceFile(char* name)
X{
X  ThisClass.sourcefileindex = GenConst(CONSTANT_Utf8, name);
X  GenConst(CONSTANT_Utf8, "SourceFile"); /* will be used when outputting this
X					    attribute */
X}
X
Xvoid AddToInterfaceList(char* name)
X{
X  interfaceentry* toadd;
X  toadd = (interfaceentry*) malloc(sizeof(interfaceentry));
X  toadd->index = GenConst(CONSTANT_Class, name);
X  toadd->next = ThisClass.interfacehead;
X  ThisClass.interfacehead = toadd;
X  ThisClass.interfacecount++;
X}
X 
X
X 
Xvoid InitAssembler()
X{
X   OpCodeArrayCounter = 0;
X   EnterOpCode(AALOAD, 50);
X   EnterOpCode(AASTORE, 83);
X   EnterOpCode(ACONST_NULL, 1);
X   EnterOpCode(ALOAD_0, 42);
X   EnterOpCode(ALOAD_1, 43);
X   EnterOpCode(ALOAD_2, 44);
X   EnterOpCode(ALOAD_3, 45);
X   EnterOpCode(ANEWARRAY, 189);
X   EnterOpCode(ARETURN, 176);
X   EnterOpCode(ARRAYLENGTH, 190);
X   EnterOpCode(ASTORE_0, 75);
X   EnterOpCode(ASTORE_1, 76);
X   EnterOpCode(ASTORE_2, 77);
X   EnterOpCode(ASTORE_3, 78);
X   EnterOpCode(ATHROW, 191);
X   EnterOpCode(BALOAD, 51);
X   EnterOpCode(BASTORE, 84);
X   EnterOpCode(BIPUSH, 16);
X   EnterOpCode(CALOAD, 52);
X   EnterOpCode(CASTORE, 85);
X   EnterOpCode(CHECKCAST, 192);
X   EnterOpCode(D2F, 144);
X   EnterOpCode(D2I, 142);
X   EnterOpCode(D2L, 143);
X   EnterOpCode(DADD, 99);
X   EnterOpCode(DALOAD, 49);
X   EnterOpCode(DASTORE, 82);
X   EnterOpCode(DCMPG, 152);
X   EnterOpCode(DCMPL, 151);
X   EnterOpCode(DCONST_0, 14);
X   EnterOpCode(DCONST_1, 15);
X   EnterOpCode(DDIV, 111);
X   EnterOpCode(DLOAD_0, 38);
X   EnterOpCode(DLOAD_1, 39);
X   EnterOpCode(DLOAD_2, 40);
X   EnterOpCode(DLOAD_3, 41);
X   EnterOpCode(DMUL, 107);
X   EnterOpCode(DNEG, 119);
X   EnterOpCode(DREM, 115);
X   EnterOpCode(DRETURN, 175);
X   EnterOpCode(DSTORE_0, 71);
X   EnterOpCode(DSTORE_1, 72);
X   EnterOpCode(DSTORE_2, 73);
X   EnterOpCode(DSTORE_3, 74);
X   EnterOpCode(DSUB, 103);
X   EnterOpCode(DUP, 89);
X   EnterOpCode(DUP_X1, 90);
X   EnterOpCode(DUP_X2, 91);
X   EnterOpCode(DUP2, 92);
X   EnterOpCode(DUP2_X1, 93);
X   EnterOpCode(DUP2_X2, 94);
X   EnterOpCode(F2D, 141);
X   EnterOpCode(F2I, 139);
X   EnterOpCode(F2L, 140);
X   EnterOpCode(FADD, 98);
X   EnterOpCode(FALOAD, 48);
X   EnterOpCode(FASTORE, 81);
X   EnterOpCode(FCMPG, 150);
X   EnterOpCode(FCMPL, 149);
X   EnterOpCode(FCONST_0, 11);
X   EnterOpCode(FCONST_1, 12);
X   EnterOpCode(FCONST_2, 13);
X   EnterOpCode(FDIV, 110);
X   EnterOpCode(FLOAD_0, 34);
X   EnterOpCode(FLOAD_1, 35);
X   EnterOpCode(FLOAD_2, 36);
X   EnterOpCode(FLOAD_3, 37);
X   EnterOpCode(FMUL, 106);
X   EnterOpCode(FNEG, 118);
X   EnterOpCode(FREM, 114);
X   EnterOpCode(FRETURN, 174);
X   EnterOpCode(FSTORE_0, 67);
X   EnterOpCode(FSTORE_1, 68);
X   EnterOpCode(FSTORE_2, 69);
X   EnterOpCode(FSTORE_3, 70);
X   EnterOpCode(FSUB, 102);
X   EnterOpCode(GETFIELD, 180);
X   EnterOpCode(GETSTATIC, 178);
X   EnterOpCode(GOTO,167);
X   EnterOpCode(GOTO_W,200);
X   EnterOpCode(I2B,145);
X   EnterOpCode(I2C,146);
X   EnterOpCode(I2D,135);
X   EnterOpCode(I2F,134);
X   EnterOpCode(I2L,133);
X   EnterOpCode(I2S,147);
X   EnterOpCode(IADD,96);
X   EnterOpCode(IALOAD,46);
X   EnterOpCode(IAND,126);
X   EnterOpCode(IASTORE,79);
X   EnterOpCode(ICONST_0,3);
X   EnterOpCode(ICONST_1,4);
X   EnterOpCode(ICONST_2,5);
X   EnterOpCode(ICONST_3,6);
X   EnterOpCode(ICONST_4,7);
X   EnterOpCode(ICONST_5,8);
X   EnterOpCode(ICONST_M1,2);
X   EnterOpCode(IDIV,108);
X   EnterOpCode(IF_ACMPEQ,165);
X   EnterOpCode(IF_ACMPNE,166);
X   EnterOpCode(IF_ICMPEQ,159);
X   EnterOpCode(IF_ICMPNE,160);
X   EnterOpCode(IF_ICMPLT,161);
X   EnterOpCode(IF_ICMPGE,162);
X   EnterOpCode(IF_ICMPGT,163);
X   EnterOpCode(IF_ICMPLE,164);
X   EnterOpCode(IFEQ,153);
X   EnterOpCode(IFNE,154);
X   EnterOpCode(IFLT,155);
X   EnterOpCode(IFGE,156);
X   EnterOpCode(IFGT,157);
X   EnterOpCode(IFLE,158);
X   EnterOpCode(IFNONNULL,199);
X   EnterOpCode(IFNULL,198);
X   EnterOpCode(ILOAD_0,26);
X   EnterOpCode(ILOAD_1,27);
X   EnterOpCode(ILOAD_2,28);
X   EnterOpCode(ILOAD_3,29);
X   EnterOpCode(IMUL,104);
X   EnterOpCode(INEG,116);
X   EnterOpCode(IOR,128);
X   EnterOpCode(IREM,112);
X   EnterOpCode(IRETURN,172);
X   EnterOpCode(ISHL,120);
X   EnterOpCode(ISHR,122);
X   EnterOpCode(ISTORE_0,59);
X   EnterOpCode(ISTORE_1,60);
X   EnterOpCode(ISTORE_2,61);
X   EnterOpCode(ISTORE_3,62);
X   EnterOpCode(ISUB,100);
X   EnterOpCode(IUSHR,124);
X   EnterOpCode(IXOR,130);
X   EnterOpCode(JSR,168);
X   EnterOpCode(JSR_W,201);
X   EnterOpCode(L2D,138);
X   EnterOpCode(L2F,137);
X   EnterOpCode(L2I,136);
X   EnterOpCode(LADD,97);
X   EnterOpCode(LALOAD,47);
X   EnterOpCode(LAND,127);
X   EnterOpCode(LASTORE,80);
X   EnterOpCode(LCMP,148);
X   EnterOpCode(LCONST_0,9);
X   EnterOpCode(LCONST_1,10);
X   EnterOpCode(LDIV,109);
X   EnterOpCode(LLOAD_0,30);
X   EnterOpCode(LLOAD_1,31);
X   EnterOpCode(LLOAD_2,32);
X   EnterOpCode(LLOAD_3,33);
X   EnterOpCode(LMUL,105);
X   EnterOpCode(LNEG,117);
X   EnterOpCode(LOR,129);
X   EnterOpCode(LREM,113);
X   EnterOpCode(LRETURN,173);
X   EnterOpCode(LSHL,121);
X   EnterOpCode(LSHR,123);
X   EnterOpCode(LSTORE_0,63);
X   EnterOpCode(LSTORE_1,64);
X   EnterOpCode(LSTORE_2,65);
X   EnterOpCode(LSTORE_3,66);
X   EnterOpCode(LSUB,101);
X   EnterOpCode(LUSHR,125);
X   EnterOpCode(LXOR,131);
X   EnterOpCode(MONITORENTER,194);
X   EnterOpCode(MONITOREXIT,195);
X   EnterOpCode(NOP,0);
X   EnterOpCode(POP,87);
X   EnterOpCode(POP2,88);
X   EnterOpCode(RETURN,177);
X   EnterOpCode(SALOAD,53);
X   EnterOpCode(SASTORE,86);
X   EnterOpCode(SWAP,95);
X   EnterOpCode(IINC, 132);
X   EnterOpCode(INSTANCEOF, 193);
X   EnterOpCode(INVOKEINTERFACE, 185);
X   EnterOpCode(INVOKENONVIRTUAL, 183);
X   EnterOpCode(INVOKESTATIC, 184);
X   EnterOpCode(INVOKEVIRTUAL, 182);
X   EnterOpCode(LDC, 18);
X   EnterOpCode(LDC_W, 19);
X   EnterOpCode(LDC2_W, 20);
X   EnterOpCode(MULTIANEWARRAY, 197);
X   EnterOpCode(NEW, 187);
X   EnterOpCode(NEWARRAY, 188);
X   EnterOpCode(PUTFIELD, 181);
X   EnterOpCode(PUTSTATIC, 179);
X   EnterOpCode(SIPUSH, 17);
X   EnterOpCode(ILOAD, 21);
X   EnterOpCode(ALOAD, 25);
X   EnterOpCode(FLOAD, 23);
X   EnterOpCode(LLOAD, 22);
X   EnterOpCode(DLOAD, 24);
X   EnterOpCode(ISTORE, 54);
X   EnterOpCode(FSTORE, 56);
X   EnterOpCode(ASTORE, 58);
X   EnterOpCode(LSTORE, 55);
X   EnterOpCode(DSTORE, 57);
X   EnterOpCode(RET, 169);
X   EnterOpCode(WIDE, 196);
X   EnterOpCode(LOOKUPSWITCH, 171);
X   EnterOpCode(TABLESWITCH, 170);
X
X   ConstTypeArrayCounter = 0;
X   EnterConstType(CONSTANT_Class, 7);
X   EnterConstType(CONSTANT_Fieldref, 9);
X   EnterConstType(CONSTANT_Methodref, 10);
X   EnterConstType(CONSTANT_InterfaceMethodref, 11);
X   EnterConstType(CONSTANT_String, 8);
X   EnterConstType(CONSTANT_Integer, 3);
X   EnterConstType(CONSTANT_Float, 4);
X   EnterConstType(CONSTANT_Long, 5);
X   EnterConstType(CONSTANT_Double, 6);
X   EnterConstType(CONSTANT_NameAndType, 12);
X   EnterConstType(CONSTANT_Utf8, 1);
X   ConstPoolIndex = 1;
X   ConstPoolArrayIndex = 1;
X   for (int i=1;i<1000;i++) ConstPoolRealIndex[i]=i; 
X   //message("Done with InitAssembler");
X   //printf("OpCodeArrayCounter is %i\n", OpCodeArrayCounter);
X   MethodCount = 0;
X   FieldCount = 0;
X   methodnameshead = NULL;
X}
X
Xvoid ConstPoolDump(FILE* myoutfp)
X{
X  short int mylen;
X  outshort2char(ConstPoolIndex, myoutfp);
X  for(int i=1;i<ConstPoolArrayIndex;i++)
X  {
X    putc(GetConstType(ConstPool[i].consttype), myoutfp);
X    switch(ConstPool[i].consttype) {
X      case CONSTANT_Utf8:
X      {
X	mylen = strlen(ConstPool[i].stringval);
X        outshort2char(mylen, myoutfp);
X        for(int j=0;j<mylen;j++)
X        {
X          putc(ConstPool[i].stringval[j], myoutfp);
X        }
X        break;
X      }
X      case CONSTANT_String:
X      case CONSTANT_Class:
X      {
X        outshort2char(ConstPoolRealIndex[ConstPool[i].index1], myoutfp);
X        break;
X      }
X      case CONSTANT_NameAndType:
X      case CONSTANT_Fieldref:
X      case CONSTANT_Methodref:
X      case CONSTANT_InterfaceMethodref: 
X      {
X        outshort2char(ConstPoolRealIndex[ConstPool[i].index1], myoutfp);
X        outshort2char(ConstPoolRealIndex[ConstPool[i].index2], myoutfp);
X        break;
X      }
X      case CONSTANT_Integer:
X      {
X        outlong2char(ConstPool[i].intval, myoutfp);
X        break;
X      }
X      case CONSTANT_Float:
X      {
X        outfloat2char(ConstPool[i].floatval, myoutfp);
X        break;
X      }
X      case CONSTANT_Long:
X      {
X        outlonglong2char(ConstPool[i].longval, myoutfp);
X        break;
X      }
X      case CONSTANT_Double:
X      {
X        outdouble2char(ConstPool[i].doubleval, myoutfp);
X        break;
X      }
X      default:
X      {
X	oops("Bad Consttype in ConstPoolDump");
X    	break;
X      }
X    }
X  }
X}
X
X
X/* very simple file copy.  Probably should use system reads and writes */
Xvoid CopyMethod(char* aname, FILE* myoutfp)
X{
X   int mychar;
X   FILE *myinfp;
X   if ((myinfp = fopen(aname, "r")) == 0)
X     oops("Couldn't open method file for copying");
X   mychar = fgetc(myinfp);
X   while(mychar != EOF)
X   {
X     fputc(mychar,myoutfp);
X     mychar = fgetc(myinfp);
X   }
X   fclose(myinfp);
X}
X      
X  
X
Xvoid MethodDump(MethodInfo mymethod, FILE* outfp)
X{
X  int i;
X  int lastlocal;
X  int codeattlen;
X  short additionalattrib; 
X  short additionalcodeattrib; 
X  throwsentry* tempthrow;
X  throwsentry* todiethrow;
X  linenumberentry* templinenum;
X  linenumberentry* todielinenum;
X  userlocalvarentry* tempuserlocalvar;
X  userlocalvarentry* todieuserlocalvar;
X  outshort2char(mymethod.access_flags, outfp);
X  outshort2char(mymethod.name_index, outfp);
X  outshort2char(mymethod.signature_index, outfp);
X  additionalattrib = 0;
X  if (mymethod.CodeCounter > 0) additionalattrib++;
X  if (mymethod.ThrowsCounter > 0) additionalattrib++;
X  outshort2char(additionalattrib, outfp); /* attributes count */
X  if (mymethod.CodeCounter > 0)
X  {
X    outshort2char(GenConst(CONSTANT_Utf8,"Code"), outfp);
X           /* this should really only be a lookup here since the 
X              constant pool is already dumped. But it won't be dumped
X	      yet if we dump methods to separate files first!*/
X    codeattlen = mymethod.CodeCounter+8; /* stack local codelen, 
X    					      exceptiontbllen, attribcnt */
X    //codeattlen = mymethod.CodeCounter+12;
X    /*codeattlen = mymethod.CodeCounter+4;*/
X    if (mymethod.ExceptionsCounter > 0)
X       codeattlen += mymethod.ExceptionsCounter * 8;
X    if (mymethod.LineNumberCounter > 0)
X       codeattlen += 8 + (mymethod.LineNumberCounter * 4);
X    if (mymethod.UserLocalVarCounter > 0) /*use user-defined local var table
X					    first */
X    {
X       codeattlen += 8 + (mymethod.UserLocalVarCounter * 10);
X    }
X    else
X    {
X      if (mymethod.LocalVarCounter >= 0)
X         codeattlen += 8 + ((mymethod.LocalVarCounter + 1) * 10);
X    }
X    outlong2char(codeattlen,outfp); /* length of whole attribute */
X    /* the next lines are commented out and changed below because
X       although the documentation says u2 u2 u4 for the lengths, the
X       actual class file appears to be u1 u1 u2 */
X    //outshort2char(5,outfp); /* max stack - let user specify? */
X    //outshort2char(0,outfp); /* max_locals - can let user specify or
X//				  can derive from signature and other vars? */
X        
X    //outlong2char(mymethod.CodeCounter,outfp);
X    //putc(5,outfp);
X    //putc(2,outfp);
X    //outshort2char(mymethod.max_stack, outfp);
X    putc(mymethod.max_stack & 0x00FF, outfp);
X    /* output max_locals -- if user specifically defined it, use that,
X       otherwise use the slot number of the last variable */
X    if (mymethod.max_locals > -1)
X    {
X       //outshort2char(mymethod.max_locals, outfp);
X       putc(mymethod.max_locals & 0x00FF, outfp);
X    }
X    else
X    {
X       //outshort2char(mymethod.currentslot, outfp);
X       putc(mymethod.currentslot & 0x00FF, outfp);
X    }
X    //outlong2char(mymethod.CodeCounter,outfp);
X    outshort2char(mymethod.CodeCounter,outfp);
X    i = 0;
X    while (i < mymethod.CodeCounter)
X    {
X      putc(mymethod.Code[i],outfp);
X      i++;
X    }
X    /* output exceptions table */
X    outshort2char(mymethod.ExceptionsCounter,outfp); 
X    for(exceptionentry* tempexception = mymethod.exceptionhead;
X        tempexception != NULL; tempexception = tempexception->next)
X    {
X      outshort2char(tempexception->start_pc, outfp); 
X      outshort2char(tempexception->end_pc, outfp); 
X      outshort2char(tempexception->handler_pc, outfp); 
X      outshort2char(tempexception->catch_type, outfp); 
X    }
X
X    /*calculate the number of additional attributes*/
X    additionalcodeattrib = 0;
X    if (mymethod.LineNumberCounter > 0) additionalcodeattrib++;
X    if ((mymethod.UserLocalVarCounter > 0) || (mymethod.LocalVarCounter >= 0)) 
X       additionalcodeattrib++;
X    outshort2char(additionalcodeattrib, outfp);
X
X    /*output line number table, if any */
X    if (mymethod.LineNumberCounter > 0)
X    {
X      outshort2char(GenConst(CONSTANT_Utf8,"LineNumberTable"), outfp);
X      outlong2char(2 + (mymethod.LineNumberCounter * 4), outfp);
X      outshort2char(mymethod.LineNumberCounter, outfp);
X      templinenum = mymethod.linenumberhead;
X      while(templinenum != NULL)
X      {
X        outshort2char(templinenum->start_pc, outfp);
X        outshort2char(templinenum->line_number, outfp);
X        todielinenum = templinenum;
X        templinenum = templinenum->next;
X        free(todielinenum);
X      }
X    }
X
X    /*output local variable table -- do the user-defined one, if there is one,
X      otherwise do the generated one. */
X    if (mymethod.UserLocalVarCounter > 0)
X    {
X      outshort2char(GenConst(CONSTANT_Utf8,"LocalVariableTable"), outfp);
X      outlong2char(2 + (mymethod.UserLocalVarCounter * 10), outfp);
X      outshort2char(mymethod.UserLocalVarCounter, outfp);
X      tempuserlocalvar = mymethod.userlocalvarhead;
X      while(tempuserlocalvar != NULL)
X      {
X        outshort2char(tempuserlocalvar->start_pc, outfp);
X        outshort2char(tempuserlocalvar->length, outfp);
X        outshort2char(tempuserlocalvar->name_index, outfp);
X        outshort2char(tempuserlocalvar->signature_index, outfp);
X        outshort2char(tempuserlocalvar->slot, outfp);
X        todieuserlocalvar = tempuserlocalvar;
X        tempuserlocalvar = tempuserlocalvar->next;
X        free(todieuserlocalvar);
X      }
X    }
X    else
X    {
X      if (mymethod.LocalVarCounter >= 0)
X      {
X        outshort2char(GenConst(CONSTANT_Utf8,"LocalVariableTable"), outfp);
X        outlong2char((long)((mymethod.LocalVarCounter + 1) * 10) + 2, outfp);
X        outshort2char(mymethod.LocalVarCounter + 1, outfp);
X        for (int k =0; k <= mymethod.LocalVarCounter; k++)
X        {
X          outshort2char(mymethod.LocalVar[k].start_pc,outfp);
X          outshort2char(mymethod.LocalVar[k].length,outfp);
X          outshort2char(mymethod.LocalVar[k].name_index,outfp);
X          outshort2char(mymethod.LocalVar[k].signature_index,outfp);
X          outshort2char(mymethod.LocalVar[k].slot,outfp);
X        }
X      }
X    }
X  }
X  /* output throws (exceptions) table, if any */
X  if (mymethod.ThrowsCounter > 0)
X  {
X    outshort2char(GenConst(CONSTANT_Utf8,"Exceptions"), outfp);
X    outlong2char(2 + (mymethod.ThrowsCounter * 2), outfp); /* attrib length */
X    outshort2char(mymethod.ThrowsCounter, outfp); /* exception tbl length */
X    tempthrow = mymethod.throwshead;
X    while(tempthrow != NULL)
X    {
X      outshort2char(tempthrow->exceptionclass, outfp);
X      todiethrow = tempthrow;
X      tempthrow = tempthrow->next;
X      free(todiethrow);
X    }
X  }
X    
X}
X
X        
X
X
Xvoid EndAssembler()
X{
X   FILE *outfp;
X   int i;
X   methodname *tempmethodname;
X   methodname *todiemethodname;
X   interfaceentry* tempinterface;
X   interfaceentry* todieinterface;
X
X   if ((outfp = fopen(ConsStrings(GetThisClass(),".class"), "w")) == 0)
X     perror("out.class"), exit(1);
X   /* Header Info */
X   putc(0xCA, outfp); /* magic number */
X   putc(0xFE, outfp);
X   putc(0xBA, outfp);
X   putc(0xBE, outfp);
X   putc(0x00, outfp); /* minor version */
X   putc(0x02, outfp);
X   putc(0x00, outfp); /* major version */
X   putc(0x2D, outfp);
X   
X   i = 0;
X   //printf("\nConstPool Dump:\n");
X   ConstPoolDump(outfp);
X   //printf("\nEnd of ConstPool Dump\n");
X   outshort2char(ThisClass.access_flags, outfp); /* Access info */
X   outshort2char(ThisClass.classindex, outfp);
X   outshort2char(ThisClass.superclassindex, outfp);
X
X   /* output interfaces (that this class implements) */
X   outshort2char(ThisClass.interfacecount, outfp);
X   tempinterface = ThisClass.interfacehead;
X   while (tempinterface != NULL)
X   {
X     outshort2char(tempinterface->index, outfp);
X     todieinterface = tempinterface;
X     tempinterface = tempinterface->next;
X     free(todieinterface);
X   }
X 
X   /* output fields */
X   outshort2char(FieldCount, outfp);
X   for (int k=1;k<=FieldCount;k++)
X   {
X     outshort2char(field[k].access_flags, outfp);
X     outshort2char(field[k].name_index, outfp);
X     outshort2char(field[k].signature_index, outfp);
X     if (field[k].constantvalue_index != 0)
X     {
X       outshort2char(1,outfp); /*attributes count*/
X       outshort2char(GenConst(CONSTANT_Utf8,"ConstantValue"), outfp);
X       outlong2char(2, outfp); /* attribute length */
X       outshort2char(field[k].constantvalue_index, outfp);
X     }
X     else
X     {
X       outshort2char(0, outfp); /*attributes count*/
X     }
X   }
X   outshort2char(MethodCount, outfp);
X   //printf("\nCode Dump:\n");
X   /* will want to go through linked list of method's file names and copy
X      them into outfp */
X   tempmethodname = methodnameshead;
X   while(tempmethodname != NULL)
X   {  
X     CopyMethod(tempmethodname->name, outfp);
X     remove(tempmethodname->name);
X     todiemethodname = tempmethodname;
X     tempmethodname = tempmethodname->next;
X     free(todiemethodname);
X   }
X   /*for (int j=1;j<=MethodCount;j++)
X   {
X     MethodDump(method[j], outfp);
X   }
X   */
X   if (ThisClass.sourcefileindex == -1)
X   {
X     outshort2char(0, outfp); /*attributes count*/
X   }
X   else
X   {
X     outshort2char(1, outfp); /*attributes count*/
X     outshort2char(GenConst(CONSTANT_Utf8,"SourceFile"), outfp); /* just a 
X						lookup at this point */
X     outlong2char(2, outfp);  /*attribute length*/
X     outshort2char(ThisClass.sourcefileindex, outfp);
X   }
X   //printf("\nEnd of Code Dump\n");
X   fclose(outfp);
X}
X
X
Xvoid GenNoArgCode(int opcode)
X{
X   //message("In GenNoArgCode");
X   //printf("The opcode is : %i\n", GetOpCode(opcode));
X   switch (opcode){
X     default:
X     {
X       AddToCode(GetOpCode(opcode));
X       break;
X     }
X   }
X}
X
Xvoid GenOneArgCode(int opcode, ArgType arg1)
X{
X   short int mytemp;
X   //message("In GenOneArgCode");
X   //printf("The opcode is : %i\n", GetOpCode(opcode));
X   //AddToCode(GetOpCode(opcode));
X   switch(opcode) {
X     case (LDC):
X     case (LDC_W):
X     {
X       switch (arg1.type) {
X         case STRING_LITERAL:
X         {
X 	   //printf("Calling GenConst with %s", arg1.stringval);
X           mytemp = GenConst(CONSTANT_String,arg1.stringval);
X           break;
X         }
X         case INTCONSTANT:
X         {
X           mytemp = GenConst(CONSTANT_Integer,(long)arg1.intval);
X           break;
X         } 
X         case FLOATCONSTANT:
X         {
X           mytemp = GenConst(CONSTANT_Float,arg1.floatval);
X           break;
X         }
X         case LONGCONSTANT:
X         {
X	   AddToCode(GetOpCode(LDC2_W));
X	   AddShortToCode(GenConst(CONSTANT_Long,arg1.longval));
X 	   warning("Long argument: using LDC2_W");
X           return;
X	 }
X         case DOUBLECONSTANT:
X         {
X	   AddToCode(GetOpCode(LDC2_W));
X	   AddShortToCode(GenConst(CONSTANT_Double ,arg1.doubleval));
X 	   warning("Double argument: using LDC2_W");
X           return;
X	 }
X         default:
X         {
X           oops("bad argument type");
X         }
X       } 
X       if (mytemp > CHAR_MAX)
X       {
X         AddToCode(GetOpCode(LDC_W));
X         AddShortToCode(mytemp);
X	 if (opcode != LDC_W) message("Using LDC_W");
X       }
X       else
X       { 
X         AddToCode(GetOpCode(LDC));
X         AddToCode((char) (mytemp & 0x00FF));
X	 if (opcode != LDC) message("Using LDC");
X       }
X       break;
X     }
X     case (LDC2_W):
X     {
X       switch (arg1.type) {
X         case LONGCONSTANT:
X         {
X	   AddToCode(GetOpCode(opcode));
X	   AddShortToCode(GenConst(CONSTANT_Long,arg1.longval));
X           break;
X	 }
X         case DOUBLECONSTANT:
X         {
X	   AddToCode(GetOpCode(opcode));
X	   AddShortToCode(GenConst(CONSTANT_Double ,arg1.doubleval));
X           break;
X	 }
X         default:
X         {
X           oops("bad argument type to LDC2_W");
X         }
X       }
X       break;
X     }
X     case (BIPUSH):
X     {
X       if(arg1.type != INTCONSTANT)
X	 oops("Bad argument type to BIPUSH.");
X       if(arg1.intval > 128)
X	 oops("Argument too large for BIPUSH.");
X       if(arg1.intval < -127)
X	 oops("Argument too small for BIPUSH.");
X       AddToCode(GetOpCode(opcode));
X       AddToCode(arg1.intval);
X       break;
X     }
X     case (SIPUSH):
X     {
X       if(arg1.type != INTCONSTANT)
X	 oops("Bad argument type to SIPUSH.");
X       if(arg1.intval > 32767)
X	 oops("Argument too large for SIPUSH.");
X       if(arg1.intval < -32768)
X	 oops("Argument too small for SIPUSH.");
X       AddToCode(GetOpCode(opcode));
X       AddShortToCode(arg1.intval);
X       break;
X     }
X     default:
X     {
X       /*do nothing now*/
X     }
X   }
X}
X
Xvoid GenTwoArgCode(int opcode, ArgType arg1, ArgType arg2)
X{
X   //message("In GenTwoArgCode");
X   switch(opcode) {
X     case (IINC):
X     {
X       /* need to check type */
X       AddToCode(GetOpCode(opcode));
X       AddToCode(arg1.intval);
X       AddToCode(arg2.intval);
X       break;
X     }
X     default:
X     {
X       /* do nothing now */
X     }
X  }
X}
X
Xvoid GenMethodArgCode(int opcode, char* arg1, char* arg2, char* arg3)
X{
X   //message("In GenMethodArgCode");
X   AddToCode(GetOpCode(opcode));
X   AddShortToCode(GenConst(CONSTANT_Methodref, arg1, 
X	   	           arg2, arg3));
X}
X
Xvoid GenINVOKEINTERFACECode(int opcode, char* arg1, char* arg2, char* arg3,
X			    int nargs)
X{
X   //message("In GenMethodArgCode");
X   AddToCode(GetOpCode(opcode));
X   AddShortToCode(GenConst(CONSTANT_InterfaceMethodref, arg1, 
X	   	           arg2, arg3));
X   if (nargs > CHAR_MAX)
X  	oops("Number of argument words too big for invokeinterface.");
X   AddToCode(nargs);
X   AddToCode(0);  /* for reserved spot */
X}
X
Xvoid GenFieldArgCode(int opcode, char* arg1, char* arg2, char* arg3)
X{
X   //message("In GenFieldArgCode");
X   //printf("OpCode: %i GetOpCode: %i",opcode,(int)GetOpCode(opcode));
X   AddToCode(GetOpCode(opcode));
X   AddShortToCode(GenConst(CONSTANT_Fieldref, arg1, 
X	   	           arg2, arg3));
X}
X
Xvoid GenClassArgCode(int opcode, char* arg1)
X{
X   //message("In GenFieldArgCode");
X   AddToCode(GetOpCode(opcode));
X   AddShortToCode(GenConst(CONSTANT_Class, arg1)); 
X}
X
Xvoid GenMULTIANEWARRAYCode(int opcode, char* arg1, int dimensions)
X{
X   //message("In GenMULTIANEWARRAYCode");
X   if (dimensions > CHAR_MAX)
X   	oops("Dimensions too big for MULTIANEWARRAY.");
X   AddToCode(GetOpCode(opcode));
X   AddShortToCode(GenConst(CONSTANT_Class, arg1));
X   AddToCode((char) dimensions); 
X}
X
Xvoid GenLabelArgCode(int opcode, char* arg1)
X{
X   signed long location;
X   signed long offset;
X   /* need to see if offset big enough to need goto_w, jsr_w, etc. */
X   //message("In GenLabelArgCode");
X   location = GetLabel(arg1, currentmethod.CodeCounter, 
X			currentmethod.CodeCounter + 1);
X   offset = location - (currentmethod.CodeCounter); /* not a valid
X					value if location is -1 */	
X   switch (opcode)
X   {
X     case (IFEQ):
X     case (IFLT):
X     case (IFLE):
X     case (IFGT):
X     case (IFGE):
X     case (IFNE):
X     case (IFNULL):
X     case (IFNONNULL):
X     case (IF_ICMPEQ):
X     case (IF_ICMPNE):
X     case (IF_ICMPLT):
X     case (IF_ICMPGT):
X     case (IF_ICMPLE):
X     case (IF_ICMPGE):
X     case (IF_ACMPEQ):
X     case (IF_ACMPNE):
X     {
X       AddToCode(GetOpCode(opcode));
X       if (location == -1) /* label not yet defined */
X       {
X	 AddShortToCode((signed short) 0); /*place holder*/
X       }
X       else
X       {
X         if ((offset > 32767) || (offset < -32768))
X	 {
X	   oops("instruction used label that's too far away.");
X	 }
X	 else
X	 {
X	   AddShortToCode((signed short) offset);
X	 }
X       }
X       break;
X     }
X     case (GOTO):
X     {
X       if (location == -1) /* label not yet defined */
X       {
X         AddToCode(GetOpCode(GOTO_W));
X	 AddLongToCode((signed long) 0); /*place holder*/
X       }
X       else
X       {
X         if ((offset > 32767) || (offset < -32768))
X	 {
X	   message("Using GOTO_W");
X           AddToCode(GetOpCode(GOTO_W));
X	   AddLongToCode(offset);
X	 }
X	 else
X	 {
X           AddToCode(GetOpCode(opcode));
X	   AddShortToCode((signed short) offset);
X	 }
X       }
X       break;
X     }
X     case (JSR):
X     {
X       if (location == -1) /* label not yet defined */
X       {
X         AddToCode(GetOpCode(JSR_W));
X	 AddLongToCode((signed long) 0); /*place holder*/
X       }
X       else
X       {
X         if ((offset > 32767) || (offset < -32768))
X	 {
X	   message("Using JSR_W");
X           AddToCode(GetOpCode(JSR_W));
X	   AddLongToCode(offset); 
X	 }
X	 else
X	 {
X           AddToCode(GetOpCode(opcode));
X	   AddShortToCode((signed short) offset);
X	 }
X       }
X       break;
X     }
X     case (GOTO_W):
X     {
X       if (location == -1) /* label not yet defined */
X       {
X         AddToCode(GetOpCode(opcode));
X	 AddLongToCode((signed long) 0); /*place holder*/
X       }
X       else
X       {
X         if ((offset > 32767) || (offset < -32768))
X	 {
X           AddToCode(GetOpCode(opcode));
X	   AddLongToCode(offset); 
X	 }
X	 else
X	 {
X	   message("Optimizing: using GOTO");
X           AddToCode(GetOpCode(GOTO));
X	   AddShortToCode((signed short) offset);
X	 }
X       }
X       break;
X     }
X     case (JSR_W):
X     {
X       if (location == -1) /* label not yet defined */
X       {
X         AddToCode(GetOpCode(opcode));
X	 AddLongToCode((signed long) 0); /*place holder*/
X       }
X       else
X       {
X         if ((offset > 32767) || (offset < -32768))
X	 {
X           AddToCode(GetOpCode(opcode));
X	   AddLongToCode(offset); 
X	 }
X	 else
X	 {
X	   message("Optimizing: using JSR");
X           AddToCode(GetOpCode(JSR));
X	   AddShortToCode((signed short) offset);
X	 }
X       }
X       break;
X     }
X   }
X}
X
Xvoid GenLocalVarArgCode(int opcode, int index)
X{
X   char* tempsig;
X   //message("In GenLocalVarArgCode");
X   /* check if generic load or store used */
X   if(opcode == LOAD)
X   {
X     tempsig = GetLocalVarSigFromSlot(index);
X     switch (tempsig[0])  /*only need to look at first char of signature */
X     {
X        /* are bytes, chars, shorts, and booleans considered as ints? */
X  	case 'B':
X	case 'C':
X	case 'S':
X	case 'Z':
X	case 'I':
X	{
X	  opcode = ILOAD;
X	  message("Using ILOAD.");
X	  break;
X	}
X	case 'F':
X	{
X	  opcode = FLOAD;
X	  message("Using FLOAD.");
X	  break;
X	}
X	case 'J':
X	{
X	  opcode = LLOAD;
X	  message("Using LLOAD.");
X	  break;
X	}
X	case 'D':
X	{
X	  opcode = DLOAD;
X	  message("Using DLOAD.");
X	  break;
X	}
X	case 'L':
X	case '[':
X	{
X	  opcode = ALOAD;
X	  message("Using ALOAD.");
X	  break;
X	}
X  	default:
X        { oops("Bad signature in GenLocalVarArgCode.");
X 	}
X      }
X   }
X   if(opcode == STORE)
X   {
X     tempsig = GetLocalVarSigFromSlot(index);
X     switch (tempsig[0])  /*only need to look at first char of signature */
X     {
X        /* are bytes, chars, shorts, and booleans considered as ints? */
X  	case 'B':
X	case 'C':
X	case 'S':
X	case 'Z':
X	case 'I':
X	{
X	  opcode = ISTORE;
X	  message("Using ISTORE.");
X	  break;
X	}
X	case 'F':
X	{
X	  opcode = FSTORE;
X	  message("Using FSTORE.");
X	  break;
X	}
X	case 'J':
X	{
X	  opcode = LSTORE;
X	  message("Using LSTORE.");
X	  break;
X	}
X	case 'D':
X	{
X	  opcode = DSTORE;
X	  message("Using DSTORE.");
X	  break;
X	}
X	case 'L':
X	case '[':
X	{
X	  opcode = ASTORE;
X	  message("Using ASTORE.");
X	  break;
X	}
X  	default:
X        { oops("Bad signature in GenLocalVarArgCode.");
X 	}
X      }
X   }
X   
X   /* need to check if index is big enough to need use of wide statement */
X   if (index > CHAR_MAX)
X   {
X     /* make sure the user didn't put out a wide statement already*/ 
X     if(currentmethod.Code[currentmethod.CodeCounter-1] !=
X	 GetOpCode(WIDE))
X     {  
X       AddToCode(GetOpCode(WIDE));
X     }
X     AddToCode(GetOpCode(opcode));
X     AddShortToCode(index);
X   }
X   else
X   {
X     switch(opcode)
X     {
X     	case (ILOAD):
X        {
X	  switch(index)
X  	  {
X	    case 0:
X	    {
X	      AddToCode(GetOpCode(ILOAD_0));
X	      break;
X	    }
X	    case 1:
X	    {
X	      AddToCode(GetOpCode(ILOAD_1));
X	      break;
X	    }
X	    case 2:
X	    {
X	      AddToCode(GetOpCode(ILOAD_2));
X	      break;
X	    }
X	    case 3:
X	    {
X	      AddToCode(GetOpCode(ILOAD_3));
X	      break;
X	    }
X	    default:
X	    {
X	      AddToCode(GetOpCode(opcode));
X	      AddToCode(index & 0x00FF);
X    	    }
X	  }
X	  break;
X   	}
X     	case (FLOAD):
X        {
X	  switch(index)
X  	  {
X	    case 0:
X	    {
X	      AddToCode(GetOpCode(FLOAD_0));
X	      break;
X	    }
X	    case 1:
X	    {
X	      AddToCode(GetOpCode(FLOAD_1));
X	      break;
X	    }
X	    case 2:
X	    {
X	      AddToCode(GetOpCode(FLOAD_2));
X	      break;
X	    }
X	    case 3:
X	    {
X	      AddToCode(GetOpCode(FLOAD_3));
X	      break;
X	    }
X	    default:
X	    {
X	      AddToCode(GetOpCode(opcode));
X	      AddToCode(index & 0x00FF);
X    	    }
X	  }
X	  break;
X   	}
X     	case (ALOAD):
X        {
X	  switch(index)
X  	  {
X	    case 0:
X	    {
X	      AddToCode(GetOpCode(ALOAD_0));
X	      break;
X	    }
X	    case 1:
X	    {
X	      AddToCode(GetOpCode(ALOAD_1));
X	      break;
X	    }
X	    case 2:
X	    {
X	      AddToCode(GetOpCode(ALOAD_2));
X	      break;
X	    }
X	    case 3:
X	    {
X	      AddToCode(GetOpCode(ALOAD_3));
X	      break;
X	    }
X	    default:
X	    {
X	      AddToCode(GetOpCode(opcode));
X	      AddToCode(index & 0x00FF);
X    	    }
X	  }
X	  break;
X   	}
X     	case (LLOAD):
X        {
X	  switch(index)
X  	  {
X	    case 0:
X	    {
X	      AddToCode(GetOpCode(LLOAD_0));
X	      break;
X	    }
X	    case 1:
X	    {
X	      AddToCode(GetOpCode(LLOAD_1));
X	      break;
X	    }
X	    case 2:
X	    {
X	      AddToCode(GetOpCode(LLOAD_2));
X	      break;
X	    }
X	    case 3:
X	    {
X	      AddToCode(GetOpCode(LLOAD_3));
X	      break;
X	    }
X	    default:
X	    {
X	      AddToCode(GetOpCode(opcode));
X	      AddToCode(index & 0x00FF);
X    	    }
X	  }
X	  break;
X   	}
X     	case (DLOAD):
X        {
X	  switch(index)
X  	  {
X	    case 0:
X	    {
X	      AddToCode(GetOpCode(DLOAD_0));
X	      break;
X	    }
X	    case 1:
X	    {
X	      AddToCode(GetOpCode(DLOAD_1));
X	      break;
X	    }
X	    case 2:
X	    {
X	      AddToCode(GetOpCode(DLOAD_2));
X	      break;
X	    }
X	    case 3:
X	    {
X	      AddToCode(GetOpCode(DLOAD_3));
X	      break;
X	    }
X	    default:
X	    {
X	      AddToCode(GetOpCode(opcode));
X	      AddToCode(index & 0x00FF);
X    	    }
X	  }
X	  break;
X   	}
X     	case (ISTORE):
X        {
X	  switch(index)
X  	  {
X	    case 0:
X	    {
X	      AddToCode(GetOpCode(ISTORE_0));
X	      break;
X	    }
X	    case 1:
X	    {
X	      AddToCode(GetOpCode(ISTORE_1));
X	      break;
X	    }
X	    case 2:
X	    {
X	      AddToCode(GetOpCode(ISTORE_2));
X	      break;
X	    }
X	    case 3:
X	    {
X	      AddToCode(GetOpCode(ISTORE_3));
X	      break;
X	    }
X	    default:
X	    {
X	      AddToCode(GetOpCode(opcode));
X	      AddToCode(index & 0x00FF);
X    	    }
X	  }
X	  break;
X   	}
X     	case (FSTORE):
X        {
X	  switch(index)
X  	  {
X	    case 0:
X	    {
X	      AddToCode(GetOpCode(FSTORE_0));
X	      break;
X	    }
X	    case 1:
X	    {
X	      AddToCode(GetOpCode(FSTORE_1));
X	      break;
X	    }
X	    case 2:
X	    {
X	      AddToCode(GetOpCode(FSTORE_2));
X	      break;
X	    }
X	    case 3:
X	    {
X	      AddToCode(GetOpCode(FSTORE_3));
X	      break;
X	    }
X	    default:
X	    {
X	      AddToCode(GetOpCode(opcode));
X	      AddToCode(index & 0x00FF);
X    	    }
X	  }
X	  break;
X   	}
X     	case (ASTORE):
X        {
X	  switch(index)
X  	  {
X	    case 0:
X	    {
X	      AddToCode(GetOpCode(ASTORE_0));
X	      break;
X	    }
X	    case 1:
X	    {
X	      AddToCode(GetOpCode(ASTORE_1));
X	      break;
X	    }
X	    case 2:
X	    {
X	      AddToCode(GetOpCode(ASTORE_2));
X	      break;
X	    }
X	    case 3:
X	    {
X	      AddToCode(GetOpCode(ASTORE_3));
X	      break;
X	    }
X	    default:
X	    {
X	      AddToCode(GetOpCode(opcode));
X	      AddToCode(index & 0x00FF);
X    	    }
X	  }
X	  break;
X   	}
X     	case (LSTORE):
X        {
X	  switch(index)
X  	  {
X	    case 0:
X	    {
X	      AddToCode(GetOpCode(LSTORE_0));
X	      break;
X	    }
X	    case 1:
X	    {
X	      AddToCode(GetOpCode(LSTORE_1));
X	      break;
X	    }
X	    case 2:
X	    {
X	      AddToCode(GetOpCode(LSTORE_2));
X	      break;
X	    }
X	    case 3:
X	    {
X	      AddToCode(GetOpCode(LSTORE_3));
X	      break;
X	    }
X	    default:
X	    {
X	      AddToCode(GetOpCode(opcode));
X	      AddToCode(index & 0x00FF);
X    	    }
X	  }
X	  break;
X   	}
X     	case (DSTORE):
X        {
X	  switch(index)
X  	  {
X	    case 0:
X	    {
X	      AddToCode(GetOpCode(DSTORE_0));
X	      break;
X	    }
X	    case 1:
X	    {
X	      AddToCode(GetOpCode(DSTORE_1));
X	      break;
X	    }
X	    case 2:
X	    {
X	      AddToCode(GetOpCode(DSTORE_2));
X	      break;
X	    }
X	    case 3:
X	    {
X	      AddToCode(GetOpCode(DSTORE_3));
X	      break;
X	    }
X	    default:
X	    {
X	      AddToCode(GetOpCode(opcode));
X	      AddToCode(index & 0x00FF);
X    	    }
X	  }
X	  break;
X   	}
X     	case (RET):
X        {
X	   AddToCode(GetOpCode(opcode));
X	   AddToCode(index & 0x00FF);
X	   break;
X   	}
X	default:
X	{ 
X	  oops("Bad opcode to GenLocalVariable.");
X	}
X    }
X  }
X}
X
Xvoid GenIINCCode(int opcode, int index, int myconst)
X{
X   if (myconst > CHAR_MAX)
X   {
X     oops("Constant too big for IINC instruction.");
X   }
X   message("In GenIINCCode.");
X   printf("%i\n",myconst);
X   if (index > CHAR_MAX)
X   {
X     /* make sure the user didn't put out a wide statement already*/ 
X     if(currentmethod.Code[currentmethod.CodeCounter-1] !=
X	 GetOpCode(WIDE))
X     {  
X       AddToCode(GetOpCode(WIDE));
X     }
X     AddToCode(GetOpCode(opcode));
X     AddShortToCode(index);
X     AddToCode((char)myconst);
X   }
X   else
X   {
X     AddToCode(GetOpCode(opcode));
X     AddToCode((char)index);
X     AddToCode((char)myconst);
X   }
X}
X
Xvoid GenNEWARRAYCode(int opcode, int atype)
X{
X   AddToCode(GetOpCode(opcode));
X   AddToCode((char) atype);
X}
X
Xvoid GenLOOKUPSWITCHCode(int opcode, char* mydefault, lookupentry* head)
X{
X   int opcodelocation;
X   long j;
X   lookupentry* tempptr;
X   lookupentry* todie;
X   opcodelocation = currentmethod.CodeCounter;
X   AddToCode(GetOpCode(opcode));
X   /* add byte pad */
X   for (int i = opcodelocation % 4; (i%4 != 0); i++)
X   {
X     AddToCode(0); /* filler byte */
X     i++; /* isn't this redundant???? */
X   }
X   /* add mydefault offset */
X   AddLongToCode(opcodelocation - GetLabel(mydefault,opcodelocation,
X			  	     	   currentmethod.CodeCounter));
X   /* count npairs */
X   j = 0;
X   tempptr = head;
X   while(tempptr != NULL)
X   {
X     j++;
X     tempptr = tempptr->next;
X   }
X   AddLongToCode(j);
X   /* now add the pairs */
X   tempptr = head;
X   while (tempptr != NULL)
X   {
X     AddLongToCode(tempptr->match);
X     AddLongToCode(opcodelocation - GetLabel(tempptr->alabel,opcodelocation,
X			  	     	   currentmethod.CodeCounter));
X     todie = tempptr;
X     tempptr = tempptr->next;
X     free(todie);
X   }
X}
X
Xvoid GenTABLESWITCHCode(int opcode, int mylow, int myhigh, 
X			char* mydefault, tableentry* head)
X{
X   int opcodelocation;
X   long j;
X   tableentry* tempptr;
X   tableentry* todie;
X   opcodelocation = currentmethod.CodeCounter;
X   AddToCode(GetOpCode(opcode));
X   /* add byte pad */
X   for (int i = opcodelocation % 4; (i%4 != 0); i++)
X   {
X     AddToCode(0); /* filler byte */
X     i++; /* isn't this redundant???? */
X   }
X   /* add mydefault offset */
X   AddLongToCode(opcodelocation - GetLabel(mydefault,opcodelocation,
X			  	     	   currentmethod.CodeCounter));
X   /* count npairs */
X   AddLongToCode(mylow);
X   AddLongToCode(myhigh);
X
X   /* now add the entries */
X   tempptr = head;
X   while (tempptr != NULL)
X   {
X     AddLongToCode(opcodelocation - GetLabel(tempptr->alabel,opcodelocation,
X			  	     	   currentmethod.CodeCounter));
X     todie = tempptr;
X     tempptr = tempptr->next;
X     free(todie);
X   }
X}
X     
X
Xvoid NewNewMethod(int access)
X{
X   MethodCount++;
X   currentmethod.access_flags = access;  
X   currentmethod.CodeCounter = 0;
X   GenConst(CONSTANT_Utf8, "Code");  /* note: don't need this if no code
X					ever generated */
X   currentmethod.LabelCounter = 0; 
X   currentmethod.LocalVarCounter = -1;
X   currentmethod.ExceptionsCounter = 0;
X   currentmethod.exceptionhead = NULL;
X   currentmethod.ThrowsCounter = 0;
X   currentmethod.throwshead = NULL;
X   currentmethod.LineNumberCounter = 0;
X   currentmethod.linenumberhead = NULL;
X   currentmethod.UserLocalVarCounter = 0;
X   currentmethod.userlocalvarhead = NULL;
X   if ((currentmethod.access_flags & 0x0008) > 0)
X      /* this is a static method, no default 0 variable */
X   {
X      currentmethod.currentslot = 0; 
X   }
X   else
X   {
X      currentmethod.currentslot = 1; 
X   }
X}
X
Xvoid NewMethod(char* name, char* signature, int maxstack, int maxlocals)
X
X{
X   currentmethod.name_index = GenConst(CONSTANT_Utf8, name);
X   currentmethod.signature_index = GenConst(CONSTANT_Utf8, signature);
X   currentmethod.max_stack = maxstack;
X   currentmethod.max_locals = maxlocals;
X}
X
X
Xvoid EndMethod()
X{
X   FILE * myoutfp;
X   methodname * tempmethodname;
X   methodname * prevmethodname;
X   methodname * newmethodname;
X
X   /* add new method name to the list*/
X   tempmethodname = methodnameshead;
X   newmethodname = (methodname *) malloc(sizeof(methodname));
X   newmethodname->next = NULL;
X   if (tempmethodname == NULL)
X   {
X     methodnameshead = newmethodname;
X   }
X   else
X   {
X     while (tempmethodname != NULL)
X     {
X	prevmethodname = tempmethodname;
X	tempmethodname = tempmethodname->next;
X     }
X     prevmethodname->next = newmethodname;
X   }
X
X   /* create a temp file name and open a new file */
X   tmpnam(newmethodname->name); 
X   if ((myoutfp = fopen(newmethodname->name, "w")) == 0)
X     perror("cannot open file"), exit(1);
X   MethodDump(currentmethod,myoutfp);
X   fclose(myoutfp);
X}
X   
X
X/* maybe overload this for the case of constants */
Xvoid NewField(int access, char* name, char* signature, ArgType constantval)
X{
X   FieldCount++;
X   field[FieldCount].access_flags = access;
X   field[FieldCount].name_index = GenConst(CONSTANT_Utf8, name);
X   field[FieldCount].signature_index = GenConst(CONSTANT_Utf8, signature);
X   if (constantval.type != 0)  /* a constant was passed up */
X   {
X     GenConst(CONSTANT_Utf8,"ConstantValue"); /* will be referenced later */
X     switch (signature[0]) 
X     {
X       case 'B':
X       case 'C':
X       case 'I':
X       case 'S':
X       case 'Z':
X       {
X	 if (constantval.type != INTCONSTANT) 
X		oops("Constant type does not match field type.");
X	 field[FieldCount].constantvalue_index = 
X		GenConst(CONSTANT_Integer, (long)constantval.intval);
X	 break;
X       }
X       case 'F':
X       {
X	 if (constantval.type != FLOATCONSTANT) 
X		oops("Constant type does not match field type.");
X	 field[FieldCount].constantvalue_index = 
X		GenConst(CONSTANT_Float,constantval.floatval);
X	 break;
X       }
X       case 'J':
X       {
X	 if (constantval.type != LONGCONSTANT) 
X		oops("Constant type does not match field type.");
X	 field[FieldCount].constantvalue_index = 
X		GenConst(CONSTANT_Long,constantval.longval);
X	 break;
X       }
X       case 'D':
X       {
X	 if (constantval.type != DOUBLECONSTANT) 
X		oops("Constant type does not match field type.");
X	 field[FieldCount].constantvalue_index = 
X		GenConst(CONSTANT_Double,constantval.doubleval);
X	 break;
X       }
X       default:
X       {
X	 oops("Can't have a constant value for a field of this type.");
X       }
X     }
X   }
X   else
X   {
X     field[FieldCount].constantvalue_index = 0;
X   }
X}
X
X
X/*What exactly do start_pc and length mean?  Does length simply go to the last 
Xreference to that variable, or should this be user-defined? */ 
X
Xvoid NewLocalVar(char* name, char* signature)
X{
X   /* do we need to search to see if this variable has already been defined? */
X   short currentspot;
X   short tempslot;
X   currentmethod.LocalVarCounter++;
X   currentspot = currentmethod.LocalVarCounter;
X   if (name != NULL)
X   {
X      currentmethod.LocalVar[currentspot].name_index =
X				GenConst(CONSTANT_Utf8, name);
X      currentmethod.LocalVar[currentspot].name = 
X			(char *) malloc(strlen(name));
X      strcpy(currentmethod.LocalVar[currentspot].name, name);
X   }
X   else
X   {
X      currentmethod.LocalVar[currentspot].name_index = 0;
X      currentmethod.LocalVar[currentspot].name = NULL;
X   }
X   currentmethod.LocalVar[currentspot].signature_index =
X				GenConst(CONSTANT_Utf8, signature);
X   currentmethod.LocalVar[currentspot].signature = 
X			(char *) malloc(strlen(signature));
X   strcpy(currentmethod.LocalVar[currentspot].signature, signature);
X   currentmethod.LocalVar[currentspot].start_pc = -1; 
X   currentmethod.LocalVar[currentspot].length = 0;
X
X   /* assign the slot number then increment currentslot based on the
X      signature of this variable */
X   currentmethod.LocalVar[currentspot].slot = 
X		currentmethod.currentslot;
X   tempslot = currentmethod.currentslot;
X   if ((strcmp(signature, "J") ==0) || (strcmp(signature, "D") ==0))  
X      /* long or double so takes up two slots */
X   {
X      currentmethod.currentslot = tempslot +2;
X      //message("Incremented slot by 2.");
X   }
X   else 
X   {
X      currentmethod.currentslot = tempslot +1;
X      //message("Incremented slot by 1.");
X   }
X
X   GenConst(CONSTANT_Utf8, "LocalVariableTable");  /* note: don't need this if 
X					no local var table ever generated */
X}
X
Xvoid IncrementLocalVarSlot(char* signature)
X{
X   short tempslot;
X   tempslot = currentmethod.currentslot;
X   if ((strcmp(signature, "J") ==0) || (strcmp(signature, "D") ==0))  
X      /* long or double so takes up two slots */
X   {
X      currentmethod.currentslot = tempslot +2;
X      //message("Incremented slot by 2.");
X   }
X   else 
X   {
X      currentmethod.currentslot = tempslot +1;
X      //message("Incremented slot by 1.");
X   }
X}
X
Xchar* GetLocalVarSigFromSlot(int index)
X{
X   for(int i = 0; i <= currentmethod.LocalVarCounter &&
X                  currentmethod.LocalVar[i].slot != index; i++);
X   if (i > currentmethod.LocalVarCounter)
X	oops("Generic load/store instruction used, but no local variable found for this slot.");
X   return currentmethod.LocalVar[i].signature;
X}
X
Xshort GetLocalVar(char* name)
X{
X   for(int i = 0; i <= currentmethod.LocalVarCounter &&
X 		  (currentmethod.LocalVar[i].name == NULL ||
X		  strcmp(currentmethod.LocalVar[i].name,name) !=0); i++);
X   if (i > currentmethod.LocalVarCounter)
X	oops(ConsStrings("Local Variable not declared: ",name));
X   if (currentmethod.LocalVar[i].start_pc == -1)
X        currentmethod.LocalVar[i].start_pc =
X					currentmethod.CodeCounter;
X   currentmethod.LocalVar[i].length = currentmethod.CodeCounter - 
X				currentmethod.LocalVar[i].start_pc;
X   return currentmethod.LocalVar[i].slot;
X}
X
X
Xvoid DefineLabel(char* name)
X{
X   int i;
X   unresolvedindex* j;
X   unresolvedindex* todie;
X   int k;
X   long t1, t2, t3,t4;
X   int labelptr;
X   labelptr = -1;
X   for (i=0;i<currentmethod.LabelCounter;i++)
X   {
X     if (strcmp(name, currentmethod.Label[i].name) == 0)
X        labelptr = i;
X   }
X   if (labelptr >= 0) /*label with same name already found*/
X   {
X     if (currentmethod.Label[labelptr].index == -1)/*label not yet defined*/
X     {
X    	currentmethod.Label[labelptr].index 
X		= currentmethod.CodeCounter;
X	j = currentmethod.Label[labelptr].unresolvedindexhead;
X	while (j != NULL) /* fix all unresolved references */
X 	{
X 	  if((currentmethod.Code[j->location-1] == GetOpCode(IFEQ))
X 	   ||(currentmethod.Code[j->location-1] == GetOpCode(IFLT))
X 	   ||(currentmethod.Code[j->location-1] == GetOpCode(IFLE))
X 	   ||(currentmethod.Code[j->location-1] == GetOpCode(IFGT))
X 	   ||(currentmethod.Code[j->location-1] == GetOpCode(IFGE))
X 	   ||(currentmethod.Code[j->location-1] == GetOpCode(IFNE))
X 	   ||(currentmethod.Code[j->location-1] == GetOpCode(IFNULL))
X 	   ||(currentmethod.Code[j->location-1] == GetOpCode(IFNONNULL))
X 	   ||(currentmethod.Code[j->location-1] == GetOpCode(IF_ICMPEQ))
X 	   ||(currentmethod.Code[j->location-1] == GetOpCode(IF_ICMPNE))
X 	   ||(currentmethod.Code[j->location-1] == GetOpCode(IF_ICMPLT))
X 	   ||(currentmethod.Code[j->location-1] == GetOpCode(IF_ICMPGT))
X 	   ||(currentmethod.Code[j->location-1] == GetOpCode(IF_ICMPLE))
X 	   ||(currentmethod.Code[j->location-1] == GetOpCode(IF_ICMPGE))
X 	   ||(currentmethod.Code[j->location-1] == GetOpCode(IF_ACMPEQ))
X 	   ||(currentmethod.Code[j->location-1] == GetOpCode(IF_ACMPNE))
X 	   ||(currentmethod.Code[j->location-1] == GetOpCode(GOTO))
X 	   ||(currentmethod.Code[j->location-1] == GetOpCode(JSR)))
X	  {
X	    if ((currentmethod.CodeCounter-(j->location-1) > 32767)
X	     || (currentmethod.CodeCounter-(j->location-1) < -32768))
X		oops("instruction used label that's too far away.");
X	    copyshort2char(&currentmethod.Code[j->location],
X		(signed short) currentmethod.CodeCounter
X			       - (j->opcodelocation));
X	    todie = j;
X	    j = j->next;
X 	    free(todie);
X	  }
X	  else
X	  {
X	    copylong2char(&currentmethod.Code[j->location],
X			currentmethod.CodeCounter-(j->opcodelocation));
X	    todie = j;
X	    j = j->next;
X 	    free(todie);
X	  }
X	  currentmethod.Label[labelptr].unresolvedindexhead = NULL;
X      	}
X     }
X     else
X     {
X 	oops("label already defined!");
X     }
X   }
X   else /* label not yet defined */
X   {
X	currentmethod.Label[currentmethod.LabelCounter].name = name;
X	currentmethod.Label[currentmethod.LabelCounter].index = 
X		currentmethod.CodeCounter;
X	currentmethod.Label[currentmethod.LabelCounter].unresolvedindexhead = NULL;
X	currentmethod.LabelCounter++;
X        //message(ConsStrings("Label added: ", name));
X   }
X}
X
X
X/*This function returns the location of a label if it is defined.  If it is
X  not defined, it adds "location" to the list of unresolved references.
X  myopcodelocation is the offset from the beginning of the code of the
X  opcode that uses this label (used for calculating the real offset later).
X  mylocation is the offset from the beginning of the code where the label's
X  offset belongs.
X*/
Xsigned long GetLabel(char* name, long myopcodelocation, long mylocation)
X{
X   int i;
X   int labelptr;
X   long toreturn;
X   labelptr = -1;
X   unresolvedindex* lastindex;
X   for (i=0;i<currentmethod.LabelCounter;i++)
X   {
X     if (strcmp(name, currentmethod.Label[i].name) == 0)
X        labelptr = i;
X   }
X   if (labelptr >= 0)
X   {
X     if (currentmethod.Label[labelptr].index >= 0)
X     {
X	/* let's just return the index instead of the actual offset 
X	   (for cases like tableswitch and lookupswitch where the offset
X	    is calculated from a few bytes back, not just one. */
X        return currentmethod.Label[labelptr].index;
X     }
X     else /*add this to list of unresolved indexes*/ 
X     {
X	lastindex = currentmethod.Label[labelptr].unresolvedindexhead;
X	currentmethod.Label[labelptr].unresolvedindexhead =
X			(unresolvedindex*) malloc(sizeof(unresolvedindex));
X	currentmethod.Label[labelptr].unresolvedindexhead->location =
X			mylocation;
X	currentmethod.Label[labelptr].unresolvedindexhead->opcodelocation 
X			= myopcodelocation;
X	currentmethod.Label[labelptr].unresolvedindexhead->next =
X			lastindex;
X	return -1;
X     }
X   }
X   else /*put label in list with no index*/
X   {
X     currentmethod.Label[currentmethod.LabelCounter].name = name;
X     currentmethod.Label[currentmethod.LabelCounter].index = -1;
X     currentmethod.Label[currentmethod.LabelCounter].unresolvedindexhead 
X			= (unresolvedindex*) malloc(sizeof(unresolvedindex));
X     currentmethod.Label[currentmethod.LabelCounter].unresolvedindexhead->location 
X			= mylocation;
X     currentmethod.Label[currentmethod.LabelCounter].unresolvedindexhead->opcodelocation 
X			= myopcodelocation;
X     currentmethod.Label[currentmethod.LabelCounter].unresolvedindexhead->next 
X			= NULL; 
X     currentmethod.LabelCounter++;
X     return -1;
X   }
X}
X 
X
Xlookupentry* AddToLookupList(lookupentry* head, int mymatch, char* thelabel)
X{
X  lookupentry* toreturn;
X  toreturn = (lookupentry *) malloc(sizeof(lookupentry));
X  toreturn->match = mymatch;
X  toreturn->alabel = (char *) malloc(strlen(thelabel));
X  strcpy(toreturn->alabel,thelabel);
X  toreturn->next = head;
X  return toreturn;
X}
X	
Xtableentry* AddToTableList(tableentry* head, char* thelabel)
X{
X  tableentry* toreturn;
X  toreturn = (tableentry *) malloc(sizeof(tableentry));
X  toreturn->alabel = (char *) malloc(strlen(thelabel));
X  strcpy(toreturn->alabel,thelabel);
X  toreturn->next = head;
X  return toreturn;
X}
X
Xvoid AddToThrowsList(char* name)
X{
X  throwsentry* toadd;
X  toadd = (throwsentry*) malloc(sizeof(throwsentry));
X  toadd->exceptionclass = GenConst(CONSTANT_Class, name);
X  toadd->next = currentmethod.throwshead;
X  currentmethod.throwshead = toadd;
X  currentmethod.ThrowsCounter++;
X} 
X  
X
Xvoid AddToExceptionList(char* start_pc, char* end_pc, char* handler_pc,
X		   char* catch_type)
X{
X  exceptionentry* newexception;
X  exceptionentry* tempexception;
X  long int tempoffset;
X  newexception = (exceptionentry*) malloc(sizeof(exceptionentry));
X  tempoffset = GetLabel(start_pc, 0, 0);
X  if (tempoffset == -1) oops("Label not defined.");
X  if (tempoffset > 65536) oops("Offset to this label larger than 2 bytes.");
X  newexception->start_pc = tempoffset; 
X  tempoffset = GetLabel(end_pc, 0, 0);
X  if (tempoffset == -1) oops("Label not defined.");
X  if (tempoffset > 65536) oops("Offset to this label larger than 2 bytes.");
X  newexception->end_pc = tempoffset; 
X  tempoffset = GetLabel(handler_pc, 0, 0);
X  if (tempoffset == -1) oops("Label not defined.");
X  if (tempoffset > 65536) oops("Offset to this label larger than 2 bytes.");
X  newexception->handler_pc = tempoffset;
X  if (catch_type == NULL)
X  {
X    newexception->catch_type = 0;
X  }
X  else
X  { 
X    newexception->catch_type = GenConst(CONSTANT_Class, catch_type);
X  }
X  newexception->next = NULL;
X
X  /*insert into list*/
X  if (currentmethod.exceptionhead == NULL)
X  {
X    currentmethod.exceptionhead = newexception;
X  }
X  else
X  {
X    tempexception = currentmethod.exceptionhead;
X    for(;tempexception->next != NULL; tempexception = tempexception->next);
X    tempexception->next = newexception;
X  }
X  currentmethod.ExceptionsCounter++;
X}
X
Xvoid AddToLineNumberList(char* alabel, short line_number)
X{
X  linenumberentry* toadd;
X  linenumberentry* temp;
X  long tempoffset;
X  tempoffset = GetLabel(alabel, 0, 0);
X  if (tempoffset == -1) oops("Label not defined.");
X  if (tempoffset > 65536) oops("Offset to this label larger than 2 bytes.");
X  toadd = (linenumberentry*) malloc(sizeof(linenumberentry));
X  toadd->start_pc = tempoffset;
X  toadd->line_number = line_number;
X  toadd->next = NULL;
X  if (currentmethod.linenumberhead == NULL)
X  {
X    currentmethod.linenumberhead = toadd;
X  }
X  else
X  {
X    for(temp = currentmethod.linenumberhead; temp->next != NULL; temp = temp->next);
X    temp->next = toadd;
X  }
X  currentmethod.LineNumberCounter++;
X}
X
Xvoid AddToUserLocalVarList(char* startlabel, char* endlabel, char* signature,
X			   char* name, short slot)
X{
X  userlocalvarentry* toadd;
X  userlocalvarentry* temp;
X  long tempoffset;
X  toadd = (userlocalvarentry*) malloc(sizeof(userlocalvarentry));
X  tempoffset = GetLabel(startlabel, 0, 0);
X  if (tempoffset == -1) oops("Label not defined.");
X  if (tempoffset > 65536) oops("Offset to this label larger than 2 bytes.");
X  toadd->start_pc = tempoffset;
X  tempoffset = GetLabel(endlabel, 0, 0);
X  if (tempoffset == -1) oops("Label not defined.");
X  if (tempoffset > 65536) oops("Offset to this label larger than 2 bytes.");
X  toadd->length = tempoffset - toadd->start_pc;
X  toadd->name_index = GenConst(CONSTANT_Utf8,name);
X  toadd->signature_index = GenConst(CONSTANT_Utf8,signature);
X  toadd->slot = slot;
X  toadd->next = NULL;
X  if (currentmethod.userlocalvarhead == NULL)
X  {
X    currentmethod.userlocalvarhead = toadd;
X  }
X  else
X  {
X    for(temp = currentmethod.userlocalvarhead; temp->next != NULL; temp = temp->next);
X    temp->next = toadd;
X  }
X  currentmethod.UserLocalVarCounter++;
X}
X	
END_OF_FILE
if test 66728 -ne `wc -c <'gen.c'`; then
    echo shar: \"'gen.c'\" unpacked with wrong size!
fi
# end of 'gen.c'
fi
if test -f 'gram.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'gram.c'\"
else
echo shar: Extracting \"'gram.c'\" \(96763 characters\)
sed "s/^X//" >'gram.c' <<'END_OF_FILE'
X
X/*  A Bison parser, made from javaa.y with Bison version GNU Bison version 1.21
X  */
X
X#define YYBISON 1  /* Identify Bison output.  */
X
X#define	LABEL	258
X#define	IDENTIFIER	259
X#define	INTCONSTANT	260
X#define	LONGCONSTANT	261
X#define	FLOATCONSTANT	262
X#define	DOUBLECONSTANT	263
X#define	CHARCONSTANT	264
X#define	STRING_LITERAL	265
X#define	CLASS	266
X#define	EXTENDS	267
X#define	ACCESS	268
X#define	IMPLEMENTS	269
X#define	FIELD	270
X#define	METHOD	271
X#define	MAX_STACK	272
X#define	MAX_LOCALS	273
X#define	CODE	274
X#define	PUBLIC	275
X#define	PRIVATE	276
X#define	PROTECTED	277
X#define	ABSTRACT	278
X#define	FINAL	279
X#define	INTERFACE	280
X#define	STATIC	281
X#define	NATIVE	282
X#define	SYNCHRONIZED	283
X#define	TRANSIENT	284
X#define	VOLATILE	285
X#define	BYTE	286
X#define	CHAR	287
X#define	DOUBLE	288
X#define	FLOAT	289
X#define	INT	290
X#define	LONG	291
X#define	SHORT	292
X#define	BOOLEAN	293
X#define	VOID	294
X#define	DEFAULT	295
X#define	TO	296
X#define	EXCEPTIONS	297
X#define	SOURCEFILE	298
X#define	THROWS	299
X#define	LINENUMBERTABLE	300
X#define	LOCALVARIABLETABLE	301
X#define	ACC_PUBLIC	302
X#define	ACC_PRIVATE	303
X#define	ACC_PROTECTED	304
X#define	ACC_STATIC	305
X#define	ACC_FINAL	306
X#define	ACC_SYNCHRONIZED	307
X#define	ACC_VOLATILE	308
X#define	ACC_TRANSIENT	309
X#define	ACC_NATIVE	310
X#define	ACC_INTERFACE	311
X#define	ACC_ABSTRACT	312
X#define	AALOAD	313
X#define	AASTORE	314
X#define	ACONST_NULL	315
X#define	ALOAD_0	316
X#define	ALOAD_1	317
X#define	ALOAD_2	318
X#define	ALOAD_3	319
X#define	ANEWARRAY	320
X#define	ARETURN	321
X#define	ARRAYLENGTH	322
X#define	ASTORE_0	323
X#define	ASTORE_1	324
X#define	ASTORE_2	325
X#define	ASTORE_3	326
X#define	ATHROW	327
X#define	BALOAD	328
X#define	BASTORE	329
X#define	BIPUSH	330
X#define	CALOAD	331
X#define	CASTORE	332
X#define	CHECKCAST	333
X#define	D2F	334
X#define	D2I	335
X#define	D2L	336
X#define	DADD	337
X#define	DALOAD	338
X#define	DASTORE	339
X#define	DCMPG	340
X#define	DCMPL	341
X#define	DCONST_0	342
X#define	DCONST_1	343
X#define	DDIV	344
X#define	DLOAD_0	345
X#define	DLOAD_1	346
X#define	DLOAD_2	347
X#define	DLOAD_3	348
X#define	DMUL	349
X#define	DNEG	350
X#define	DREM	351
X#define	DRETURN	352
X#define	DSTORE_0	353
X#define	DSTORE_1	354
X#define	DSTORE_2	355
X#define	DSTORE_3	356
X#define	DSUB	357
X#define	DUP	358
X#define	DUP_X1	359
X#define	DUP_X2	360
X#define	DUP2	361
X#define	DUP2_X1	362
X#define	DUP2_X2	363
X#define	F2D	364
X#define	F2I	365
X#define	F2L	366
X#define	FADD	367
X#define	FALOAD	368
X#define	FASTORE	369
X#define	FCMPG	370
X#define	FCMPL	371
X#define	FCONST_0	372
X#define	FCONST_1	373
X#define	FCONST_2	374
X#define	FDIV	375
X#define	FLOAD_0	376
X#define	FLOAD_1	377
X#define	FLOAD_2	378
X#define	FLOAD_3	379
X#define	FMUL	380
X#define	FNEG	381
X#define	FREM	382
X#define	FRETURN	383
X#define	FSTORE_0	384
X#define	FSTORE_1	385
X#define	FSTORE_2	386
X#define	FSTORE_3	387
X#define	FSUB	388
X#define	GETFIELD	389
X#define	GETSTATIC	390
X#define	GOTO	391
X#define	GOTO_W	392
X#define	I2B	393
X#define	I2C	394
X#define	I2D	395
X#define	I2F	396
X#define	I2L	397
X#define	I2S	398
X#define	IADD	399
X#define	IALOAD	400
X#define	IAND	401
X#define	IASTORE	402
X#define	ICONST_0	403
X#define	ICONST_1	404
X#define	ICONST_2	405
X#define	ICONST_3	406
X#define	ICONST_4	407
X#define	ICONST_5	408
X#define	ICONST_M1	409
X#define	IDIV	410
X#define	IF_ACMPEQ	411
X#define	IF_ACMPNE	412
X#define	IF_ICMPEQ	413
X#define	IF_ICMPNE	414
X#define	IF_ICMPLT	415
X#define	IF_ICMPGE	416
X#define	IF_ICMPGT	417
X#define	IF_ICMPLE	418
X#define	IFEQ	419
X#define	IFNE	420
X#define	IFLT	421
X#define	IFGE	422
X#define	IFGT	423
X#define	IFLE	424
X#define	IFNONNULL	425
X#define	IFNULL	426
X#define	ILOAD_0	427
X#define	ILOAD_1	428
X#define	ILOAD_2	429
X#define	ILOAD_3	430
X#define	IMUL	431
X#define	INEG	432
X#define	IOR	433
X#define	IREM	434
X#define	IRETURN	435
X#define	ISHL	436
X#define	ISHR	437
X#define	ISTORE_0	438
X#define	ISTORE_1	439
X#define	ISTORE_2	440
X#define	ISTORE_3	441
X#define	ISUB	442
X#define	IUSHR	443
X#define	IXOR	444
X#define	JSR	445
X#define	JSR_W	446
X#define	L2D	447
X#define	L2F	448
X#define	L2I	449
X#define	LADD	450
X#define	LALOAD	451
X#define	LAND	452
X#define	LASTORE	453
X#define	LCMP	454
X#define	LCONST_0	455
X#define	LCONST_1	456
X#define	LDIV	457
X#define	LLOAD_0	458
X#define	LLOAD_1	459
X#define	LLOAD_2	460
X#define	LLOAD_3	461
X#define	LMUL	462
X#define	LNEG	463
X#define	LOR	464
X#define	LREM	465
X#define	LRETURN	466
X#define	LSHL	467
X#define	LSHR	468
X#define	LSTORE_0	469
X#define	LSTORE_1	470
X#define	LSTORE_2	471
X#define	LSTORE_3	472
X#define	LSUB	473
X#define	LUSHR	474
X#define	LXOR	475
X#define	MONITORENTER	476
X#define	MONITOREXIT	477
X#define	NOP	478
X#define	POP	479
X#define	POP2	480
X#define	RETURN	481
X#define	SALOAD	482
X#define	SASTORE	483
X#define	SWAP	484
X#define	IINC	485
X#define	INSTANCEOF	486
X#define	INVOKEINTERFACE	487
X#define	INVOKENONVIRTUAL	488
X#define	INVOKESTATIC	489
X#define	INVOKEVIRTUAL	490
X#define	LDC	491
X#define	LDC_W	492
X#define	LDC2_W	493
X#define	MULTIANEWARRAY	494
X#define	NEW	495
X#define	NEWARRAY	496
X#define	PUTFIELD	497
X#define	PUTSTATIC	498
X#define	SIPUSH	499
X#define	ILOAD	500
X#define	FLOAD	501
X#define	ALOAD	502
X#define	LLOAD	503
X#define	DLOAD	504
X#define	ISTORE	505
X#define	FSTORE	506
X#define	ASTORE	507
X#define	LSTORE	508
X#define	DSTORE	509
X#define	RET	510
X#define	WIDE	511
X#define	LOAD	512
X#define	STORE	513
X#define	LOOKUPSWITCH	514
X#define	TABLESWITCH	515
X
X#line 260 "javaa.y"
X
X#include <string.h>
X#include <stdlib.h>
X#include <stdio.h>
X#include "types.h"
X#include "utils.h"
X#include "build.h"
X#include "protos.h"
X#include "listing.h"
X
X#line 289 "javaa.y"
Xtypedef union {
X   Terminal        rk;
X   Terminal        NT;
X   Terminal        RK;
X   Terminal        Rk;
X
X   float           floatval;
X   double          doubleval;
X   char            charval;
X   int             intval;
X   long            longval;
X   char           *string;
X
X   BaseType        basetype;
X   StorageClass    storageclass;
X   TypeQualifier   typequalifier;
X   ArgType	   argtype;
X  
X   lookupentry *   lookuplistptr;
X   tableentry *    tablelistptr;
X
X   struct {
X	char* classname;
X	char* fieldmethodname;
X   }		classfieldmethodstruct;
X
X   struct _declinfo {
X      int   function;
X      int   ptrcount;
X      int   dimsize[7];
X      int   numdims;
X      char *name;
X   }               declinfo;
X   
X   struct {
X      TreeNode *formals;
X      struct _declinfo D;
X   }               funcstuff;
X
X   struct {
X      Type          T;
X      StorageClass  C;
X      TypeQualifier Q;
X   } declspecs;
X
X   struct {
X      Type          T;
X      StorageClass  C;
X      TypeQualifier Q;
X      TreeNode     *node;
X   } declspecsnode;
X
X   struct {
X      Type          T;
X      StorageClass  C;
X      TypeQualifier Q;
X      Symbol       *headsym;
X      Symbol       *prevsym;
X   } structdeclspecs;
X
X   struct {
X      Symbol   *headsym;
X      Symbol   *prevsym;
X   } headprevsym;
X
X   struct {
X      int       spec;
X      int       val;
X      char     *id;
X   } idspecval;
X
X   struct {
X      Symbol   *sym;
X      int       val;
X   } symval;
X
X   Type            typetype;
X
X   Symbol         *sym;
X
X   struct {
X      TreeNode *decl;
X      TreeNode *func;
X   } declfunc;
X
X   struct {
X      TreeNode *decl;
X      TreeNode *func;
X      TreeNode *exprs;
X      TreeNode *last;
X   } declfuncexprs;
X
X   struct {
X      TreeNode *exprs;
X      TreeNode *last;
X   } exprslast;
X
X   TreeNode       *node;
X} YYSTYPE;
X#line 389 "javaa.y"
X
X   static void     CheckStructDcl(Type,int);
X   static MimeType GenBlankMimeType();
X   static Type     GenBlankType();
X   static TreeNode *MakeBinOpSubTree(int, TreeNode *, TreeNode *);
X   static TreeNode *MakeUnOpSubTree(int, TreeNode *);
X   static TreeNode *MakeFuncSibs(TreeNode *, TreeNode *, TreeNode *,
X              TreeNode *, TreeNode *);
X   static TreeNode *GenEntryArgs(TreeNode *);
X
X#ifndef YYLTYPE
Xtypedef
X  struct yyltype
X    {
X      int timestamp;
X      int first_line;
X      int first_column;
X      int last_line;
X      int last_column;
X      char *text;
X   }
X  yyltype;
X
X#define YYLTYPE yyltype
X#endif
X
X#ifndef YYDEBUG
X#define YYDEBUG 1
X#endif
X
X#include <stdio.h>
X
X#ifndef __cplusplus
X#ifndef __STDC__
X#define const
X#endif
X#endif
X
X
X
X#define	YYFINAL		434
X#define	YYFLAG		-32768
X#define	YYNTBASE	271
X
X#define YYTRANSLATE(x) ((unsigned)(x) <= 515 ? yytranslate[x] : 341)
X
Xstatic const short yytranslate[] = {     0,
X     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
X     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
X     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
X     2,     2,     2,     2,     2,     2,     2,     2,     2,   265,
X   266,     2,     2,   267,     2,   263,     2,     2,     2,     2,
X     2,     2,     2,     2,     2,     2,     2,   270,     2,     2,
X   264,     2,     2,     2,     2,     2,     2,     2,     2,     2,
X     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
X     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
X   268,     2,   269,     2,     2,     2,     2,     2,     2,     2,
X     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
X     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
X     2,     2,   261,     2,   262,     2,     2,     2,     2,     2,
X     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
X     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
X     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
X     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
X     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
X     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
X     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
X     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
X     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
X     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
X     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
X     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
X     2,     2,     2,     2,     2,     1,     2,     3,     4,     5,
X     6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
X    16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
X    26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
X    36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
X    46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
X    56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
X    66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
X    76,    77,    78,    79,    80,    81,    82,    83,    84,    85,
X    86,    87,    88,    89,    90,    91,    92,    93,    94,    95,
X    96,    97,    98,    99,   100,   101,   102,   103,   104,   105,
X   106,   107,   108,   109,   110,   111,   112,   113,   114,   115,
X   116,   117,   118,   119,   120,   121,   122,   123,   124,   125,
X   126,   127,   128,   129,   130,   131,   132,   133,   134,   135,
X   136,   137,   138,   139,   140,   141,   142,   143,   144,   145,
X   146,   147,   148,   149,   150,   151,   152,   153,   154,   155,
X   156,   157,   158,   159,   160,   161,   162,   163,   164,   165,
X   166,   167,   168,   169,   170,   171,   172,   173,   174,   175,
X   176,   177,   178,   179,   180,   181,   182,   183,   184,   185,
X   186,   187,   188,   189,   190,   191,   192,   193,   194,   195,
X   196,   197,   198,   199,   200,   201,   202,   203,   204,   205,
X   206,   207,   208,   209,   210,   211,   212,   213,   214,   215,
X   216,   217,   218,   219,   220,   221,   222,   223,   224,   225,
X   226,   227,   228,   229,   230,   231,   232,   233,   234,   235,
X   236,   237,   238,   239,   240,   241,   242,   243,   244,   245,
X   246,   247,   248,   249,   250,   251,   252,   253,   254,   255,
X   256,   257,   258,   259,   260
X};
X
X#if YYDEBUG != 0
Xstatic const short yyprhs[] = {     0,
X     0,     1,     4,     7,     9,    10,    22,    27,    29,    30,
X    33,    34,    38,    40,    44,    46,    50,    52,    54,    55,
X    57,    58,    60,    61,    63,    64,    66,    67,    69,    70,
X    72,    73,    75,    76,    78,    79,    81,    84,    86,    88,
X    89,    92,    93,    96,    98,   101,   102,   109,   112,   115,
X   118,   121,   122,   127,   130,   131,   132,   133,   154,   157,
X   158,   161,   163,   166,   167,   169,   171,   173,   174,   178,
X   180,   182,   183,   187,   189,   191,   194,   197,   199,   201,
X   203,   205,   207,   209,   211,   213,   215,   219,   220,   226,
X   229,   231,   236,   238,   241,   242,   245,   247,   249,   252,
X   254,   256,   259,   263,   270,   273,   276,   284,   287,   290,
X   294,   301,   311,   315,   318,   320,   322,   324,   326,   328,
X   330,   332,   334,   336,   338,   340,   342,   344,   346,   348,
X   350,   352,   354,   356,   358,   360,   362,   364,   366,   368,
X   370,   372,   374,   376,   378,   380,   382,   384,   386,   388,
X   390,   392,   394,   396,   398,   400,   402,   404,   406,   408,
X   410,   412,   414,   416,   418,   420,   422,   424,   426,   428,
X   430,   432,   434,   436,   438,   440,   442,   444,   446,   448,
X   450,   452,   454,   456,   458,   460,   462,   464,   466,   468,
X   470,   472,   474,   476,   478,   480,   482,   484,   486,   488,
X   490,   492,   494,   496,   498,   500,   502,   504,   506,   508,
X   510,   512,   514,   516,   518,   520,   522,   524,   526,   528,
X   530,   532,   534,   536,   538,   540,   542,   544,   546,   548,
X   550,   552,   554,   556,   558,   560,   562,   564,   566,   568,
X   570,   572,   574,   576,   578,   580,   582,   584,   586,   588,
X   590,   592,   594,   596,   598,   600,   602,   604,   606,   608,
X   610,   612,   614,   616,   618,   620,   622,   624,   626,   628,
X   630,   632,   634,   636,   638,   640,   642,   644,   646,   648,
X   650,   652,   654,   656,   658,   660,   662,   664,   666,   668,
X   670,   672,   674,   676,   678,   680,   682,   684,   686,   688,
X   690,   692,   694,   696,   698,   700,   702,   704,   706,   708,
X   710,   712,   714,   719,   720,   723,   724,   726,   728,   730,
X   732,   734,   736,   738,   740,   742,   744,   746,   748,   750,
X   752,   757,   758,   764,   770,   771,   776,   777,   781,   782,
X   787,   788,   795,   796,   799
X};
X
Xstatic const short yyrhs[] = {    -1,
X   272,   273,     0,   274,   273,     0,   274,     0,     0,   276,
X   277,     4,   278,   292,   261,   294,   275,   298,   340,   262,
X     0,   282,   283,   284,   285,     0,    11,     0,     0,    12,
X   279,     0,     0,     4,   263,   279,     0,     4,     0,     4,
X   263,   281,     0,     4,     0,     4,   263,   281,     0,     4,
X     0,    23,     0,     0,    24,     0,     0,    20,     0,     0,
X    25,     0,     0,    26,     0,     0,    27,     0,     0,    28,
X     0,     0,    29,     0,     0,    30,     0,     0,    21,     0,
X    21,    22,     0,    22,     0,    20,     0,     0,    14,   293,
X     0,     0,   293,   279,     0,   279,     0,   294,   295,     0,
X     0,    15,   291,   297,   311,     4,   296,     0,   264,     5,
X     0,   264,     7,     0,   264,     6,     0,   264,     8,     0,
X     0,   286,   283,   289,   290,     0,   298,   299,     0,     0,
X     0,     0,    16,   291,   314,   300,   305,     4,   265,   308,
X   266,   302,    17,     5,   304,   301,   261,   317,   334,   336,
X   338,   262,     0,    44,   303,     0,     0,   303,   279,     0,
X   279,     0,    18,     5,     0,     0,   311,     0,    39,     0,
X   307,     0,     0,   311,   267,   307,     0,   311,     0,   309,
X     0,     0,   310,   267,   309,     0,   310,     0,   311,     0,
X   311,     4,     0,   312,   313,     0,    31,     0,    32,     0,
X    33,     0,    34,     0,    35,     0,    36,     0,    37,     0,
X    38,     0,   279,     0,   268,   269,   313,     0,     0,   286,
X   282,   283,   287,   288,     0,   311,     4,     0,   279,     0,
X   312,   268,   269,   313,     0,   318,     0,   318,   319,     0,
X     0,   320,   321,     0,   321,     0,   315,     0,   320,   315,
X     0,     3,     0,   322,     0,   323,   333,     0,   325,   311,
X   280,     0,   324,   305,   280,   265,   306,   266,     0,   326,
X   279,     0,    65,   316,     0,   232,   305,   280,   265,   306,
X   266,     5,     0,   327,     4,     0,   328,   329,     0,   230,
X   329,     5,     0,   259,    40,     4,   261,   330,   262,     0,
X   260,     5,    41,     5,    40,     4,   261,   331,   262,     0,
X   239,   316,     5,     0,   241,   332,     0,    58,     0,    59,
X     0,    60,     0,    61,     0,    62,     0,    63,     0,    64,
X     0,    66,     0,    67,     0,    68,     0,    69,     0,    70,
X     0,    71,     0,    72,     0,    73,     0,    74,     0,    76,
X     0,    77,     0,    79,     0,    80,     0,    81,     0,    82,
X     0,    83,     0,    84,     0,    85,     0,    86,     0,    87,
X     0,    88,     0,    89,     0,    90,     0,    91,     0,    92,
X     0,    93,     0,    94,     0,    95,     0,    96,     0,    97,
X     0,    98,     0,    99,     0,   100,     0,   101,     0,   102,
X     0,   103,     0,   104,     0,   105,     0,   106,     0,   107,
X     0,   108,     0,   109,     0,   110,     0,   111,     0,   112,
X     0,   113,     0,   114,     0,   115,     0,   116,     0,   117,
X     0,   118,     0,   119,     0,   120,     0,   121,     0,   122,
X     0,   123,     0,   124,     0,   125,     0,   126,     0,   127,
X     0,   128,     0,   129,     0,   130,     0,   131,     0,   132,
X     0,   133,     0,   138,     0,   139,     0,   140,     0,   141,
X     0,   142,     0,   143,     0,   144,     0,   145,     0,   146,
X     0,   147,     0,   148,     0,   149,     0,   150,     0,   151,
X     0,   152,     0,   153,     0,   154,     0,   155,     0,   172,
X     0,   173,     0,   174,     0,   175,     0,   176,     0,   177,
X     0,   178,     0,   179,     0,   180,     0,   181,     0,   182,
X     0,   183,     0,   184,     0,   185,     0,   186,     0,   187,
X     0,   188,     0,   189,     0,   192,     0,   193,     0,   194,
X     0,   195,     0,   196,     0,   197,     0,   198,     0,   199,
X     0,   200,     0,   201,     0,   202,     0,   203,     0,   204,
X     0,   205,     0,   206,     0,   207,     0,   208,     0,   209,
X     0,   210,     0,   211,     0,   212,     0,   213,     0,   214,
X     0,   215,     0,   216,     0,   217,     0,   218,     0,   219,
X     0,   220,     0,   221,     0,   222,     0,   223,     0,   224,
X     0,   225,     0,   226,     0,   227,     0,   228,     0,   229,
X     0,   256,     0,    75,     0,   236,     0,   237,     0,   238,
X     0,   244,     0,   234,     0,   233,     0,   235,     0,   134,
X     0,   135,     0,   242,     0,   243,     0,    78,     0,   231,
X     0,   240,     0,   136,     0,   137,     0,   156,     0,   157,
X     0,   158,     0,   159,     0,   160,     0,   161,     0,   162,
X     0,   163,     0,   164,     0,   165,     0,   166,     0,   167,
X     0,   168,     0,   169,     0,   170,     0,   171,     0,   190,
X     0,   191,     0,   245,     0,   246,     0,   247,     0,   248,
X     0,   249,     0,   250,     0,   251,     0,   252,     0,   253,
X     0,   254,     0,   255,     0,   257,     0,   258,     0,     5,
X     0,     4,     0,     5,   270,     4,   330,     0,     0,     4,
X   331,     0,     0,    38,     0,    32,     0,    34,     0,    33,
X     0,    31,     0,    37,     0,    35,     0,    36,     0,     4,
X     0,     5,     0,     6,     0,    10,     0,     7,     0,     8,
X     0,    42,   261,   335,   262,     0,     0,   335,     4,     4,
X     4,   279,     0,   335,     4,     4,     4,     5,     0,     0,
X    45,   261,   337,   262,     0,     0,   337,     4,     5,     0,
X     0,    46,   261,   339,   262,     0,     0,   339,     4,     4,
X   311,     4,     5,     0,     0,    43,    10,     0,     0
X};
X
X#endif
X
X#if YYDEBUG != 0
Xstatic const short yyrline[] = { 0,
X   403,   404,   407,   409,   412,   417,   421,   425,   427,   432,
X   434,   442,   446,   453,   459,   467,   473,   481,   483,   487,
X   489,   493,   495,   499,   501,   505,   507,   511,   513,   517,
X   519,   523,   525,   529,   531,   535,   537,   539,   541,   543,
X   547,   549,   553,   555,   560,   561,   564,   569,   573,   577,
X   581,   585,   591,   596,   597,   600,   603,   613,   621,   624,
X   627,   630,   634,   637,   641,   643,   652,   654,   657,   662,
X   668,   670,   673,   678,   681,   685,   690,   697,   699,   701,
X   703,   705,   707,   709,   711,   713,   721,   723,   727,   732,
X   737,   739,   744,   748,   750,   754,   756,   758,   760,   764,
X   768,   771,   774,   777,   783,   786,   789,   796,   799,   802,
X   805,   808,   812,   815,   820,   822,   824,   826,   828,   830,
X   832,   834,   836,   838,   840,   842,   844,   846,   848,   850,
X   852,   854,   856,   858,   860,   862,   864,   866,   868,   870,
X   872,   874,   876,   878,   880,   882,   884,   886,   888,   890,
X   892,   894,   896,   898,   900,   902,   904,   906,   908,   910,
X   912,   914,   916,   918,   920,   922,   924,   926,   928,   930,
X   932,   934,   936,   938,   940,   942,   944,   946,   948,   950,
X   952,   954,   956,   958,   960,   962,   964,   966,   968,   970,
X   972,   974,   976,   978,   980,   982,   984,   986,   988,   990,
X   992,   994,   996,   998,  1000,  1002,  1004,  1006,  1008,  1010,
X  1012,  1014,  1016,  1018,  1020,  1022,  1024,  1026,  1028,  1030,
X  1032,  1034,  1036,  1038,  1040,  1042,  1044,  1046,  1048,  1050,
X  1052,  1054,  1056,  1058,  1060,  1062,  1064,  1066,  1068,  1070,
X  1072,  1074,  1076,  1078,  1080,  1082,  1084,  1086,  1088,  1090,
X  1092,  1094,  1096,  1098,  1100,  1102,  1104,  1106,  1108,  1110,
X  1112,  1114,  1118,  1120,  1122,  1124,  1126,  1132,  1134,  1136,
X  1141,  1143,  1145,  1147,  1152,  1154,  1156,  1160,  1162,  1164,
X  1166,  1168,  1170,  1172,  1174,  1176,  1178,  1180,  1182,  1184,
X  1186,  1188,  1190,  1192,  1194,  1196,  1198,  1203,  1205,  1207,
X  1209,  1211,  1213,  1215,  1217,  1219,  1221,  1223,  1225,  1227,
X  1231,  1233,  1237,  1239,  1242,  1244,  1247,  1250,  1252,  1254,
X  1256,  1258,  1260,  1262,  1266,  1270,  1274,  1278,  1282,  1287,
X  1294,  1297,  1300,  1302,  1307,  1310,  1313,  1316,  1318,  1321,
X  1324,  1327,  1330,  1333,  1336
X};
X
Xstatic const char * const yytname[] = {   "$","error","$illegal.","LABEL","IDENTIFIER",
X"INTCONSTANT","LONGCONSTANT","FLOATCONSTANT","DOUBLECONSTANT","CHARCONSTANT",
X"STRING_LITERAL","CLASS","EXTENDS","ACCESS","IMPLEMENTS","FIELD","METHOD","MAX_STACK",
X"MAX_LOCALS","CODE","PUBLIC","PRIVATE","PROTECTED","ABSTRACT","FINAL","INTERFACE",
X"STATIC","NATIVE","SYNCHRONIZED","TRANSIENT","VOLATILE","BYTE","CHAR","DOUBLE",
X"FLOAT","INT","LONG","SHORT","BOOLEAN","VOID","DEFAULT","TO","EXCEPTIONS","SOURCEFILE",
X"THROWS","LINENUMBERTABLE","LOCALVARIABLETABLE","ACC_PUBLIC","ACC_PRIVATE","ACC_PROTECTED",
X"ACC_STATIC","ACC_FINAL","ACC_SYNCHRONIZED","ACC_VOLATILE","ACC_TRANSIENT","ACC_NATIVE",
X"ACC_INTERFACE","ACC_ABSTRACT","AALOAD","AASTORE","ACONST_NULL","ALOAD_0","ALOAD_1",
X"ALOAD_2","ALOAD_3","ANEWARRAY","ARETURN","ARRAYLENGTH","ASTORE_0","ASTORE_1",
X"ASTORE_2","ASTORE_3","ATHROW","BALOAD","BASTORE","BIPUSH","CALOAD","CASTORE",
X"CHECKCAST","D2F","D2I","D2L","DADD","DALOAD","DASTORE","DCMPG","DCMPL","DCONST_0",
X"DCONST_1","DDIV","DLOAD_0","DLOAD_1","DLOAD_2","DLOAD_3","DMUL","DNEG","DREM",
X"DRETURN","DSTORE_0","DSTORE_1","DSTORE_2","DSTORE_3","DSUB","DUP","DUP_X1",
X"DUP_X2","DUP2","DUP2_X1","DUP2_X2","F2D","F2I","F2L","FADD","FALOAD","FASTORE",
X"FCMPG","FCMPL","FCONST_0","FCONST_1","FCONST_2","FDIV","FLOAD_0","FLOAD_1",
X"FLOAD_2","FLOAD_3","FMUL","FNEG","FREM","FRETURN","FSTORE_0","FSTORE_1","FSTORE_2",
X"FSTORE_3","FSUB","GETFIELD","GETSTATIC","GOTO","GOTO_W","I2B","I2C","I2D","I2F",
X"I2L","I2S","IADD","IALOAD","IAND","IASTORE","ICONST_0","ICONST_1","ICONST_2",
X"ICONST_3","ICONST_4","ICONST_5","ICONST_M1","IDIV","IF_ACMPEQ","IF_ACMPNE",
X"IF_ICMPEQ","IF_ICMPNE","IF_ICMPLT","IF_ICMPGE","IF_ICMPGT","IF_ICMPLE","IFEQ",
X"IFNE","IFLT","IFGE","IFGT","IFLE","IFNONNULL","IFNULL","ILOAD_0","ILOAD_1",
X"ILOAD_2","ILOAD_3","IMUL","INEG","IOR","IREM","IRETURN","ISHL","ISHR","ISTORE_0",
X"ISTORE_1","ISTORE_2","ISTORE_3","ISUB","IUSHR","IXOR","JSR","JSR_W","L2D","L2F",
X"L2I","LADD","LALOAD","LAND","LASTORE","LCMP","LCONST_0","LCONST_1","LDIV","LLOAD_0",
X"LLOAD_1","LLOAD_2","LLOAD_3","LMUL","LNEG","LOR","LREM","LRETURN","LSHL","LSHR",
X"LSTORE_0","LSTORE_1","LSTORE_2","LSTORE_3","LSUB","LUSHR","LXOR","MONITORENTER",
X"MONITOREXIT","NOP","POP","POP2","RETURN","SALOAD","SASTORE","SWAP","IINC","INSTANCEOF",
X"INVOKEINTERFACE","INVOKENONVIRTUAL","INVOKESTATIC","INVOKEVIRTUAL","LDC","LDC_W",
X"LDC2_W","MULTIANEWARRAY","NEW","NEWARRAY","PUTFIELD","PUTSTATIC","SIPUSH","ILOAD",
X"FLOAD","ALOAD","LLOAD","DLOAD","ISTORE","FSTORE","ASTORE","LSTORE","DSTORE",
X"RET","WIDE","LOAD","STORE","LOOKUPSWITCH","TABLESWITCH","'{'","'}'","'.'","'='",
X"'('","')'","','","'['","']'","':'","compilation_unit","@1","classlist","class",
X"@2","class_modifiers","classword","superclass","classname","classfieldmethodname",
X"endname","abstract_entry","final_entry","public_entry","interface_entry","static_entry",
X"native_entry","synchronized_entry","transient_entry","volatile_entry","access_specifier",
X"interfaces","interfacelist","fieldlist","field","fieldconstant","field_modifiers",
X"methodlist","method","@3","@4","throwslist","throwsentries","max_locals_decl",
X"returntype","arguments","argumentlist","methodarguments","methodargumentlist",
X"methodargument","type","basetype","arrayadder","method_modifiers","localvar",
X"arrayorclassname","code","op_list","op_line","label","op","no_arg_op","one_arg_op",
X"methodref_arg_op","fieldref_arg_op","class_arg_op","label_arg_op","localvar_arg_op",
X"localvar_arg","lookuplist","tablelist","newarraytype","argument","exceptiontable",
X"exceptionslist","linenumbertable","linenumberlist","localvariabletable","localvariablelist",
X"sourcefilename",""
X};
X#endif
X
Xstatic const short yyr1[] = {     0,
X   272,   271,   273,   273,   275,   274,   276,   277,   277,   278,
X   278,   279,   279,   280,   280,   281,   281,   282,   282,   283,
X   283,   284,   284,   285,   285,   286,   286,   287,   287,   288,
X   288,   289,   289,   290,   290,   291,   291,   291,   291,   291,
X   292,   292,   293,   293,   294,   294,   295,   296,   296,   296,
X   296,   296,   297,   298,   298,   300,   301,   299,   302,   302,
X   303,   303,   304,   304,   305,   305,   306,   306,   307,   307,
X   308,   308,   309,   309,   310,   310,   311,   312,   312,   312,
X   312,   312,   312,   312,   312,   312,   313,   313,   314,   315,
X   316,   316,   317,   318,   318,   319,   319,   319,   319,   320,
X   321,   321,   321,   321,   321,   321,   321,   321,   321,   321,
X   321,   321,   321,   321,   322,   322,   322,   322,   322,   322,
X   322,   322,   322,   322,   322,   322,   322,   322,   322,   322,
X   322,   322,   322,   322,   322,   322,   322,   322,   322,   322,
X   322,   322,   322,   322,   322,   322,   322,   322,   322,   322,
X   322,   322,   322,   322,   322,   322,   322,   322,   322,   322,
X   322,   322,   322,   322,   322,   322,   322,   322,   322,   322,
X   322,   322,   322,   322,   322,   322,   322,   322,   322,   322,
X   322,   322,   322,   322,   322,   322,   322,   322,   322,   322,
X   322,   322,   322,   322,   322,   322,   322,   322,   322,   322,
X   322,   322,   322,   322,   322,   322,   322,   322,   322,   322,
X   322,   322,   322,   322,   322,   322,   322,   322,   322,   322,
X   322,   322,   322,   322,   322,   322,   322,   322,   322,   322,
X   322,   322,   322,   322,   322,   322,   322,   322,   322,   322,
X   322,   322,   322,   322,   322,   322,   322,   322,   322,   322,
X   322,   322,   322,   322,   322,   322,   322,   322,   322,   322,
X   322,   322,   323,   323,   323,   323,   323,   324,   324,   324,
X   325,   325,   325,   325,   326,   326,   326,   327,   327,   327,
X   327,   327,   327,   327,   327,   327,   327,   327,   327,   327,
X   327,   327,   327,   327,   327,   327,   327,   328,   328,   328,
X   328,   328,   328,   328,   328,   328,   328,   328,   328,   328,
X   329,   329,   330,   330,   331,   331,   332,   332,   332,   332,
X   332,   332,   332,   332,   333,   333,   333,   333,   333,   333,
X   334,   334,   335,   335,   335,   336,   336,   337,   337,   338,
X   338,   339,   339,   340,   340
X};
X
Xstatic const short yyr2[] = {     0,
X     0,     2,     2,     1,     0,    11,     4,     1,     0,     2,
X     0,     3,     1,     3,     1,     3,     1,     1,     0,     1,
X     0,     1,     0,     1,     0,     1,     0,     1,     0,     1,
X     0,     1,     0,     1,     0,     1,     2,     1,     1,     0,
X     2,     0,     2,     1,     2,     0,     6,     2,     2,     2,
X     2,     0,     4,     2,     0,     0,     0,    20,     2,     0,
X     2,     1,     2,     0,     1,     1,     1,     0,     3,     1,
X     1,     0,     3,     1,     1,     2,     2,     1,     1,     1,
X     1,     1,     1,     1,     1,     1,     3,     0,     5,     2,
X     1,     4,     1,     2,     0,     2,     1,     1,     2,     1,
X     1,     2,     3,     6,     2,     2,     7,     2,     2,     3,
X     6,     9,     3,     2,     1,     1,     1,     1,     1,     1,
X     1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
X     1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
X     1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
X     1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
X     1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
X     1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
X     1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
X     1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
X     1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
X     1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
X     1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
X     1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
X     1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
X     1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
X     1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
X     1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
X     1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
X     1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
X     1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
X     1,     1,     4,     0,     2,     0,     1,     1,     1,     1,
X     1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
X     4,     0,     5,     5,     0,     4,     0,     3,     0,     4,
X     0,     6,     0,     2,     0
X};
X
Xstatic const short yydefact[] = {     1,
X    19,    18,     2,    19,     9,    21,     3,     8,     0,    20,
X    23,    11,    22,    25,     0,    42,    24,     7,    13,    10,
X     0,     0,     0,    44,    41,    46,    12,    43,     5,    40,
X    55,    45,    39,    36,    38,    27,   345,    37,    26,    21,
X     0,    40,     0,    54,     0,    33,    78,    79,    80,    81,
X    82,    83,    84,    85,    86,     0,    88,    27,   344,     6,
X    32,    35,    52,     0,    77,    19,    56,    34,    53,     0,
X    47,    88,    21,     0,    48,    50,    49,    51,    87,    29,
X    66,     0,    65,    28,    31,     0,    30,    89,    72,     0,
X    71,    74,    75,    60,     0,    76,     0,     0,    73,    62,
X    59,     0,    61,    64,     0,    57,    63,     0,    95,   332,
X    93,     0,   337,   100,   115,   116,   117,   118,   119,   120,
X   121,     0,   122,   123,   124,   125,   126,   127,   128,   129,
X   130,   263,   131,   132,   275,   133,   134,   135,   136,   137,
X   138,   139,   140,   141,   142,   143,   144,   145,   146,   147,
X   148,   149,   150,   151,   152,   153,   154,   155,   156,   157,
X   158,   159,   160,   161,   162,   163,   164,   165,   166,   167,
X   168,   169,   170,   171,   172,   173,   174,   175,   176,   177,
X   178,   179,   180,   181,   182,   183,   184,   185,   186,   187,
X   271,   272,   278,   279,   188,   189,   190,   191,   192,   193,
X   194,   195,   196,   197,   198,   199,   200,   201,   202,   203,
X   204,   205,   280,   281,   282,   283,   284,   285,   286,   287,
X   288,   289,   290,   291,   292,   293,   294,   295,   206,   207,
X   208,   209,   210,   211,   212,   213,   214,   215,   216,   217,
X   218,   219,   220,   221,   222,   223,   296,   297,   224,   225,
X   226,   227,   228,   229,   230,   231,   232,   233,   234,   235,
X   236,   237,   238,   239,   240,   241,   242,   243,   244,   245,
X   246,   247,   248,   249,   250,   251,   252,   253,   254,   255,
X   256,   257,   258,   259,   260,   261,     0,   276,     0,   269,
X   268,   270,   264,   265,   266,     0,   277,     0,   273,   274,
X   267,   298,   299,   300,   301,   302,   303,   304,   305,   306,
X   307,   308,   262,   309,   310,     0,     0,     0,    98,    94,
X     0,    97,   101,     0,     0,     0,     0,     0,     0,   335,
X     0,   341,    91,     0,   106,   312,   311,     0,     0,     0,
X   321,   318,   320,   319,   323,   324,   322,   317,   114,     0,
X     0,    90,    99,    96,   325,   326,   327,   329,   330,   328,
X   102,     0,     0,   105,   108,   109,     0,   339,     0,     0,
X     0,   110,    15,     0,   113,     0,     0,     0,   103,     0,
X   331,     0,   343,    58,    88,     0,    68,   314,     0,    68,
X     0,     0,   336,     0,    92,    17,    14,     0,    67,    70,
X     0,     0,     0,     0,     0,   338,     0,   340,     0,     0,
X     0,     0,   111,     0,   104,   334,   333,     0,    16,   107,
X    69,   314,   316,     0,   313,   316,     0,     0,   315,   112,
X   342,     0,     0,     0
X};
X
Xstatic const short yydefgoto[] = {   432,
X     1,     3,     4,    31,     5,     9,    16,    55,   374,   397,
X     6,    11,    14,    18,    40,    85,    88,    62,    69,    36,
X    22,    25,    29,    32,    71,    41,    37,    44,    74,   108,
X    98,   101,   106,    82,   398,   399,    90,    91,    92,    83,
X    57,    65,    67,   319,   335,   110,   111,   320,   321,   322,
X   323,   324,   325,   326,   327,   328,   329,   338,   402,   427,
X   349,   361,   113,   367,   332,   382,   370,   394,    45
X};
X
Xstatic const short yypact[] = {-32768,
X     4,-32768,-32768,    13,    32,     5,-32768,-32768,    45,-32768,
X    11,    41,-32768,    29,    51,    52,-32768,-32768,  -196,-32768,
X    51,  -193,    51,-32768,    51,-32768,-32768,-32768,    54,    20,
X-32768,-32768,-32768,    48,-32768,    55,    -4,-32768,-32768,     5,
X    42,    20,    61,-32768,  -179,    56,-32768,-32768,-32768,-32768,
X-32768,-32768,-32768,-32768,-32768,    80,  -181,    55,-32768,-32768,
X-32768,    58,  -175,  -178,-32768,     4,-32768,-32768,-32768,    27,
X-32768,  -181,     5,    26,-32768,-32768,-32768,-32768,-32768,    63,
X-32768,    88,-32768,-32768,    65,  -171,-32768,-32768,    42,  -170,
X-32768,  -172,    93,    57,    42,-32768,    51,    81,-32768,-32768,
X    51,    94,-32768,    82,    97,-32768,-32768,  -158,-32768,    62,
X   333,  -156,    64,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
X-32768,    42,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
X-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
X-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
X-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
X-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
X-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
X-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
X-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
X-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
X-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
X-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
X-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
X-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
X-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
X-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
X-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
X-32768,-32768,-32768,-32768,-32768,-32768,    33,-32768,    26,-32768,
X-32768,-32768,-32768,-32768,-32768,    42,-32768,   -17,-32768,-32768,
X-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
X-32768,-32768,-32768,-32768,-32768,    66,   103,   106,-32768,-32768,
X   590,-32768,-32768,    18,    26,    42,    51,   107,    33,-32768,
X  -149,    67,  -154,  -153,-32768,-32768,-32768,   111,   113,   114,
X-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,   116,
X    77,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
X-32768,   113,   113,-32768,-32768,-32768,    -1,-32768,  -140,  -139,
X  -147,-32768,  -138,  -141,-32768,  -135,   122,  -137,-32768,   125,
X-32768,     0,-32768,-32768,  -181,   126,    42,   127,    91,    42,
X   129,   130,-32768,     1,-32768,  -129,-32768,  -130,-32768,  -128,
X  -133,  -124,   136,  -125,    43,-32768,   138,-32768,   126,   139,
X    42,   141,-32768,  -118,-32768,-32768,-32768,    42,-32768,-32768,
X-32768,   127,   142,   143,-32768,   142,  -114,   144,-32768,-32768,
X-32768,   150,   151,-32768
X};
X
Xstatic const short yypgoto[] = {-32768,
X-32768,   148,-32768,-32768,-32768,-32768,-32768,   -15,  -311,  -256,
X    89,   -29,-32768,-32768,    96,-32768,-32768,-32768,-32768,   115,
X-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
X-32768,-32768,-32768,  -280,  -234,  -253,-32768,    68,-32768,   -39,
X  -115,   -71,-32768,  -162,  -136,-32768,-32768,-32768,-32768,  -160,
X-32768,-32768,-32768,-32768,-32768,-32768,-32768,  -167,  -258,  -261,
X-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768
X};
X
X
X#define	YYLAST		850
X
X
Xstatic const short yytable[] = {    20,
X    79,    56,   380,   392,   407,    24,   334,    27,   339,    28,
X    46,    42,    -4,   341,   342,   343,   344,   345,   346,   347,
X   348,   355,   356,   357,   358,   359,     2,   360,    10,    19,
X    13,    75,    76,    77,    78,     2,   336,   337,    43,    33,
X    34,    35,     8,    80,   362,    19,    19,   416,    12,    93,
X   378,   379,    15,    17,    19,    93,    47,    48,    49,    50,
X    51,    52,    53,    54,    81,    21,    23,    26,    30,    38,
X    59,   318,    47,    48,    49,    50,    51,    52,    53,    54,
X    39,   100,    60,    63,    61,   103,    64,    68,    70,    84,
X    72,    86,    87,    89,    95,    94,    96,   102,   104,   105,
X    97,   107,   109,   112,   330,   350,   333,   351,   331,   352,
X   365,   368,   369,   -86,   371,   372,   373,   377,   375,   376,
X   383,   385,   384,   387,   386,   388,   389,   390,   391,   396,
X   403,   401,   405,   409,   406,   410,   412,   413,   411,   414,
X   415,   418,   423,   420,   422,   426,   428,   430,   431,   433,
X   434,     7,   419,    66,    73,   404,    58,   421,   353,   340,
X   354,   366,    99,   425,   429,     0,     0,     0,     0,     0,
X     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
X   334,     0,     0,     0,     0,     0,     0,     0,     0,     0,
X     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
X     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
X     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
X     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
X     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
X     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
X     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
X   381,   393,   408,     0,     0,     0,     0,     0,     0,     0,
X     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
X   333,   318,     0,     0,     0,     0,   363,     0,     0,     0,
X     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
X     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
X     0,   364,     0,   395,     0,     0,     0,     0,     0,     0,
X     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
X     0,     0,     0,     0,     0,   114,    19,     0,     0,     0,
X     0,     0,     0,     0,     0,     0,     0,   400,     0,     0,
X   400,     0,     0,     0,     0,     0,     0,     0,     0,     0,
X     0,     0,     0,    47,    48,    49,    50,    51,    52,    53,
X    54,   400,     0,     0,     0,     0,     0,     0,   424,     0,
X     0,     0,     0,     0,     0,     0,     0,     0,     0,   417,
X   115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
X   125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
X   135,   136,   137,   138,   139,   140,   141,   142,   143,   144,
X   145,   146,   147,   148,   149,   150,   151,   152,   153,   154,
X   155,   156,   157,   158,   159,   160,   161,   162,   163,   164,
X   165,   166,   167,   168,   169,   170,   171,   172,   173,   174,
X   175,   176,   177,   178,   179,   180,   181,   182,   183,   184,
X   185,   186,   187,   188,   189,   190,   191,   192,   193,   194,
X   195,   196,   197,   198,   199,   200,   201,   202,   203,   204,
X   205,   206,   207,   208,   209,   210,   211,   212,   213,   214,
X   215,   216,   217,   218,   219,   220,   221,   222,   223,   224,
X   225,   226,   227,   228,   229,   230,   231,   232,   233,   234,
X   235,   236,   237,   238,   239,   240,   241,   242,   243,   244,
X   245,   246,   247,   248,   249,   250,   251,   252,   253,   254,
X   255,   256,   257,   258,   259,   260,   261,   262,   263,   264,
X   265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
X   275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
X   285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
X   295,   296,   297,   298,   299,   300,   301,   302,   303,   304,
X   305,   306,   307,   308,   309,   310,   311,   312,   313,   314,
X   315,   316,   317,    19,     0,     0,     0,     0,     0,     0,
X     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
X     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
X    47,    48,    49,    50,    51,    52,    53,    54,     0,     0,
X     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
X     0,     0,     0,     0,     0,     0,     0,   115,   116,   117,
X   118,   119,   120,   121,   122,   123,   124,   125,   126,   127,
X   128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
X   138,   139,   140,   141,   142,   143,   144,   145,   146,   147,
X   148,   149,   150,   151,   152,   153,   154,   155,   156,   157,
X   158,   159,   160,   161,   162,   163,   164,   165,   166,   167,
X   168,   169,   170,   171,   172,   173,   174,   175,   176,   177,
X   178,   179,   180,   181,   182,   183,   184,   185,   186,   187,
X   188,   189,   190,   191,   192,   193,   194,   195,   196,   197,
X   198,   199,   200,   201,   202,   203,   204,   205,   206,   207,
X   208,   209,   210,   211,   212,   213,   214,   215,   216,   217,
X   218,   219,   220,   221,   222,   223,   224,   225,   226,   227,
X   228,   229,   230,   231,   232,   233,   234,   235,   236,   237,
X   238,   239,   240,   241,   242,   243,   244,   245,   246,   247,
X   248,   249,   250,   251,   252,   253,   254,   255,   256,   257,
X   258,   259,   260,   261,   262,   263,   264,   265,   266,   267,
X   268,   269,   270,   271,   272,   273,   274,   275,   276,   277,
X   278,   279,   280,   281,   282,   283,   284,   285,   286,   287,
X   288,   289,   290,   291,   292,   293,   294,   295,   296,   297,
X   298,   299,   300,   301,   302,   303,   304,   305,   306,   307,
X   308,   309,   310,   311,   312,   313,   314,   315,   316,   317
X};
X
Xstatic const short yycheck[] = {    15,
X    72,    41,     4,     4,     4,    21,   122,    23,   289,    25,
X    40,    16,     0,    31,    32,    33,    34,    35,    36,    37,
X    38,     4,     5,     6,     7,     8,    23,    10,    24,     4,
X    20,     5,     6,     7,     8,    23,     4,     5,    43,    20,
X    21,    22,    11,    73,   325,     4,     4,     5,     4,    89,
X   362,   363,    12,    25,     4,    95,    31,    32,    33,    34,
X    35,    36,    37,    38,    39,    14,   263,   261,    15,    22,
X    10,   111,    31,    32,    33,    34,    35,    36,    37,    38,
X    26,    97,   262,     4,    29,   101,   268,    30,   264,    27,
X   269,     4,    28,   265,   267,   266,     4,    17,     5,    18,
X    44,     5,   261,    42,   261,    40,   122,     5,    45,     4,
X     4,   261,    46,   268,   268,     5,     4,    41,     5,     4,
X   261,   269,   262,   265,   263,   261,     5,   265,     4,     4,
X    40,     5,     4,   263,     5,   266,   270,   262,   267,     4,
X   266,     4,   261,     5,     4,     4,     4,   262,     5,     0,
X     0,     4,   409,    58,    66,   390,    42,   411,   321,   296,
X   321,   329,    95,   422,   426,    -1,    -1,    -1,    -1,    -1,
X    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
X   296,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
X    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
X    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
X    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
X    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
X    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
X    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
X    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
X   262,   262,   262,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
X    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
X   296,   321,    -1,    -1,    -1,    -1,   326,    -1,    -1,    -1,
X    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
X    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
X    -1,   327,    -1,   385,    -1,    -1,    -1,    -1,    -1,    -1,
X    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
X    -1,    -1,    -1,    -1,    -1,     3,     4,    -1,    -1,    -1,
X    -1,    -1,    -1,    -1,    -1,    -1,    -1,   387,    -1,    -1,
X   390,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
X    -1,    -1,    -1,    31,    32,    33,    34,    35,    36,    37,
X    38,   411,    -1,    -1,    -1,    -1,    -1,    -1,   418,    -1,
X    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   405,
X    58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
X    68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
X    78,    79,    80,    81,    82,    83,    84,    85,    86,    87,
X    88,    89,    90,    91,    92,    93,    94,    95,    96,    97,
X    98,    99,   100,   101,   102,   103,   104,   105,   106,   107,
X   108,   109,   110,   111,   112,   113,   114,   115,   116,   117,
X   118,   119,   120,   121,   122,   123,   124,   125,   126,   127,
X   128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
X   138,   139,   140,   141,   142,   143,   144,   145,   146,   147,
X   148,   149,   150,   151,   152,   153,   154,   155,   156,   157,
X   158,   159,   160,   161,   162,   163,   164,   165,   166,   167,
X   168,   169,   170,   171,   172,   173,   174,   175,   176,   177,
X   178,   179,   180,   181,   182,   183,   184,   185,   186,   187,
X   188,   189,   190,   191,   192,   193,   194,   195,   196,   197,
X   198,   199,   200,   201,   202,   203,   204,   205,   206,   207,
X   208,   209,   210,   211,   212,   213,   214,   215,   216,   217,
X   218,   219,   220,   221,   222,   223,   224,   225,   226,   227,
X   228,   229,   230,   231,   232,   233,   234,   235,   236,   237,
X   238,   239,   240,   241,   242,   243,   244,   245,   246,   247,
X   248,   249,   250,   251,   252,   253,   254,   255,   256,   257,
X   258,   259,   260,     4,    -1,    -1,    -1,    -1,    -1,    -1,
X    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
X    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
X    31,    32,    33,    34,    35,    36,    37,    38,    -1,    -1,
X    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
X    -1,    -1,    -1,    -1,    -1,    -1,    -1,    58,    59,    60,
X    61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
X    71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
X    81,    82,    83,    84,    85,    86,    87,    88,    89,    90,
X    91,    92,    93,    94,    95,    96,    97,    98,    99,   100,
X   101,   102,   103,   104,   105,   106,   107,   108,   109,   110,
X   111,   112,   113,   114,   115,   116,   117,   118,   119,   120,
X   121,   122,   123,   124,   125,   126,   127,   128,   129,   130,
X   131,   132,   133,   134,   135,   136,   137,   138,   139,   140,
X   141,   142,   143,   144,   145,   146,   147,   148,   149,   150,
X   151,   152,   153,   154,   155,   156,   157,   158,   159,   160,
X   161,   162,   163,   164,   165,   166,   167,   168,   169,   170,
X   171,   172,   173,   174,   175,   176,   177,   178,   179,   180,
X   181,   182,   183,   184,   185,   186,   187,   188,   189,   190,
X   191,   192,   193,   194,   195,   196,   197,   198,   199,   200,
X   201,   202,   203,   204,   205,   206,   207,   208,   209,   210,
X   211,   212,   213,   214,   215,   216,   217,   218,   219,   220,
X   221,   222,   223,   224,   225,   226,   227,   228,   229,   230,
X   231,   232,   233,   234,   235,   236,   237,   238,   239,   240,
X   241,   242,   243,   244,   245,   246,   247,   248,   249,   250,
X   251,   252,   253,   254,   255,   256,   257,   258,   259,   260
X};
X/* -*-C-*-  Note some compilers choke on comments on `#line' lines.  */
X#line 3 "/pkg/gnu/lib/bison.simple"
X
X/* Skeleton output parser for bison,
X   Copyright (C) 1984, 1989, 1990 Bob Corbett and Richard Stallman
X
X   This program is free software; you can redistribute it and/or modify
X   it under the terms of the GNU General Public License as published by
X   the Free Software Foundation; either version 1, or (at your option)
X   any later version.
X
X   This program is distributed in the hope that it will be useful,
X   but WITHOUT ANY WARRANTY; without even the implied warranty of
X   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
X   GNU General Public License for more details.
X
X   You should have received a copy of the GNU General Public License
X   along with this program; if not, write to the Free Software
X   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
X
X
X#ifndef alloca
X#ifdef __GNUC__
X#define alloca __builtin_alloca
X#else /* not GNU C.  */
X#if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) || defined (__sparc) || defined (__sgi)
X#include <alloca.h>
X#else /* not sparc */
X#if defined (MSDOS) && !defined (__TURBOC__)
X#include <malloc.h>
X#else /* not MSDOS, or __TURBOC__ */
X#if defined(_AIX)
X#include <malloc.h>
X #pragma alloca
X#else /* not MSDOS, __TURBOC__, or _AIX */
X#ifdef __hpux
X#ifdef __cplusplus
Xextern "C" {
Xvoid *alloca (unsigned int);
X};
X#else /* not __cplusplus */
Xvoid *alloca (unsigned int);
X#endif /* not __cplusplus */
X#endif /* __hpux */
X#endif /* not _AIX */
X#endif /* not MSDOS, or __TURBOC__ */
X#endif /* not sparc.  */
X#endif /* not GNU C.  */
X#endif /* alloca not defined.  */
X
X/* This is the parser code that is written into each bison parser
X  when the %semantic_parser declaration is not specified in the grammar.
X  It was written by Richard Stallman by simplifying the hairy parser
X  used when %semantic_parser is specified.  */
X
X/* Note: there must be only one dollar sign in this file.
X   It is replaced by the list of actions, each action
X   as one case of the switch.  */
X
X#define yyerrok		(yyerrstatus = 0)
X#define yyclearin	(yychar = YYEMPTY)
X#define YYEMPTY		-2
X#define YYEOF		0
X#define YYACCEPT	return(0)
X#define YYABORT 	return(1)
X#define YYERROR		goto yyerrlab1
X/* Like YYERROR except do call yyerror.
X   This remains here temporarily to ease the
X   transition to the new meaning of YYERROR, for GCC.
X   Once GCC version 2 has supplanted version 1, this can go.  */
X#define YYFAIL		goto yyerrlab
X#define YYRECOVERING()  (!!yyerrstatus)
X#define YYBACKUP(token, value) \
Xdo								\
X  if (yychar == YYEMPTY && yylen == 1)				\
X    { yychar = (token), yylval = (value);			\
X      yychar1 = YYTRANSLATE (yychar);				\
X      YYPOPSTACK;						\
X      goto yybackup;						\
X    }								\
X  else								\
X    { yyerror ("syntax error: cannot back up"); YYERROR; }	\
Xwhile (0)
X
X#define YYTERROR	1
X#define YYERRCODE	256
X
X#ifndef YYPURE
X#define YYLEX		yylex()
X#endif
X
X#ifdef YYPURE
X#ifdef YYLSP_NEEDED
X#define YYLEX		yylex(&yylval, &yylloc)
X#else
X#define YYLEX		yylex(&yylval)
X#endif
X#endif
X
X/* If nonreentrant, generate the variables here */
X
X#ifndef YYPURE
X
Xint	yychar;			/*  the lookahead symbol		*/
XYYSTYPE	yylval;			/*  the semantic value of the		*/
X				/*  lookahead symbol			*/
X
X#ifdef YYLSP_NEEDED
XYYLTYPE yylloc;			/*  location data for the lookahead	*/
X				/*  symbol				*/
X#endif
X
Xint yynerrs;			/*  number of parse errors so far       */
X#endif  /* not YYPURE */
X
X#if YYDEBUG != 0
Xint yydebug;			/*  nonzero means print parse trace	*/
X/* Since this is uninitialized, it does not stop multiple parsers
X   from coexisting.  */
X#endif
X
X/*  YYINITDEPTH indicates the initial size of the parser's stacks	*/
X
X#ifndef	YYINITDEPTH
X#define YYINITDEPTH 200
X#endif
X
X/*  YYMAXDEPTH is the maximum size the stacks can grow to
X    (effective only if the built-in stack extension method is used).  */
X
X#if YYMAXDEPTH == 0
X#undef YYMAXDEPTH
X#endif
X
X#ifndef YYMAXDEPTH
X#define YYMAXDEPTH 10000
X#endif
X
X/* Prevent warning if -Wstrict-prototypes.  */
X#ifdef __GNUC__
Xint yyparse (void);
X#endif
X
X#if __GNUC__ > 1		/* GNU C and GNU C++ define this.  */
X#define __yy_bcopy(FROM,TO,COUNT)	__builtin_memcpy(TO,FROM,COUNT)
X#else				/* not GNU C or C++ */
X#ifndef __cplusplus
X
X/* This is the most reliable way to avoid incompatibilities
X   in available built-in functions on various systems.  */
Xstatic void
X__yy_bcopy (from, to, count)
X     char *from;
X     char *to;
X     int count;
X{
X  register char *f = from;
X  register char *t = to;
X  register int i = count;
X
X  while (i-- > 0)
X    *t++ = *f++;
X}
X
X#else /* __cplusplus */
X
X/* This is the most reliable way to avoid incompatibilities
X   in available built-in functions on various systems.  */
Xstatic void
X__yy_bcopy (char *from, char *to, int count)
X{
X  register char *f = from;
X  register char *t = to;
X  register int i = count;
X
X  while (i-- > 0)
X    *t++ = *f++;
X}
X
X#endif
X#endif
X
X#line 184 "/pkg/gnu/lib/bison.simple"
Xint
Xyyparse()
X{
X  register int yystate;
X  register int yyn;
X  register short *yyssp;
X  register YYSTYPE *yyvsp;
X  int yyerrstatus;	/*  number of tokens to shift before error messages enabled */
X  int yychar1;		/*  lookahead token as an internal (translated) token number */
X
X  short	yyssa[YYINITDEPTH];	/*  the state stack			*/
X  YYSTYPE yyvsa[YYINITDEPTH];	/*  the semantic value stack		*/
X
X  short *yyss = yyssa;		/*  refer to the stacks thru separate pointers */
X  YYSTYPE *yyvs = yyvsa;	/*  to allow yyoverflow to reallocate them elsewhere */
X
X#ifdef YYLSP_NEEDED
X  YYLTYPE yylsa[YYINITDEPTH];	/*  the location stack			*/
X  YYLTYPE *yyls = yylsa;
X  YYLTYPE *yylsp;
X
X#define YYPOPSTACK   (yyvsp--, yyssp--, yylsp--)
X#else
X#define YYPOPSTACK   (yyvsp--, yyssp--)
X#endif
X
X  int yystacksize = YYINITDEPTH;
X
X#ifdef YYPURE
X  int yychar;
X  YYSTYPE yylval;
X  int yynerrs;
X#ifdef YYLSP_NEEDED
X  YYLTYPE yylloc;
X#endif
X#endif
X
X  YYSTYPE yyval;		/*  the variable used to return		*/
X				/*  semantic values from the action	*/
X				/*  routines				*/
X
X  int yylen;
X
X#if YYDEBUG != 0
X  if (yydebug)
X    fprintf(stderr, "Starting parse\n");
X#endif
X
X  yystate = 0;
X  yyerrstatus = 0;
X  yynerrs = 0;
X  yychar = YYEMPTY;		/* Cause a token to be read.  */
X
X  /* Initialize stack pointers.
X     Waste one element of value and location stack
X     so that they stay on the same level as the state stack.
X     The wasted elements are never initialized.  */
X
X  yyssp = yyss - 1;
X  yyvsp = yyvs;
X#ifdef YYLSP_NEEDED
X  yylsp = yyls;
X#endif
X
X/* Push a new state, which is found in  yystate  .  */
X/* In all cases, when you get here, the value and location stacks
X   have just been pushed. so pushing a state here evens the stacks.  */
Xyynewstate:
X
X  *++yyssp = yystate;
X
X  if (yyssp >= yyss + yystacksize - 1)
X    {
X      /* Give user a chance to reallocate the stack */
X      /* Use copies of these so that the &'s don't force the real ones into memory. */
X      YYSTYPE *yyvs1 = yyvs;
X      short *yyss1 = yyss;
X#ifdef YYLSP_NEEDED
X      YYLTYPE *yyls1 = yyls;
X#endif
X
X      /* Get the current used size of the three stacks, in elements.  */
X      int size = yyssp - yyss + 1;
X
X#ifdef yyoverflow
X      /* Each stack pointer address is followed by the size of
X	 the data in use in that stack, in bytes.  */
X      yyoverflow("parser stack overflow",
X		 &yyss1, size * sizeof (*yyssp),
X		 &yyvs1, size * sizeof (*yyvsp),
X#ifdef YYLSP_NEEDED
X		 &yyls1, size * sizeof (*yylsp),
X#endif
X		 &yystacksize);
X
X      yyss = yyss1; yyvs = yyvs1;
X#ifdef YYLSP_NEEDED
X      yyls = yyls1;
X#endif
X#else /* no yyoverflow */
X      /* Extend the stack our own way.  */
X      if (yystacksize >= YYMAXDEPTH)
X	{
X	  yyerror("parser stack overflow");
X	  return 2;
X	}
X      yystacksize *= 2;
X      if (yystacksize > YYMAXDEPTH)
X	yystacksize = YYMAXDEPTH;
X      yyss = (short *) alloca (yystacksize * sizeof (*yyssp));
X      __yy_bcopy ((char *)yyss1, (char *)yyss, size * sizeof (*yyssp));
X      yyvs = (YYSTYPE *) alloca (yystacksize * sizeof (*yyvsp));
X      __yy_bcopy ((char *)yyvs1, (char *)yyvs, size * sizeof (*yyvsp));
X#ifdef YYLSP_NEEDED
X      yyls = (YYLTYPE *) alloca (yystacksize * sizeof (*yylsp));
X      __yy_bcopy ((char *)yyls1, (char *)yyls, size * sizeof (*yylsp));
X#endif
X#endif /* no yyoverflow */
X
X      yyssp = yyss + size - 1;
X      yyvsp = yyvs + size - 1;
X#ifdef YYLSP_NEEDED
X      yylsp = yyls + size - 1;
X#endif
X
X#if YYDEBUG != 0
X      if (yydebug)
X	fprintf(stderr, "Stack size increased to %d\n", yystacksize);
X#endif
X
X      if (yyssp >= yyss + yystacksize - 1)
X	YYABORT;
X    }
X
X#if YYDEBUG != 0
X  if (yydebug)
X    fprintf(stderr, "Entering state %d\n", yystate);
X#endif
X
X  goto yybackup;
X yybackup:
X
X/* Do appropriate processing given the current state.  */
X/* Read a lookahead token if we need one and don't already have one.  */
X/* yyresume: */
X
X  /* First try to decide what to do without reference to lookahead token.  */
X
X  yyn = yypact[yystate];
X  if (yyn == YYFLAG)
X    goto yydefault;
X
X  /* Not known => get a lookahead token if don't already have one.  */
X
X  /* yychar is either YYEMPTY or YYEOF
X     or a valid token in external form.  */
X
X  if (yychar == YYEMPTY)
X    {
X#if YYDEBUG != 0
X      if (yydebug)
X	fprintf(stderr, "Reading a token: ");
X#endif
X      yychar = YYLEX;
X    }
X
X  /* Convert token to internal form (in yychar1) for indexing tables with */
X
X  if (yychar <= 0)		/* This means end of input. */
X    {
X      yychar1 = 0;
X      yychar = YYEOF;		/* Don't call YYLEX any more */
X
X#if YYDEBUG != 0
X      if (yydebug)
X	fprintf(stderr, "Now at end of input.\n");
X#endif
X    }
X  else
X    {
X      yychar1 = YYTRANSLATE(yychar);
X
X#if YYDEBUG != 0
X      if (yydebug)
X	{
X	  fprintf (stderr, "Next token is %d (%s", yychar, yytname[yychar1]);
X	  /* Give the individual parser a way to print the precise meaning
X	     of a token, for further debugging info.  */
X#ifdef YYPRINT
X	  YYPRINT (stderr, yychar, yylval);
X#endif
X	  fprintf (stderr, ")\n");
X	}
X#endif
X    }
X
X  yyn += yychar1;
X  if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != yychar1)
X    goto yydefault;
X
X  yyn = yytable[yyn];
X
X  /* yyn is what to do for this token type in this state.
X     Negative => reduce, -yyn is rule number.
X     Positive => shift, yyn is new state.
X       New state is final state => don't bother to shift,
X       just return success.
X     0, or most negative number => error.  */
X
X  if (yyn < 0)
X    {
X      if (yyn == YYFLAG)
X	goto yyerrlab;
X      yyn = -yyn;
X      goto yyreduce;
X    }
X  else if (yyn == 0)
X    goto yyerrlab;
X
X  if (yyn == YYFINAL)
X    YYACCEPT;
X
X  /* Shift the lookahead token.  */
X
X#if YYDEBUG != 0
X  if (yydebug)
X    fprintf(stderr, "Shifting token %d (%s), ", yychar, yytname[yychar1]);
X#endif
X
X  /* Discard the token being shifted unless it is eof.  */
X  if (yychar != YYEOF)
X    yychar = YYEMPTY;
X
X  *++yyvsp = yylval;
X#ifdef YYLSP_NEEDED
X  *++yylsp = yylloc;
X#endif
X
X  /* count tokens shifted since error; after three, turn off error status.  */
X  if (yyerrstatus) yyerrstatus--;
X
X  yystate = yyn;
X  goto yynewstate;
X
X/* Do the default action for the current state.  */
Xyydefault:
X
X  yyn = yydefact[yystate];
X  if (yyn == 0)
X    goto yyerrlab;
X
X/* Do a reduction.  yyn is the number of a rule to reduce with.  */
Xyyreduce:
X  yylen = yyr2[yyn];
X  yyval = yyvsp[1-yylen]; /* implement default value of the action */
X
X#if YYDEBUG != 0
X  if (yydebug)
X    {
X      int i;
X
X      fprintf (stderr, "Reducing via rule %d (line %d), ",
X	       yyn, yyrline[yyn]);
X
X      /* Print the symbols being reduced, and their result.  */
X      for (i = yyprhs[yyn]; yyrhs[i] > 0; i++)
X	fprintf (stderr, "%s ", yytname[yyrhs[i]]);
X      fprintf (stderr, " -> %s\n", yytname[yyr1[yyn]]);
X    }
X#endif
X
X
X  switch (yyn) {
X
Xcase 1:
X#line 403 "javaa.y"
X{ InitAssembler();;
X    break;}
Xcase 2:
X#line 404 "javaa.y"
X{ EndAssembler();;
X    break;}
Xcase 5:
X#line 414 "javaa.y"
X{
X		SetThisClass(yyvsp[-6].intval, yyvsp[-4].string, yyvsp[-3].string);
X		;
X    break;}
Xcase 7:
X#line 422 "javaa.y"
X{yyval.intval = yyvsp[-3].intval | yyvsp[-2].intval | yyvsp[-1].intval | yyvsp[0].intval;;
X    break;}
Xcase 8:
X#line 426 "javaa.y"
X{break;;
X    break;}
Xcase 9:
X#line 427 "javaa.y"
X{break;;
X    break;}
Xcase 10:
X#line 433 "javaa.y"
X{ yyval.string = yyvsp[0].string;;
X    break;}
Xcase 11:
X#line 434 "javaa.y"
X{
X	    char* tempstring;
X	    tempstring = (char *) malloc(strlen("java/lang/Object"));
X	    strcpy(tempstring,"java/lang/Object");
X	    yyval.string = tempstring;
X	  ;
X    break;}
Xcase 12:
X#line 443 "javaa.y"
X{
X		  yyval.string = ConsStrings(yyvsp[-2].string,ConsStrings("/",yyvsp[0].string));
X		;
X    break;}
Xcase 13:
X#line 447 "javaa.y"
X{
X		  yyval.string = yyvsp[0].string;
X		;
X    break;}
Xcase 14:
X#line 454 "javaa.y"
X{
X		  if (yyvsp[0].classfieldmethodstruct.classname == NULL) yyval.classfieldmethodstruct.classname = yyvsp[-2].string;
X		  else yyval.classfieldmethodstruct.classname = ConsStrings(yyvsp[-2].string,ConsStrings("/",yyvsp[0].classfieldmethodstruct.classname));
X		  yyval.classfieldmethodstruct.fieldmethodname = yyvsp[0].classfieldmethodstruct.fieldmethodname;
X		;
X    break;}
Xcase 15:
X#line 460 "javaa.y"
X{
X		  yyval.classfieldmethodstruct.classname = GetThisClass();
X		  yyval.classfieldmethodstruct.fieldmethodname = yyvsp[0].string;
X		;
X    break;}
Xcase 16:
X#line 468 "javaa.y"
X{
X		  if (yyvsp[0].classfieldmethodstruct.classname == NULL) yyval.classfieldmethodstruct.classname = yyvsp[-2].string;
X		  else yyval.classfieldmethodstruct.classname = ConsStrings(yyvsp[-2].string,ConsStrings("/",yyvsp[0].classfieldmethodstruct.classname));
X		  yyval.classfieldmethodstruct.fieldmethodname = yyvsp[0].classfieldmethodstruct.fieldmethodname;
X		;
X    break;}
Xcase 17:
X#line 474 "javaa.y"
X{
X		  yyval.classfieldmethodstruct.classname = NULL;
X		  yyval.classfieldmethodstruct.fieldmethodname = yyvsp[0].string;
X		;
X    break;}
Xcase 18:
X#line 482 "javaa.y"
X{yyval.intval = 0x0400;;
X    break;}
Xcase 19:
X#line 483 "javaa.y"
X{yyval.intval=0;;
X    break;}
Xcase 20:
X#line 488 "javaa.y"
X{yyval.intval = 0x0010;;
X    break;}
Xcase 21:
X#line 489 "javaa.y"
X{yyval.intval=0;;
X    break;}
Xcase 22:
X#line 494 "javaa.y"
X{yyval.intval = 0x0001;;
X    break;}
Xcase 23:
X#line 495 "javaa.y"
X{yyval.intval=0;;
X    break;}
Xcase 24:
X#line 500 "javaa.y"
X{yyval.intval = 0x0200;;
X    break;}
Xcase 25:
X#line 501 "javaa.y"
X{yyval.intval=0;;
X    break;}
Xcase 26:
X#line 506 "javaa.y"
X{yyval.intval = 0x0008;;
X    break;}
Xcase 27:
X#line 507 "javaa.y"
X{yyval.intval=0;;
X    break;}
Xcase 28:
X#line 512 "javaa.y"
X{yyval.intval = 0x0100;;
X    break;}
Xcase 29:
X#line 513 "javaa.y"
X{yyval.intval=0;;
X    break;}
Xcase 30:
X#line 518 "javaa.y"
X{yyval.intval = 0x0020;;
X    break;}
Xcase 31:
X#line 519 "javaa.y"
X{yyval.intval=0;;
X    break;}
Xcase 32:
X#line 524 "javaa.y"
X{yyval.intval = 0x0080;;
X    break;}
Xcase 33:
X#line 525 "javaa.y"
X{yyval.intval=0;;
X    break;}
Xcase 34:
X#line 530 "javaa.y"
X{yyval.intval = 0x0040;;
X    break;}
Xcase 35:
X#line 531 "javaa.y"
X{yyval.intval=0;;
X    break;}
Xcase 36:
X#line 536 "javaa.y"
X{yyval.intval = 2;;
X    break;}
Xcase 37:
X#line 538 "javaa.y"
X{yyval.intval = 6;;
X    break;}
Xcase 38:
X#line 540 "javaa.y"
X{yyval.intval = 4;;
X    break;}
Xcase 39:
X#line 542 "javaa.y"
X{yyval.intval = 1;;
X    break;}
Xcase 40:
X#line 543 "javaa.y"
X{yyval.intval=0;;
X    break;}
Xcase 41:
X#line 548 "javaa.y"
X{break;;
X    break;}
Xcase 42:
X#line 549 "javaa.y"
X{break;;
X    break;}
Xcase 43:
X#line 554 "javaa.y"
X{ AddToInterfaceList(yyvsp[0].string);;
X    break;}
Xcase 44:
X#line 556 "javaa.y"
X{ AddToInterfaceList(yyvsp[0].string);;
X    break;}
Xcase 46:
X#line 561 "javaa.y"
X{break;;
X    break;}
Xcase 47:
X#line 565 "javaa.y"
X{NewField(yyvsp[-4].intval|yyvsp[-3].intval, yyvsp[-1].string, yyvsp[-2].string, yyvsp[0].argtype);;
X    break;}
Xcase 48:
X#line 570 "javaa.y"
X{yyval.argtype.type = INTCONSTANT;
X              yyval.argtype.intval = yyvsp[0].intval;
X             ;
X    break;}
Xcase 49:
X#line 574 "javaa.y"
X{yyval.argtype.type = FLOATCONSTANT;
X              yyval.argtype.floatval = yyvsp[0].floatval;
X             ;
X    break;}
Xcase 50:
X#line 578 "javaa.y"
X{yyval.argtype.type = LONGCONSTANT;
X              yyval.argtype.longval = yyvsp[0].longval;
X             ;
X    break;}
Xcase 51:
X#line 582 "javaa.y"
X{yyval.argtype.type = DOUBLECONSTANT;
X              yyval.argtype.doubleval = yyvsp[0].doubleval;
X             ;
X    break;}
Xcase 52:
X#line 586 "javaa.y"
X{yyval.argtype.type = 0;
X             ;
X    break;}
Xcase 53:
X#line 592 "javaa.y"
X{ yyval.intval = yyvsp[-3].intval | yyvsp[-2].intval | yyvsp[-1].intval | yyvsp[0].intval ;;
X    break;}
Xcase 55:
X#line 597 "javaa.y"
X{break;;
X    break;}
Xcase 56:
X#line 601 "javaa.y"
X{NewNewMethod(yyvsp[-1].intval|yyvsp[0].intval);;
X    break;}
Xcase 57:
X#line 606 "javaa.y"
X{ 
X	    char* tmpstr; 
X	    /*message("Calling NewMethod.");*/
X	    tmpstr = ConsStrings("(",ConsStrings(yyvsp[-5].string,ConsStrings(")",yyvsp[-8].string)));
X	    /*message(tmpstr);*/
X	    NewMethod(yyvsp[-7].string, tmpstr, yyvsp[-1].intval, yyvsp[0].intval); ;
X    break;}
Xcase 58:
X#line 618 "javaa.y"
X{EndMethod();;
X    break;}
Xcase 59:
X#line 623 "javaa.y"
X{break;;
X    break;}
Xcase 60:
X#line 624 "javaa.y"
X{break;;
X    break;}
Xcase 61:
X#line 629 "javaa.y"
X{AddToThrowsList(yyvsp[0].string);;
X    break;}
Xcase 62:
X#line 631 "javaa.y"
X{AddToThrowsList(yyvsp[0].string);;
X    break;}
Xcase 63:
X#line 636 "javaa.y"
X{yyval.intval = yyvsp[0].intval;;
X    break;}
Xcase 64:
X#line 637 "javaa.y"
X{yyval.intval = -1;;
X    break;}
Xcase 65:
X#line 642 "javaa.y"
X{ yyval.string = yyvsp[0].string; ;
X    break;}
Xcase 66:
X#line 644 "javaa.y"
X{ char* tempstring;
X	     	  tempstring = (char *) malloc(strlen("B"));
X	     	  strcpy(tempstring,"V");
X	     	  yyval.string = tempstring;
X	  	;
X    break;}
Xcase 67:
X#line 653 "javaa.y"
X{ yyval.string = yyvsp[0].string;;
X    break;}
Xcase 68:
X#line 654 "javaa.y"
X{yyval.string = NULL;;
X    break;}
Xcase 69:
X#line 658 "javaa.y"
X{
X		  /*message("in arguments with comma.");*/
X		  yyval.string = ConsStrings(yyvsp[-2].string,yyvsp[0].string);
X		;
X    break;}
Xcase 70:
X#line 663 "javaa.y"
X{ yyval.string = yyvsp[0].string; /*message("in arguments");*/;
X    break;}
Xcase 71:
X#line 669 "javaa.y"
X{ yyval.string = yyvsp[0].string;;
X    break;}
Xcase 72:
X#line 670 "javaa.y"
X{yyval.string = NULL;;
X    break;}
Xcase 73:
X#line 674 "javaa.y"
X{
X		  /*message("in arguments with comma.");*/
X		  yyval.string = ConsStrings(yyvsp[-2].string,yyvsp[0].string);
X		;
X    break;}
Xcase 74:
X#line 679 "javaa.y"
X{ yyval.string = yyvsp[0].string; /*message("in arguments");*/;
X    break;}
Xcase 75:
X#line 682 "javaa.y"
X{ yyval.string = yyvsp[0].string; 
X		  /*message("calling IncrementLocalVarSlot");*/
X		  IncrementLocalVarSlot(yyvsp[0].string); /*message("in methodargument");*/;
X    break;}
Xcase 76:
X#line 686 "javaa.y"
X{ yyval.string = yyvsp[-1].string; NewLocalVar(yyvsp[0].string, yyvsp[-1].string);/*message("in methodargument");*/;
X    break;}
Xcase 77:
X#line 691 "javaa.y"
X{
X		  /*message("In type.");*/
X		  yyval.string = ConsStrings(yyvsp[0].string,yyvsp[-1].string);
X		;
X    break;}
Xcase 78:
X#line 698 "javaa.y"
X{ yyval.string = ConsStrings("B",""); ;
X    break;}
Xcase 79:
X#line 700 "javaa.y"
X{ yyval.string = ConsStrings("C",""); ;
X    break;}
Xcase 80:
X#line 702 "javaa.y"
X{ yyval.string = ConsStrings("D",""); ;
X    break;}
Xcase 81:
X#line 704 "javaa.y"
X{ yyval.string = ConsStrings("F",""); ;
X    break;}
Xcase 82:
X#line 706 "javaa.y"
X{ yyval.string = ConsStrings("I",""); ;
X    break;}
Xcase 83:
X#line 708 "javaa.y"
X{ yyval.string = ConsStrings("J",""); ;
X    break;}
Xcase 84:
X#line 710 "javaa.y"
X{ yyval.string = ConsStrings("S",""); ;
X    break;}
Xcase 85:
X#line 712 "javaa.y"
X{ yyval.string = ConsStrings("Z",""); ;
X    break;}
Xcase 86:
X#line 714 "javaa.y"
X{
X		 yyval.string = ConsStrings("L", ConsStrings(yyvsp[0].string,";"));
X	   	 /*message($$);*/
X		 /*message("Got classname.");*/;
X    break;}
Xcase 87:
X#line 722 "javaa.y"
X{yyval.string = ConsStrings("[",yyvsp[0].string);;
X    break;}
Xcase 88:
X#line 723 "javaa.y"
X{yyval.string=NULL;;
X    break;}
Xcase 89:
X#line 729 "javaa.y"
X{ yyval.intval = yyvsp[-4].intval | yyvsp[-3].intval | yyvsp[-2].intval | yyvsp[-1].intval | yyvsp[0].intval;;
X    break;}
Xcase 90:
X#line 733 "javaa.y"
X{NewLocalVar(yyvsp[0].string, yyvsp[-1].string);;
X    break;}
Xcase 91:
X#line 738 "javaa.y"
X{yyval.string = yyvsp[0].string;;
X    break;}
Xcase 92:
X#line 740 "javaa.y"
X{yyval.string = ConsStrings("[",ConsStrings(yyvsp[0].string,yyvsp[-3].string));;
X    break;}
Xcase 93:
X#line 745 "javaa.y"
X{break;;
X    break;}
Xcase 94:
X#line 749 "javaa.y"
X{break;;
X    break;}
Xcase 95:
X#line 751 "javaa.y"
X{break;;
X    break;}
Xcase 96:
X#line 755 "javaa.y"
X{break;;
X    break;}
Xcase 97:
X#line 757 "javaa.y"
X{break;;
X    break;}
Xcase 98:
X#line 759 "javaa.y"
X{break;;
X    break;}
Xcase 99:
X#line 761 "javaa.y"
X{break;;
X    break;}
Xcase 100:
X#line 765 "javaa.y"
X{DefineLabel(yyvsp[0].string);;
X    break;}
Xcase 101:
X#line 769 "javaa.y"
X{GenNoArgCode(yyvsp[0].intval);
X		;
X    break;}
Xcase 102:
X#line 772 "javaa.y"
X{GenOneArgCode(yyvsp[-1].intval, yyvsp[0].argtype);
X		;
X    break;}
Xcase 103:
X#line 775 "javaa.y"
X{GenFieldArgCode(yyvsp[-2].intval, yyvsp[0].classfieldmethodstruct.classname, yyvsp[0].classfieldmethodstruct.fieldmethodname, yyvsp[-1].string);
X		;
X    break;}
Xcase 104:
X#line 779 "javaa.y"
X{GenMethodArgCode(yyvsp[-5].intval, yyvsp[-3].classfieldmethodstruct.classname, yyvsp[-3].classfieldmethodstruct.fieldmethodname,
X		         	 ConsStrings("(",ConsStrings(yyvsp[-1].string,
X				   ConsStrings(")",yyvsp[-4].string)))); 
X		;
X    break;}
Xcase 105:
X#line 784 "javaa.y"
X{GenClassArgCode(yyvsp[-1].intval, yyvsp[0].string);
X		;
X    break;}
Xcase 106:
X#line 787 "javaa.y"
X{GenClassArgCode(yyvsp[-1].Rk.terminal, yyvsp[0].string);
X		;
X    break;}
Xcase 107:
X#line 791 "javaa.y"
X{GenINVOKEINTERFACECode(yyvsp[-6].Rk.terminal, yyvsp[-4].classfieldmethodstruct.classname,
X				 yyvsp[-4].classfieldmethodstruct.fieldmethodname,
X		         	 ConsStrings("(",ConsStrings(yyvsp[-2].string,
X				   ConsStrings(")",yyvsp[-5].string))), yyvsp[0].intval); 
X		;
X    break;}
Xcase 108:
X#line 797 "javaa.y"
X{GenLabelArgCode(yyvsp[-1].intval, yyvsp[0].string);
X		;
X    break;}
Xcase 109:
X#line 800 "javaa.y"
X{GenLocalVarArgCode(yyvsp[-1].intval,yyvsp[0].intval);
X		;
X    break;}
Xcase 110:
X#line 803 "javaa.y"
X{GenIINCCode(yyvsp[-2].Rk.terminal,yyvsp[-1].intval,yyvsp[0].intval);
X		;
X    break;}
Xcase 111:
X#line 806 "javaa.y"
X{GenLOOKUPSWITCHCode(yyvsp[-5].Rk.terminal,yyvsp[-3].string,yyvsp[-1].lookuplistptr);
X		;
X    break;}
Xcase 112:
X#line 810 "javaa.y"
X{GenTABLESWITCHCode(yyvsp[-8].Rk.terminal,yyvsp[-7].intval,yyvsp[-5].intval,yyvsp[-3].string,yyvsp[-1].tablelistptr);
X		;
X    break;}
Xcase 113:
X#line 813 "javaa.y"
X{GenMULTIANEWARRAYCode(yyvsp[-2].Rk.terminal,yyvsp[-1].string,yyvsp[0].intval);
X		;
X    break;}
Xcase 114:
X#line 816 "javaa.y"
X{GenNEWARRAYCode(yyvsp[-1].Rk.terminal,yyvsp[0].intval);
X		;
X    break;}
Xcase 115:
X#line 821 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 116:
X#line 823 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 117:
X#line 825 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 118:
X#line 827 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 119:
X#line 829 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 120:
X#line 831 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 121:
X#line 833 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 122:
X#line 835 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 123:
X#line 837 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 124:
X#line 839 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 125:
X#line 841 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 126:
X#line 843 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 127:
X#line 845 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 128:
X#line 847 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 129:
X#line 849 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 130:
X#line 851 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 131:
X#line 853 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 132:
X#line 855 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 133:
X#line 857 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 134:
X#line 859 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 135:
X#line 861 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 136:
X#line 863 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 137:
X#line 865 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 138:
X#line 867 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 139:
X#line 869 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 140:
X#line 871 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 141:
X#line 873 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 142:
X#line 875 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 143:
X#line 877 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 144:
X#line 879 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 145:
X#line 881 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 146:
X#line 883 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 147:
X#line 885 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 148:
X#line 887 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 149:
X#line 889 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 150:
X#line 891 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 151:
X#line 893 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 152:
X#line 895 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 153:
X#line 897 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 154:
X#line 899 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 155:
X#line 901 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 156:
X#line 903 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 157:
X#line 905 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 158:
X#line 907 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 159:
X#line 909 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 160:
X#line 911 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 161:
X#line 913 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 162:
X#line 915 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 163:
X#line 917 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 164:
X#line 919 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 165:
X#line 921 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 166:
X#line 923 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 167:
X#line 925 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 168:
X#line 927 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 169:
X#line 929 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 170:
X#line 931 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 171:
X#line 933 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 172:
X#line 935 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 173:
X#line 937 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 174:
X#line 939 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 175:
X#line 941 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 176:
X#line 943 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 177:
X#line 945 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 178:
X#line 947 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 179:
X#line 949 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 180:
X#line 951 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 181:
X#line 953 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 182:
X#line 955 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 183:
X#line 957 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 184:
X#line 959 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 185:
X#line 961 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 186:
X#line 963 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 187:
X#line 965 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 188:
X#line 967 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 189:
X#line 969 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 190:
X#line 971 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 191:
X#line 973 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 192:
X#line 975 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 193:
X#line 977 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 194:
X#line 979 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 195:
X#line 981 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 196:
X#line 983 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 197:
X#line 985 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 198:
X#line 987 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 199:
X#line 989 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 200:
X#line 991 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 201:
X#line 993 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 202:
X#line 995 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 203:
X#line 997 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 204:
X#line 999 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 205:
X#line 1001 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 206:
X#line 1003 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 207:
X#line 1005 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 208:
X#line 1007 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 209:
X#line 1009 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 210:
X#line 1011 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 211:
X#line 1013 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 212:
X#line 1015 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 213:
X#line 1017 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 214:
X#line 1019 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 215:
X#line 1021 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 216:
X#line 1023 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 217:
X#line 1025 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 218:
X#line 1027 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 219:
X#line 1029 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 220:
X#line 1031 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 221:
X#line 1033 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 222:
X#line 1035 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 223:
X#line 1037 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 224:
X#line 1039 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 225:
X#line 1041 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 226:
X#line 1043 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 227:
X#line 1045 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 228:
X#line 1047 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 229:
X#line 1049 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 230:
X#line 1051 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 231:
X#line 1053 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 232:
X#line 1055 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 233:
X#line 1057 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 234:
X#line 1059 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 235:
X#line 1061 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 236:
X#line 1063 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 237:
X#line 1065 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 238:
X#line 1067 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 239:
X#line 1069 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 240:
X#line 1071 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 241:
X#line 1073 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 242:
X#line 1075 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 243:
X#line 1077 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 244:
X#line 1079 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 245:
X#line 1081 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 246:
X#line 1083 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 247:
X#line 1085 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 248:
X#line 1087 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 249:
X#line 1089 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 250:
X#line 1091 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 251:
X#line 1093 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 252:
X#line 1095 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 253:
X#line 1097 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 254:
X#line 1099 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 255:
X#line 1101 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 256:
X#line 1103 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 257:
X#line 1105 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 258:
X#line 1107 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 259:
X#line 1109 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 260:
X#line 1111 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 261:
X#line 1113 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 262:
X#line 1115 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 263:
X#line 1119 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 264:
X#line 1121 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 265:
X#line 1123 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 266:
X#line 1125 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 267:
X#line 1127 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 268:
X#line 1133 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 269:
X#line 1135 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 270:
X#line 1137 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 271:
X#line 1142 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 272:
X#line 1144 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 273:
X#line 1146 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 274:
X#line 1148 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 275:
X#line 1153 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 276:
X#line 1155 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 277:
X#line 1157 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 278:
X#line 1161 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 279:
X#line 1163 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 280:
X#line 1165 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 281:
X#line 1167 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 282:
X#line 1169 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 283:
X#line 1171 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 284:
X#line 1173 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 285:
X#line 1175 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 286:
X#line 1177 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 287:
X#line 1179 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 288:
X#line 1181 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 289:
X#line 1183 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 290:
X#line 1185 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 291:
X#line 1187 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 292:
X#line 1189 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 293:
X#line 1191 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 294:
X#line 1193 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 295:
X#line 1195 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 296:
X#line 1197 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 297:
X#line 1199 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 298:
X#line 1204 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 299:
X#line 1206 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 300:
X#line 1208 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 301:
X#line 1210 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 302:
X#line 1212 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 303:
X#line 1214 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 304:
X#line 1216 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 305:
X#line 1218 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 306:
X#line 1220 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 307:
X#line 1222 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 308:
X#line 1224 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 309:
X#line 1226 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 310:
X#line 1228 "javaa.y"
X{yyval.intval=yyvsp[0].Rk.terminal;;
X    break;}
Xcase 311:
X#line 1232 "javaa.y"
X{ yyval.intval = yyvsp[0].intval;;
X    break;}
Xcase 312:
X#line 1234 "javaa.y"
X{ yyval.intval = GetLocalVar(yyvsp[0].string);;
X    break;}
Xcase 313:
X#line 1238 "javaa.y"
X{ yyval.lookuplistptr = AddToLookupList(yyvsp[0].lookuplistptr,yyvsp[-3].intval,yyvsp[-1].string); ;
X    break;}
Xcase 314:
X#line 1239 "javaa.y"
X{yyval.lookuplistptr = NULL;;
X    break;}
Xcase 315:
X#line 1243 "javaa.y"
X{ yyval.tablelistptr = AddToTableList(yyvsp[0].tablelistptr,yyvsp[-1].string); ;
X    break;}
Xcase 316:
X#line 1244 "javaa.y"
X{yyval.tablelistptr = NULL;;
X    break;}
Xcase 317:
X#line 1249 "javaa.y"
X{ yyval.intval = 4;;
X    break;}
Xcase 318:
X#line 1251 "javaa.y"
X{ yyval.intval = 5;;
X    break;}
Xcase 319:
X#line 1253 "javaa.y"
X{ yyval.intval = 6;;
X    break;}
Xcase 320:
X#line 1255 "javaa.y"
X{ yyval.intval = 7;;
X    break;}
Xcase 321:
X#line 1257 "javaa.y"
X{ yyval.intval = 8;;
X    break;}
Xcase 322:
X#line 1259 "javaa.y"
X{ yyval.intval = 9;;
X    break;}
Xcase 323:
X#line 1261 "javaa.y"
X{ yyval.intval = 10;;
X    break;}
Xcase 324:
X#line 1263 "javaa.y"
X{ yyval.intval = 11;;
X    break;}
Xcase 325:
X#line 1267 "javaa.y"
X{yyval.argtype.type = IDENTIFIER;
X              yyval.argtype.stringval = yyvsp[0].string;
X             ;
X    break;}
Xcase 326:
X#line 1271 "javaa.y"
X{yyval.argtype.type = INTCONSTANT;
X              yyval.argtype.intval = yyvsp[0].intval;
X             ;
X    break;}
Xcase 327:
X#line 1275 "javaa.y"
X{yyval.argtype.type = LONGCONSTANT;
X              yyval.argtype.longval = yyvsp[0].longval;
X             ;
X    break;}
Xcase 328:
X#line 1279 "javaa.y"
X{yyval.argtype.type = STRING_LITERAL;
X              yyval.argtype.stringval = yyvsp[0].string;
X             ;
X    break;}
Xcase 329:
X#line 1283 "javaa.y"
X{yyval.argtype.type = FLOATCONSTANT;
X              yyval.argtype.floatval = yyvsp[0].floatval;
X	      /*message("got a float constant.");*/
X             ;
X    break;}
Xcase 330:
X#line 1288 "javaa.y"
X{yyval.argtype.type = DOUBLECONSTANT;
X              yyval.argtype.doubleval = yyvsp[0].doubleval;
X	      /*message("got a double constant.");*/
X             ;
X    break;}
Xcase 331:
X#line 1296 "javaa.y"
X{ break; ;
X    break;}
Xcase 332:
X#line 1297 "javaa.y"
X{break;;
X    break;}
Xcase 333:
X#line 1301 "javaa.y"
X{ AddToExceptionList(yyvsp[-3].string,yyvsp[-2].string,yyvsp[-1].string,yyvsp[0].string); ;
X    break;}
Xcase 334:
X#line 1303 "javaa.y"
X{ 
X		  if (yyvsp[0].intval != 0) oops("Must have a class name or 0 here.");
X	          AddToExceptionList(yyvsp[-3].string,yyvsp[-2].string,yyvsp[-1].string,NULL); 
X		;
X    break;}
Xcase 335:
X#line 1307 "javaa.y"
X{break;;
X    break;}
Xcase 336:
X#line 1312 "javaa.y"
X{ break; ;
X    break;}
Xcase 337:
X#line 1313 "javaa.y"
X{break;;
X    break;}
Xcase 338:
X#line 1317 "javaa.y"
X{ AddToLineNumberList(yyvsp[-1].string,yyvsp[0].intval); ;
X    break;}
Xcase 339:
X#line 1318 "javaa.y"
X{break;;
X    break;}
Xcase 340:
X#line 1323 "javaa.y"
X{ break; ;
X    break;}
Xcase 341:
X#line 1324 "javaa.y"
X{break;;
X    break;}
Xcase 342:
X#line 1329 "javaa.y"
X{ AddToUserLocalVarList(yyvsp[-4].string,yyvsp[-3].string,yyvsp[-2].string,yyvsp[-1].string,yyvsp[0].intval); ;
X    break;}
Xcase 343:
X#line 1330 "javaa.y"
X{break;;
X    break;}
Xcase 344:
X#line 1335 "javaa.y"
X{ SetSourceFile(yyvsp[0].string); ;
X    break;}
Xcase 345:
X#line 1336 "javaa.y"
X{break;;
X    break;}
X}
X   /* the action file gets copied in in place of this dollarsign */
X#line 457 "/pkg/gnu/lib/bison.simple"
X
X  yyvsp -= yylen;
X  yyssp -= yylen;
X#ifdef YYLSP_NEEDED
X  yylsp -= yylen;
X#endif
X
X#if YYDEBUG != 0
X  if (yydebug)
X    {
X      short *ssp1 = yyss - 1;
X      fprintf (stderr, "state stack now");
X      while (ssp1 != yyssp)
X	fprintf (stderr, " %d", *++ssp1);
X      fprintf (stderr, "\n");
X    }
X#endif
X
X  *++yyvsp = yyval;
X
X#ifdef YYLSP_NEEDED
X  yylsp++;
X  if (yylen == 0)
X    {
X      yylsp->first_line = yylloc.first_line;
X      yylsp->first_column = yylloc.first_column;
X      yylsp->last_line = (yylsp-1)->last_line;
X      yylsp->last_column = (yylsp-1)->last_column;
X      yylsp->text = 0;
X    }
X  else
X    {
X      yylsp->last_line = (yylsp+yylen-1)->last_line;
X      yylsp->last_column = (yylsp+yylen-1)->last_column;
X    }
X#endif
X
X  /* Now "shift" the result of the reduction.
X     Determine what state that goes to,
X     based on the state we popped back to
X     and the rule number reduced by.  */
X
X  yyn = yyr1[yyn];
X
X  yystate = yypgoto[yyn - YYNTBASE] + *yyssp;
X  if (yystate >= 0 && yystate <= YYLAST && yycheck[yystate] == *yyssp)
X    yystate = yytable[yystate];
X  else
X    yystate = yydefgoto[yyn - YYNTBASE];
X
X  goto yynewstate;
X
Xyyerrlab:   /* here on detecting error */
X
X  if (! yyerrstatus)
X    /* If not already recovering from an error, report this error.  */
X    {
X      ++yynerrs;
X
X#ifdef YYERROR_VERBOSE
X      yyn = yypact[yystate];
X
X      if (yyn > YYFLAG && yyn < YYLAST)
X	{
X	  int size = 0;
X	  char *msg;
X	  int x, count;
X
X	  count = 0;
X	  /* Start X at -yyn if nec to avoid negative indexes in yycheck.  */
X	  for (x = (yyn < 0 ? -yyn : 0);
X	       x < (sizeof(yytname) / sizeof(char *)); x++)
X	    if (yycheck[x + yyn] == x)
X	      size += strlen(yytname[x]) + 15, count++;
X	  msg = (char *) malloc(size + 15);
X	  if (msg != 0)
X	    {
X	      strcpy(msg, "parse error");
X
X	      if (count < 5)
X		{
X		  count = 0;
X		  for (x = (yyn < 0 ? -yyn : 0);
X		       x < (sizeof(yytname) / sizeof(char *)); x++)
X		    if (yycheck[x + yyn] == x)
X		      {
X			strcat(msg, count == 0 ? ", expecting `" : " or `");
X			strcat(msg, yytname[x]);
X			strcat(msg, "'");
X			count++;
X		      }
X		}
X	      yyerror(msg);
X	      free(msg);
X	    }
X	  else
X	    yyerror ("parse error; also virtual memory exceeded");
X	}
X      else
X#endif /* YYERROR_VERBOSE */
X	yyerror("parse error");
X    }
X
X  goto yyerrlab1;
Xyyerrlab1:   /* here on error raised explicitly by an action */
X
X  if (yyerrstatus == 3)
X    {
X      /* if just tried and failed to reuse lookahead token after an error, discard it.  */
X
X      /* return failure if at end of input */
X      if (yychar == YYEOF)
X	YYABORT;
X
X#if YYDEBUG != 0
X      if (yydebug)
X	fprintf(stderr, "Discarding token %d (%s).\n", yychar, yytname[yychar1]);
X#endif
X
X      yychar = YYEMPTY;
X    }
X
X  /* Else will try to reuse lookahead token
X     after shifting the error token.  */
X
X  yyerrstatus = 3;		/* Each real token shifted decrements this */
X
X  goto yyerrhandle;
X
Xyyerrdefault:  /* current state does not do anything special for the error token. */
X
X#if 0
X  /* This is wrong; only states that explicitly want error tokens
X     should shift them.  */
X  yyn = yydefact[yystate];  /* If its default is to accept any token, ok.  Otherwise pop it.*/
X  if (yyn) goto yydefault;
X#endif
X
Xyyerrpop:   /* pop the current state because it cannot handle the error token */
X
X  if (yyssp == yyss) YYABORT;
X  yyvsp--;
X  yystate = *--yyssp;
X#ifdef YYLSP_NEEDED
X  yylsp--;
X#endif
X
X#if YYDEBUG != 0
X  if (yydebug)
X    {
X      short *ssp1 = yyss - 1;
X      fprintf (stderr, "Error: state stack now");
X      while (ssp1 != yyssp)
X	fprintf (stderr, " %d", *++ssp1);
X      fprintf (stderr, "\n");
X    }
X#endif
X
Xyyerrhandle:
X
X  yyn = yypact[yystate];
X  if (yyn == YYFLAG)
X    goto yyerrdefault;
X
X  yyn += YYTERROR;
X  if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != YYTERROR)
X    goto yyerrdefault;
X
X  yyn = yytable[yyn];
X  if (yyn < 0)
X    {
X      if (yyn == YYFLAG)
X	goto yyerrpop;
X      yyn = -yyn;
X      goto yyreduce;
X    }
X  else if (yyn == 0)
X    goto yyerrpop;
X
X  if (yyn == YYFINAL)
X    YYACCEPT;
X
X#if YYDEBUG != 0
X  if (yydebug)
X    fprintf(stderr, "Shifting error token, ");
X#endif
X
X  *++yyvsp = yylval;
X#ifdef YYLSP_NEEDED
X  *++yylsp = yylloc;
X#endif
X
X  yystate = yyn;
X  goto yynewstate;
X}
X#line 1338 "javaa.y"
X
END_OF_FILE
if test 96763 -ne `wc -c <'gram.c'`; then
    echo shar: \"'gram.c'\" unpacked with wrong size!
fi
# end of 'gram.c'
fi
if test -f 'lex.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'lex.c'\"
else
echo shar: Extracting \"'lex.c'\" \(121402 characters\)
sed "s/^X//" >'lex.c' <<'END_OF_FILE'
X/* A lexical scanner generated by flex */
X
X/* Scanner skeleton version:
X * $Header: flex.skl,v 1.2 94/01/04 14:33:15 vern Exp $
X */
X
X#define FLEX_SCANNER
X
X#include <stdio.h>
X
X
X/* cfront 1.2 defines "c_plusplus" instead of "__cplusplus" */
X#ifdef c_plusplus
X#ifndef __cplusplus
X#define __cplusplus
X#endif
X#endif
X
X
X#ifdef __cplusplus
X
X#include <stdlib.h>
X#include <unistd.h>
X
X/* Use prototypes in function declarations. */
X#define YY_USE_PROTOS
X
X/* The "const" storage-class-modifier is valid. */
X#define YY_USE_CONST
X
X#else	/* ! __cplusplus */
X
X#ifdef __STDC__
X
X#define YY_USE_PROTOS
X#define YY_USE_CONST
X
X#endif	/* __STDC__ */
X#endif	/* ! __cplusplus */
X
X
X#ifdef __TURBOC__
X#define YY_USE_CONST
X#endif
X
X
X#ifndef YY_USE_CONST
X#ifndef const
X#define const
X#endif
X#endif
X
X
X#ifdef YY_USE_PROTOS
X#define YY_PROTO(proto) proto
X#else
X#define YY_PROTO(proto) ()
X#endif
X
X/* Returned upon end-of-file. */
X#define YY_NULL 0
X
X/* Promotes a possibly negative, possibly signed char to an unsigned
X * integer for use as an array index.  If the signed char is negative,
X * we want to instead treat it as an 8-bit unsigned char, hence the
X * double cast.
X */
X#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c)
X
X/* Enter a start condition.  This macro really ought to take a parameter,
X * but we do it the disgusting crufty way forced on us by the ()-less
X * definition of BEGIN.
X */
X#define BEGIN yy_start = 1 + 2 *
X
X/* Translate the current start state into a value that can be later handed
X * to BEGIN to return to the state.
X */
X#define YY_START ((yy_start - 1) / 2)
X
X/* Action number for EOF rule of a given start state. */
X#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
X
X/* Special action meaning "start processing a new file".  Now included
X * only for backward compatibility with previous versions of flex.
X */
X#define YY_NEW_FILE yyrestart( yyin )
X
X#define YY_END_OF_BUFFER_CHAR 0
X
X/* Size of default input buffer. */
X#define YY_BUF_SIZE 16384
X
Xtypedef struct yy_buffer_state *YY_BUFFER_STATE;
X
Xextern int yyleng;
Xextern FILE *yyin, *yyout;
X
X#ifdef __cplusplus
Xextern "C" {
X#endif
X	extern int yywrap YY_PROTO(( void ));
X#ifdef __cplusplus
X	}
X#endif
X
X#define EOB_ACT_CONTINUE_SCAN 0
X#define EOB_ACT_END_OF_FILE 1
X#define EOB_ACT_LAST_MATCH 2
X
X/* The funky do-while in the following #define is used to turn the definition
X * int a single C statement (which needs a semi-colon terminator).  This
X * avoids problems with code like:
X *
X * 	if ( condition_holds )
X *		yyless( 5 );
X *	else
X *		do_something_else();
X *
X * Prior to using the do-while the compiler would get upset at the
X * "else" because it interpreted the "if" statement as being all
X * done when it reached the ';' after the yyless() call.
X */
X
X/* Return all but the first 'n' matched characters back to the input stream. */
X
X#define yyless(n) \
X	do \
X		{ \
X		/* Undo effects of setting up yytext. */ \
X		*yy_cp = yy_hold_char; \
X		yy_c_buf_p = yy_cp = yy_bp + n - YY_MORE_ADJ; \
X		YY_DO_BEFORE_ACTION; /* set up yytext again */ \
X		} \
X	while ( 0 )
X
X#define unput(c) yyunput( c, yytext_ptr )
X
X
Xstruct yy_buffer_state
X	{
X	FILE *yy_input_file;
X
X	char *yy_ch_buf;		/* input buffer */
X	char *yy_buf_pos;		/* current position in input buffer */
X
X	/* Size of input buffer in bytes, not including room for EOB
X	 * characters.
X	 */
X	int yy_buf_size;
X
X	/* Number of characters read into yy_ch_buf, not including EOB
X	 * characters.
X	 */
X	int yy_n_chars;
X
X	/* Whether this is an "interactive" input source; if so, and
X	 * if we're using stdio for input, then we want to use getc()
X	 * instead of fread(), to make sure we stop fetching input after
X	 * each newline.
X	 */
X	int yy_is_interactive;
X
X	/* Whether to try to fill the input buffer when we reach the
X	 * end of it.
X	 */
X	int yy_fill_buffer;
X
X	/* Whether we've seen an EOF on this buffer. */
X	int yy_eof_status;
X#define EOF_NOT_SEEN 0
X	/* "Pending" happens when the EOF has been seen but there's still
X	 * some text to process.  Note that when we actually see the EOF,
X	 * we switch the status back to "not seen" (via yyrestart()), so
X	 * that the user can continue scanning by just pointing yyin at
X	 * a new input file.
X	 */
X#define EOF_PENDING 1
X	};
X
Xstatic YY_BUFFER_STATE yy_current_buffer = 0;
X
X/* We provide macros for accessing buffer states in case in the
X * future we want to put the buffer states in a more general
X * "scanner state".
X */
X#define YY_CURRENT_BUFFER yy_current_buffer
X
X
X/* yy_hold_char holds the character lost when yytext is formed. */
Xstatic char yy_hold_char;
X
Xstatic int yy_n_chars;		/* number of characters read into yy_ch_buf */
X
X
Xint yyleng;
X
X/* Points to current character in buffer. */
Xstatic char *yy_c_buf_p = (char *) 0;
Xstatic int yy_init = 1;		/* whether we need to initialize */
Xstatic int yy_start = 0;	/* start state number */
X
X/* Flag which is used to allow yywrap()'s to do buffer switches
X * instead of setting up a fresh yyin.  A bit of a hack ...
X */
Xstatic int yy_did_buffer_switch_on_eof;
X
Xstatic void yyunput YY_PROTO(( int c, char *buf_ptr ));
Xvoid yyrestart YY_PROTO(( FILE *input_file ));
Xvoid yy_switch_to_buffer YY_PROTO(( YY_BUFFER_STATE new_buffer ));
Xvoid yy_load_buffer_state YY_PROTO(( void ));
XYY_BUFFER_STATE yy_create_buffer YY_PROTO(( FILE *file, int size ));
Xvoid yy_delete_buffer YY_PROTO(( YY_BUFFER_STATE b ));
Xvoid yy_init_buffer YY_PROTO(( YY_BUFFER_STATE b, FILE *file ));
X
Xstatic int yy_start_stack_ptr = 0;
Xstatic int yy_start_stack_depth = 0;
Xstatic int *yy_start_stack = 0;
Xstatic void yy_push_state YY_PROTO(( int new_state ));
Xstatic void yy_pop_state YY_PROTO(( void ));
Xstatic int yy_top_state YY_PROTO(( void ));
X
X#ifndef yytext_ptr
Xstatic void yy_flex_strcpy YY_PROTO(( char *, const char * ));
X#endif
X
Xstatic void *yy_flex_alloc YY_PROTO(( unsigned int ));
Xstatic void *yy_flex_realloc YY_PROTO(( void *ptr, unsigned int ));
Xstatic void yy_flex_free YY_PROTO(( void * ));
X
X#define yy_new_buffer yy_create_buffer
X
X#define INITIAL 0
Xtypedef unsigned char YY_CHAR;
Xtypedef int yy_state_type;
XFILE *yyin = (FILE *) 0, *yyout = (FILE *) 0;
Xextern char *yytext;
X#define yytext_ptr yytext
X
X#ifdef __cplusplus
Xstatic int yyinput YY_PROTO(( void ));
X#else
Xstatic int input YY_PROTO(( void ));
X#endif
X
Xstatic yy_state_type yy_get_previous_state YY_PROTO(( void ));
Xstatic yy_state_type yy_try_NUL_trans YY_PROTO(( yy_state_type current_state ));
Xstatic int yy_get_next_buffer YY_PROTO(( void ));
Xstatic void yy_fatal_error YY_PROTO(( const char msg[] ));
X
X/* Done after the current pattern has been matched and before the
X * corresponding action - sets up yytext.
X */
X#define YY_DO_BEFORE_ACTION \
X	yytext_ptr = yy_bp; \
X	yyleng = yy_cp - yy_bp; \
X	yy_hold_char = *yy_cp; \
X	*yy_cp = '\0'; \
X	yy_c_buf_p = yy_cp;
X
X#define YY_END_OF_BUFFER 293
Xstatic const short int yy_accept[1012] =
X    {   0,
X      265,  265,  293,  291,  251,  252,  291,  291,  283,  284,
X      264,  285,  286,  291,  261,  265,  290,  279,  278,  280,
X      289,  258,  258,  258,  258,  258,  258,  258,  258,  258,
X      258,  258,  258,  258,  258,  258,  258,  258,  258,  258,
X      281,  282,  287,  288,  291,  251,    0,  277,    0,    0,
X        0,    0,    0,  264,  272,    0,  273,  262,  265,    0,
X      263,    0,  266,    0,    0,  258,  255,  258,  258,  258,
X      258,  258,  258,  258,  258,  258,  258,  258,  258,  258,
X      258,  258,  258,  258,  258,  258,  258,  258,  258,  258,
X      258,  258,  258,  258,  258,  258,  258,  258,  258,  258,
X
X      258,  258,  258,  258,  258,  258,  258,  258,  258,  258,
X      258,  258,  258,  258,  258,  258,  258,  258,  258,  258,
X      258,  258,  258,  258,  258,  258,  258,  258,  258,  258,
X      258,  258,  258,  258,  258,  258,  258,  258,  258,  258,
X      258,  258,  258,  258,  258,  258,  258,  258,  258,  258,
X      258,  258,  258,  258,  258,  258,   31,  258,  258,  258,
X        0,  253,  269,    0,  270,  269,    0,  269,    0,  272,
X        0,  275,    0,    0,    0,  273,    0,  276,    0,  271,
X      259,    0,  257,  256,  258,  258,  258,  258,  258,  258,
X      258,  258,  258,  258,  258,  258,  258,  258,  258,  258,
X
X      258,  258,  258,  258,  258,  258,   69,   70,   71,  258,
X      258,  258,  258,  258,  258,  258,  258,  258,  258,  258,
X      258,  258,  258,   93,  258,  258,   99,  100,  101,  258,
X      258,  258,  258,  258,  258,  258,  258,  258,  258,  258,
X      258,  258,  258,  258,  258,  128,  129,  130,  131,  132,
X      133,  258,  258,  258,  258,  258,  258,  258,  258,  258,
X      258,  258,  258,  258,  258,  258,  258,  258,   25,  258,
X      168,  258,  258,  258,  258,  258,  258,  180,  182,  183,
X      184,  258,  258,  258,  258,  258,  258,  226,  258,  258,
X      258,  258,  258,  258,  258,  258,  258,  199,  258,  258,
X
X      258,  258,  258,  258,  258,  258,  258,  258,  258,  230,
X      213,  214,  258,  258,  258,  258,  245,  258,  258,  258,
X      258,  258,  258,  258,  258,  258,  258,  258,  258,  258,
X      258,  258,  268,  267,    0,  272,  254,    0,  273,  271,
X      274,  260,  256,  258,  258,  258,  258,  258,  258,  258,
X      258,  258,  258,  258,  258,  258,  258,  258,  258,   21,
X      258,  258,   22,  258,  258,    9,   72,  258,  258,  258,
X      258,   79,  258,  258,   84,   85,  258,   86,  258,  258,
X       92,   96,  258,  258,  258,  102,  258,  258,  258,  258,
X      110,  258,  258,  258,  115,  116,  117,  258,  258,  123,
X
X      258,  258,  126,  134,  258,  136,  258,  258,  145,  154,
X      157,  158,  159,  156,  155,  258,  258,  258,  258,  220,
X      258,  258,  166,  167,  258,  258,  258,  169,  258,  171,
X      172,  258,  177,  258,  179,  258,  185,  258,  187,  258,
X      189,  258,  258,  258,  192,  258,  258,  197,  198,  247,
X      258,   26,  258,  200,  258,  202,  203,  258,  208,  258,
X      210,  258,  258,  258,  258,  258,  258,  215,  258,  258,
X      258,  258,  258,  258,  258,  258,  258,  258,  258,  258,
X      258,  219,  258,  258,  258,  258,   29,  258,  246,  258,
X      258,  258,  258,  258,  258,  258,  258,  258,  258,  258,
X
X      258,  258,  237,  258,  258,  258,  258,  258,  258,  258,
X      258,  258,  258,  258,  258,    1,  258,  258,   75,   76,
X      258,  258,  239,  258,  258,  258,  258,  258,  258,  258,
X      258,  258,  105,  106,  258,    5,   14,  236,   24,  258,
X      258,  258,  258,  258,  258,  258,  258,  258,  258,  258,
X      258,  235,  258,  258,  258,  258,  258,  258,  178,  181,
X      258,  258,  258,  258,  227,  258,  238,  258,  258,  258,
X      258,  209,  258,  258,  258,  258,  258,  258,  258,  258,
X      258,  258,  258,  258,  258,  258,  258,   27,  258,  258,
X      258,  248,  258,  258,  258,  258,  258,   48,  258,  258,
X
X        3,  258,  258,  258,  258,  258,  258,  258,  258,  258,
X      258,  258,  258,  258,  258,  258,  242,   62,   63,  258,
X       65,  258,   66,  258,  258,   73,  258,  258,  258,  258,
X       23,  258,  244,  258,   94,   95,  258,  258,  103,  258,
X      258,  258,  258,  241,  258,  258,  127,  135,  258,  258,
X      258,  161,  258,  258,  258,  258,  258,  258,  258,  258,
X      240,  186,  258,  258,  228,  258,  258,  258,  258,  258,
X      243,  258,  258,    6,  258,  258,   17,  258,  258,  258,
X       10,  258,  258,  216,  217,  258,  234,  258,   16,  258,
X      258,   34,  258,  258,   49,  258,  258,  258,  258,  258,
X
X      258,  258,  258,  258,  258,  258,  258,  258,   51,   52,
X       53,   54,  258,   56,  258,  258,   64,   28,   67,  258,
X       74,  258,   30,   80,   81,   82,   83,   87,  258,   97,
X       98,  258,    2,  104,  258,  111,  112,  113,  114,  118,
X      258,  258,  258,  137,  258,  258,  258,  258,  162,  163,
X      164,  165,  258,  258,  258,  258,  258,  258,  258,  170,
X      258,  188,  258,  258,  193,  194,  195,  196,  258,  258,
X      201,  258,  258,  258,  258,  258,  258,   11,  258,  258,
X      258,  218,  258,  258,  258,  258,  258,   13,  258,  258,
X      258,  258,  258,  258,  258,  258,  258,  258,  258,  258,
X
X      258,  258,   58,   59,   60,   61,  258,   77,   78,   88,
X       89,   90,   91,  258,  107,  108,  109,  119,  120,  121,
X      122,  124,  258,  138,  139,  140,  141,  142,  143,  258,
X      258,  258,  258,  258,  258,  258,  258,  258,  258,  258,
X      258,  258,  258,  258,  173,  174,  175,  176,  190,  191,
X      258,  258,  258,  204,  205,  206,  207,  258,  258,  258,
X      258,  231,  258,  232,  258,  258,  258,  258,  258,   20,
X      258,   41,  258,  258,  258,  258,  258,  258,  258,  258,
X      258,  258,   55,  258,   68,  258,  125,  144,  160,  146,
X      147,  148,  151,  152,  153,  150,  149,  258,  258,   15,
X
X      258,  258,  258,  258,  258,  258,  258,  258,    7,  258,
X      258,  258,   12,  233,  258,  258,  258,   19,  258,  258,
X       45,  258,  258,   37,   40,  258,  258,  258,  258,  258,
X       32,    4,  221,  258,  258,  258,  258,  258,  258,  258,
X        8,  258,  258,  258,   33,  258,  258,  258,  258,   38,
X      258,  258,  258,  258,   50,   57,  258,  258,  258,  258,
X      258,  258,  258,  258,  212,  258,  258,  250,   47,  258,
X      258,  258,  258,   43,  258,  258,  224,  258,  258,  258,
X      249,  211,  258,   18,   46,   39,  258,   44,  258,  258,
X      225,  258,  258,  258,  258,  258,  258,  258,  258,  229,
X
X      258,  222,  258,   35,  258,   42,  223,  258,  258,   36,
X        0
X    } ;
X
Xstatic const int yy_ec[256] =
X    {   0,
X        1,    1,    1,    1,    1,    1,    1,    1,    2,    3,
X        1,    2,    1,    1,    1,    1,    1,    1,    1,    1,
X        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
X        1,    2,    1,    4,    5,    1,    1,    1,    6,    7,
X        8,    9,   10,   11,   10,   12,   13,   14,   15,   16,
X       17,   18,   19,   20,   20,   21,   21,   22,    1,   23,
X       24,   25,   26,    1,   27,   28,   29,   30,   31,   32,
X       33,   34,   35,   36,   37,   38,   39,   40,   41,   42,
X       43,   44,   45,   46,   47,   48,   49,   50,   51,   52,
X       53,   54,   55,    1,   56,    1,   27,   28,   29,   30,
X
X       31,   32,   33,   34,   35,   36,   37,   38,   39,   57,
X       41,   42,   43,   44,   45,   46,   47,   48,   49,   50,
X       51,   52,   58,    1,   59,    1,    1,    1,    1,    1,
X        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
X        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
X        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
X        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
X        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
X        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
X        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
X
X        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
X        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
X        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
X        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
X        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
X        1,    1,    1,    1,    1
X    } ;
X
Xstatic const int yy_meta[60] =
X    {   0,
X        1,    1,    2,    1,    1,    1,    1,    1,    1,    3,
X        1,    4,    5,    6,    6,    6,    6,    6,    6,    6,
X        6,    7,    1,    1,    8,    1,    9,    9,    9,   10,
X       11,   10,   12,   12,   12,   12,   12,   13,   12,   12,
X       12,   12,   12,   12,   12,   12,   12,   12,   12,   12,
X       12,   12,    1,    1,    1,   12,   12,    1,    1
X    } ;
X
Xstatic const short int yy_base[1029] =
X    {   0,
X        0,  300,  299, 3487,  290, 3487,   56,   58, 3487, 3487,
X       51, 3487,   59,  268,  101,   50, 3487,    0, 3487, 3487,
X     3487,  139,   73,  115,  184,   76,  229,   70,   69,  271,
X       80,  313,  116,  114,  118,   72,  358,  147,  151,   74,
X     3487, 3487, 3487, 3487,  263,  263,   80, 3487,  259,  100,
X      117,  203,   91,  218,  163,   81,  171,  154,  174,  166,
X     3487,    0, 3487,  150,    0,  165, 3487,  205,  176,  231,
X      235,  177,  239,  194,  241,  233,  266,  272,  268,  282,
X      304,  269,  267,  312,  311,  323,  324,  352,  353,  354,
X      271,  355,  356,  359,  366,  369,  390,  397,  400,  401,
X
X      416,  404,  408,  418,  421,  411,  424,  431,  437,  438,
X      449,  450,  466,  467,  471,  474,  487,  317,  479,  481,
X      204,  489,  492,  507,  518,  504,  512,  531,  533,  537,
X      538,  539,  551,  559,  310,  554,  197,  564,  572,  373,
X      565,  576,  577,  578,  591,  594,  595,  601,  596,  579,
X      602,  620,  621,  614,  622,  638,  640,  642,  643,  644,
X      155, 3487, 3487,  147, 3487, 3487,  166,  176,  394, 3487,
X      136, 3487,   90,  120,  167, 3487,  120, 3487,  669,  386,
X       69,   80, 3487,   91,  650,  646,  654,  680,  657,  681,
X      682,  683,  685,  693,  688,  696,  700,  703,  704,  708,
X
X      706,  711,  722,  727,  730,  732,  738,  740,  742,  746,
X      745,  748,  756,  752,  758,  760,  766,  759,  777,  783,
X      778,  782,  790,  800,  806,  807,  808,  812,  813,  814,
X      818,  819,  820,  826,  830,  832,  833,  836,  851,  854,
X      855,  858,  862,  859,  866,  873,  880,  883,  884,  887,
X      890,  895,  897,  898,  900,  901,  902,  905,  908,  913,
X      920,  918,  934,  930,  942,  947,  949,  952,  953,  955,
X      957,  965,  959,  973,  977,  978,  979,  980,  993,  994,
X      995,  996,  997, 1000, 1007, 1012, 1011, 1015, 1019, 1026,
X     1022, 1034, 1030, 1047, 1037, 1033, 1048, 1052, 1060, 1065,
X
X     1066, 1062, 1067, 1070, 1073, 1078, 1080, 1091, 1083, 1095,
X     1097, 1108, 1098, 1103, 1110, 1113, 1114, 1118, 1120, 1121,
X     1125, 1131, 1128, 1138, 1141, 1142, 1154, 1155, 1157, 1156,
X     1167, 1168, 3487, 3487, 1186, 1163, 3487, 1201, 1178, 3487,
X     3487, 3487,   50, 1210, 1211, 1212, 1213, 1246, 1216, 1214,
X     1218, 1217, 1228, 1233, 1229, 1235, 1241, 1252, 1253, 1247,
X     1258, 1254, 1274, 1276, 1277, 1280, 1287, 1288, 1292, 1294,
X     1295, 1298, 1299, 1306, 1312, 1313, 1316, 1317, 1328, 1329,
X     1330, 1331, 1334, 1335, 1336, 1342, 1347, 1348, 1350, 1346,
X     1349, 1368, 1372, 1373, 1379, 1383, 1384, 1386, 1387, 1389,
X
X     1391, 1394, 1399, 1401, 1402, 1405, 1412, 1415, 1417, 1419,
X     1422, 1423, 1425, 1429, 1430, 1435, 1436, 1437, 1441, 1443,
X     1449, 1451, 1454, 1455, 1456, 1459, 1467, 1471, 1472, 1473,
X     1474, 1477, 1475, 1478, 1485, 1488, 1489, 1493, 1492, 1495,
X     1496, 1503, 1510, 1511, 1513, 1516, 1517, 1518, 1521, 1528,
X     1529, 1531, 1532, 1533, 1536, 1539, 1546, 1549, 1550, 1552,
X     1556, 1562, 1563, 1564, 1567, 1568, 1569, 1575, 1579, 1581,
X     1586, 1592, 1596, 1602, 1598, 1604, 1606, 1609, 1610, 1616,
X     1622, 1621, 1627, 1628, 1634, 1635, 1642, 1645, 1647, 1649,
X     1650, 1655, 1652, 1653, 1663, 1665, 1673, 1671, 1677, 1688,
X
X     1689, 1690, 1691, 1694, 1695, 1707, 1711, 1712, 1713, 1718,
X     1724, 1728, 1735, 1731, 1738, 1741, 1746, 1751, 1756, 1757,
X     1758, 1759, 1761, 1769, 1764, 1771, 1772, 1774, 1779, 1785,
X     1790, 1792, 1796, 1797, 1808, 1810, 1811, 1813, 1815, 1816,
X     1818, 1821, 1826, 1828, 1829, 1834, 1833, 1844, 1845, 1848,
X     1849, 1850, 1851, 1852, 1863, 1867, 1869, 1880, 1881, 1883,
X     1886, 1897, 1899, 1901, 1902, 1904, 1905, 1907, 1912, 1909,
X     1915, 1917, 1922, 1920, 1927, 1930, 1943, 1945, 1925, 1946,
X     1951, 1959, 1962, 1964, 1961, 1965, 1972, 1976, 1977, 1983,
X     1984, 1987, 1990, 1995, 1997, 2002, 2008, 2007, 2010, 2009,
X
X     2013, 2014, 2026, 2031, 2032, 2033, 2034, 2036, 2039, 2038,
X     2051, 2054, 2071, 2058, 2059, 2069, 2079, 2081, 2082, 2084,
X     2085, 2092, 2095, 2096, 2098, 2099, 2100, 2106, 2111, 2123,
X     2121, 2128, 2131, 2139, 2129, 2134, 2145, 2147, 2150, 2151,
X     2152, 2162, 2173, 2168, 2176, 2175, 2178, 2180, 2181, 2183,
X     2188, 2193, 2194, 2196, 2212, 2209, 2219, 2220, 2224, 2230,
X     2198, 2231, 2236, 2238, 2243, 2244, 2260, 2258, 2266, 2273,
X     2271, 2276, 2277, 2278, 2279, 2284, 2290, 2294, 2295, 2296,
X     2297, 2307, 2309, 2312, 2315, 2322, 2325, 2326, 2327, 2330,
X     2337, 2338, 2341, 2343, 2344, 2348, 2351, 2355, 2354, 2356,
X
X     2361, 2362, 2366, 2367, 2374, 2377, 2379, 2380, 2385, 2392,
X     2397, 2399, 2402, 2403, 2405, 2425, 2409, 2410, 2413, 2430,
X     2431, 2435, 2433, 2438, 2441, 2443, 2445, 2446, 2456, 2461,
X     2463, 2464, 2466, 2467, 2477, 2474, 2481, 2482, 2484, 2485,
X     2495, 2500, 2501, 2502, 2524, 2506, 2534, 2494, 2507, 2513,
X     2532, 2535, 2536, 2539, 2540, 2542, 2546, 2558, 2553, 2559,
X     2581, 2564, 2570, 2587, 2588, 2589, 2592, 2594, 2595, 2599,
X     2600, 2610, 2606, 2607, 2618, 2621, 2622, 2624, 2625, 2628,
X     2629, 2632, 2640, 2644, 2646, 2647, 2648, 2650, 2652, 2654,
X     2658, 2664, 2672, 2669, 2675, 2676, 2692, 2693, 2694, 2695,
X
X     2696, 2700, 2706, 2707, 2708, 2710, 2712, 2714, 2722, 2724,
X     2726, 2728, 2730, 2732, 2738, 2740, 2742, 2743, 2744, 2746,
X     2748, 2754, 2756, 2758, 2760, 2761, 2762, 2764, 2766, 2777,
X     2774, 2778, 2780, 2781, 2782, 2784, 2785, 2788, 2792, 2795,
X     2796, 2807, 2809, 2810, 2822, 2824, 2826, 2827, 2828, 2830,
X     2838, 2840, 2843, 2844, 2845, 2846, 2848, 2850, 2858, 2860,
X     2863, 2861, 2864, 2868, 2874, 2871, 2876, 2879, 2884, 2886,
X     2891, 2892, 2894, 2902, 2906, 2907, 2909, 2910, 2921, 2922,
X     2924, 2928, 2927, 2929, 2932, 2934, 2940, 2942, 2945, 2947,
X     2948, 2950, 2955, 2958, 2960, 2961, 2963, 2965, 2968, 2971,
X
X     2973, 2975, 2976, 2979, 2983, 2981, 2989, 2993, 2994, 2996,
X     2999, 3004, 3006, 3007, 3017, 3011, 3023, 3019, 3024, 3027,
X     3034, 3037, 3038, 3042, 3044, 3045, 3048, 3049, 3052, 3059,
X     3056, 3060, 3063, 3067, 3070, 3075, 3078, 3081, 3085, 3086,
X     3082, 3099, 3096, 3101, 3104, 3106, 3107, 3109, 3111, 3121,
X     3122, 3125, 3126, 3136, 3137, 3138, 3139, 3141, 3151, 3157,
X     3159, 3155, 3156, 3174, 3175, 3176, 3178, 3179, 3181, 3182,
X     3189, 3192, 3193, 3194, 3199, 3209, 3210, 3211, 3212, 3215,
X     3216, 3222, 3223, 3229, 3230, 3234, 3235, 3240, 3241, 3245,
X     3246, 3247, 3251, 3252, 3253, 3258, 3259, 3269, 3266, 3277,
X
X     3282, 3283, 3285, 3288, 3289, 3293, 3296, 3300, 3303, 3306,
X     3487, 3338, 3351, 3361, 3366, 3375, 3388, 3401, 3414, 3422,
X     3433, 3444, 3445, 3451, 3456, 3467, 3471, 3473
X    } ;
X
Xstatic const short int yy_def[1029] =
X    {   0,
X     1011,    1, 1011, 1011, 1011, 1011, 1012, 1013, 1011, 1011,
X     1011, 1011, 1011, 1011, 1011, 1014, 1011, 1015, 1011, 1011,
X     1011, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016,   27,
X     1016,   27, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016,
X     1011, 1011, 1011, 1011, 1017, 1011, 1012, 1011, 1012, 1018,
X     1018, 1011, 1019, 1011, 1020, 1021, 1020,   15, 1014, 1022,
X     1011, 1023, 1011, 1024, 1025, 1016, 1011, 1016, 1016, 1016,
X     1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016,
X     1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016,
X     1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016,
X
X     1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016,
X     1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016,
X     1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016,
X     1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016,
X     1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016,
X     1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016,
X     1017, 1011, 1011, 1018, 1011, 1011, 1018, 1018, 1018, 1011,
X     1026, 1011, 1021, 1021, 1021, 1011, 1027, 1011, 1011, 1022,
X     1023, 1024, 1011, 1028, 1016, 1016, 1016, 1016, 1016, 1016,
X     1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016,
X
X     1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016,
X     1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016,
X     1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016,
X     1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016,
X     1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016,
X     1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016,
X     1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016,
X     1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016,
X     1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016,
X     1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016,
X
X     1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016,
X     1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016,
X     1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016,
X     1016, 1016, 1011, 1011, 1011, 1026, 1011, 1011, 1027, 1011,
X     1011, 1011, 1028, 1016, 1016, 1016, 1016, 1016, 1016, 1016,
X     1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016,
X     1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016,
X     1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016,
X     1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016,
X     1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016,
X
X     1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016,
X     1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016,
X     1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016,
X     1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016,
X     1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016,
X     1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016,
X     1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016,
X     1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016,
X     1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016,
X     1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016,
X
X     1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016,
X     1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016,
X     1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016,
X     1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016,
X     1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016,
X     1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016,
X     1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016,
X     1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016,
X     1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016,
X     1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016,
X
X     1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016,
X     1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016,
X     1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016,
X     1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016,
X     1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016,
X     1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016,
X     1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016,
X     1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016,
X     1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016,
X     1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016,
X
X     1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016,
X     1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016,
X     1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016,
X     1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016,
X     1016, 1016, 1016, 1016, 1016, 1016, 1016,  113, 1016, 1016,
X     1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016,
X     1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016,
X     1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016,
X     1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016,
X     1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016,
X
X     1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016,
X     1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016,
X     1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016,
X     1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016,
X     1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016,
X     1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016,
X     1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016,
X     1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016,
X     1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016,
X     1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016,
X
X     1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016,
X     1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016,
X     1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016,
X     1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016,
X     1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016,
X     1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016,
X     1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016,
X     1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016,
X     1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016,
X     1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016,
X
X     1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016,
X        0, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011,
X     1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011
X    } ;
X
Xstatic const short int yy_nxt[3547] =
X    {   0,
X        4,    5,    6,    7,    4,    8,    9,   10,    4,   11,
X       12,   13,   14,   15,   16,   16,   16,   16,   16,   16,
X       16,   17,   18,   19,   20,   21,   22,   23,   24,   25,
X       26,   27,   28,   29,   30,   31,   29,   32,   33,   34,
X       29,   35,   29,   36,   37,   38,   29,   39,   40,   29,
X       29,   29,   41,    4,   42,   29,   34,   43,   44,   48,
X       51,   57,   65,   52,   54,   54,   54,   54,   54,   54,
X       54,   54,   55,   55,   55,   55,   55,   55,   55,   55,
X       60,   65,   65,   48,   65,   65,   65,   63,   65,  174,
X       67,   67,   65,   67,   67,   67,  168,   67,  174,   76,
X
X      107,   67,  147,   65,  183,  163,  342,   77,  160,   49,
X      108,   53,   57,   78,   58,   58,   58,   58,   58,   58,
X       58,   59,  165,   79,  123,   96,   65,   65,   65,  338,
X       65,   60,  337,   49,  175,   67,   67,   67,   61,   67,
X      141,   80,  137,  175,  142,  335,  138,  169,   81, 1011,
X       62,   65,   82,  164,  143,   83,  139,  162,  144,   65,
X       67,  145,  140,   65,  146,   68,   69,   70,   67, 1011,
X      164,  333,   67,  155,  183,  179,   71,   65,   72,  173,
X      156,  333,   73,   74,   75,   57,   67,  157,   65,   65,
X      158,  159,  170,  171,  172,   72,   65,   67,   67,   84,
X
X      176,  177,  178, 1011,   60,   67,   65,  191,  166,   65,
X       85,   63,   86,   87,   88,   67,   65,   65,   67,  164,
X      187,   89,   90,   91,   92,   67,   67,   93,   94,  164,
X       95,   54,   54,   54,   54,   54,   54,   54,   54,  194,
X       91,   65,  185,   65,   97,   65,  305,   65,  276,  186,
X       67,   65,   67,   65,   67,   98,   67,   99,  100,  188,
X       67, 1011,   67,  101,   46,  162,  102,  103,  104,  192,
X      196,  189,  105,  106,  195,  190,   56,  197,   65,   65,
X       65,   65,  193,   65,   65,  104,  109,   67,   67,   67,
X       67,   46,   67,   67,   65,  205,  206,  110, 1011,  111,
X
X      112,  219,  113,   67,   45,  114, 1011,  198,  115,  116,
X      117,  118,  199,  200,  119,  120,   65,  121, 1011,  201,
X      122, 1011,   65,   65,   65,   67,  202,  117,  124,   65,
X      203,   67,   67,   67,  204,   65,   65, 1011,   67,  125,
X      210,  126,  127,  207,   67,   67,  208,  128,  211,  209,
X      129,  130,  131,  132,  303,  212,  133,  134,  215,  135,
X      271,  213,  136,  214,   65,   65,   65,   65,   65,  131,
X       65,   65, 1011,   67,   67,   67,   67,   67,   65,   67,
X       67,   65, 1011,  216,  148,   65,  221,   67, 1011, 1011,
X       67,  149,  150,  217,   67, 1011, 1011,  225,  151,  334,
X
X      218,  220,   65,  152,  222,  223,  153,  224,  154,   65,
X      308,   67,   65,   65,  226,  340,   65,  341,   67,  227,
X       65,   67,   67,   65,  228,   67,  230,  229,   65,   67,
X       65, 1011,   67,   65,  231,  235,   65,   67,  233,   67,
X      234,  232,   67,   65,  238,   67,  236,  164,  240,   65,
X       65,  241,   67, 1011,  239,  237,  242,  243,   67,   67,
X     1011,   65,   65, 1011,  246,  247,  248,  252,  249,  244,
X       67,   67,  237, 1011,  250,  253,  245,  254,   65,   65,
X     1011,  251,  255,   65,  257, 1011,   65,   67,   67,  256,
X     1011,   65,   67,   65,  254,   67,  258, 1011,  259,   65,
X
X       67,   65,   67,  260,   65,  261,  263, 1011,   67,  272,
X       67,  264, 1011,   67,  273,  265,   65,  267, 1011,   65,
X      266,  262,  261,  263,   65,   67,  274,  275,   67,  277,
X       65,  268,  269,   67,  270,  278,  279, 1011,  280,   67,
X      288,  281,  286,   65,  287,   65,  289,  282, 1011,   65,
X       65,   65,   67, 1011,   67,  283, 1011,  284,   67,   67,
X       67, 1011,  285,   65, 1011,  294,   65,  295,  293, 1011,
X      290,   65,   67,  291,  284,   67,   65,   65,  296,  297,
X       67,  299,  298,  292,   65,   67,   67,  290,   65,   65,
X       65,   65,  300,   67,  304,  296, 1011,   67,   67,   67,
X
X       67, 1011, 1011,   65,  301,  302,   65,   65,   65,  306,
X      309,  307,   67,   65,   65,   67,   67,   67,  311,  312,
X      321,  315,   67,   67,  310,  313,   65, 1011,  307, 1011,
X     1011,  314,   65,   65,   65,   67,  320, 1011,  318,  316,
X      317,   67,   67,   67, 1011,  319,  323,  325,  322,  327,
X       65, 1011,   65,  326,   65,   65,   65, 1011,   65,   67,
X      324,   67,   65,   67,   67,   67,   65,   67,  329,   65,
X      326,   67, 1011,  332, 1011,   67, 1011,  330,   67, 1011,
X      331,  328,  180,  180,  180,  180,  180,  180,  180,  180,
X      344,  345,   65,   65,   65,   65,  349,   65, 1011,  346,
X
X       65,   67,   67,   67,   67,   65,   67,  350,   65,   67,
X      347,  353,   65,  349,   67,   65,   65,   67,   65, 1011,
X       65,   67, 1011,   65,   67,   67, 1011,   67,  352,   67,
X      351,  355,   67,  354,   65,  348,  356, 1011,  360,   65,
X     1011,  359,   65,   67,   65,  357,  361, 1011,   67,  358,
X       65,   67,   65,   67,   65,  364,  362,   65,   65,   67,
X       65,   67,  366,   67,   65,  363,   67,   67,   65,   67,
X       65,   65,   65,   67,  365,  367, 1011,   67,   65,   67,
X       67,   67, 1011, 1011, 1011,  368,  373,   67, 1011,   65,
X       65,  371,  374,  369,   65,   65,  375,  370,   67,   67,
X
X     1011, 1011,   65,   67,   67,  372, 1011, 1011,  371,  376,
X      377,   67,   65, 1011, 1011,  382,  378,  381,   65,   65,
X       65,   67,  380,  379,   65,   65,   65,   67,   67,   67,
X       65,   65,   65,   67,   67,   67,  384,  385,   65,   67,
X       67,   67,   65,  386,   65,   65, 1011,   67,   65, 1011,
X     1011,   67, 1011,   67,   67,  383, 1011,   67,  387,  393,
X     1011,  389,  394,   65,  388,  390,   65,   65, 1011,  392,
X       65,   65,   67, 1011,   65,   67,   67,  391,   65,   67,
X       67, 1011,  390,   67, 1011,   65,  396,   67,  395,  400,
X      401, 1011,   65,  397,   67,   65,   65, 1011,  399,   65,
X
X      398,   67,   65,  402,   67,   67,  403,   65,   67,   65,
X       65,   67,   65,   65,   65, 1011,   67,   65,   67,   67,
X       65,   67,   67,   67,  404,   65,   67,  406, 1011,   67,
X       65, 1011,   65, 1011,   67, 1011, 1011,  405,  411,   67,
X      408,   67,   65,  413,  418,  407,   65,  410, 1011,  409,
X      415,   67,  419,  412,   65,   67,  421,  408,  414,   65,
X      416,   65,  420,   67,   65,   65,  417,   65,   67,   65,
X       67,   65, 1011,   67,   67, 1011,   67,   65,   67,  422,
X       67,  424, 1011,  426,  423,   65,   67, 1011, 1011,   65,
X       65,   65,   65, 1011,   67,  427,  430,  425,   67,   67,
X
X       67,   67,  431,  428,  433,   65,   65,   65,   65,   65,
X      429,  434,   65,  432,   67,   67,   67,   67,   67,   65,
X     1011,   67,  435,   65,   65,  437, 1011,   65,   67,  439,
X      443,   65,   67,   67,   65,  436,   67,  438,   65, 1011,
X       67, 1011,   65,   67, 1011,   65,   65,   67,  447,   65,
X      442,   67,  440,  441,   67,   67,  446, 1011,   67,   65,
X       65, 1011,  449,  451,   65,  452,  445,  442,   67,   67,
X      444,  448,   65,   67,   65, 1011,  450,   65,   65,   65,
X     1011,   67,   65,   67,  453,   65,   67,   67,   67,  459,
X       65,   67,   65, 1011,   67,   65, 1011, 1011,  454,   67,
X
X      460,   67,  456,   65,   67,  455,  458,   65,  457,   65,
X       65,  463,   67,  461,  464,   65,   67,  466,   67,   67,
X       65,  467,   65,  468,   67,   65,   65, 1011,  462,   67,
X       65,   67,   65,   65,   67,   67,  465,   65, 1011,   67,
X       65,   67,   67,   65,  472,  469,   67,  471,  470,   67,
X       65, 1011,   67,   65,   65, 1011, 1011,  473,  475,   67,
X      474, 1011,   67,   67,  477,  476,   65,   65,   65,   65,
X      483,  478, 1011,  480,  479,   67,   67,   67,   67,   65,
X       65,  481,  482, 1011, 1011,  487, 1011, 1011,   67,   67,
X     1011,  484,  170,  488,  172,  485,  486, 1011,  489,  336,
X
X      336,  336,  336,  336,  336,  336,  336,  176, 1011,  178,
X     1011, 1011, 1011,  486,  339,  339,  339,  339,  339,  339,
X      339,  339,   65,   65,   65,   65,   65, 1011,   65,   65,
X       65,   67,   67,   67,   67,   67,  490,   67,   67,   67,
X       65,   65, 1011,  503,  504,   65, 1011,   65, 1011,   67,
X       67,  491, 1011,   65,   67,  492,   67,  493,   65,   65,
X      502,  509,   67,  505,   65,   65,   65,   67,   67,  508,
X       65, 1011,  494,   67,   67,   67,  507,  495,  506,   67,
X      496,  510, 1011,  512,  513,  497,   65,  498,   65,   65,
X      499,  500,   65,  501,  514,   67,  511,   67,   67,   65,
X
X       65,   67,  497, 1011,   65, 1011,   65,   65,   67,   67,
X       65,   65,  515,   67,  517,   67,   67, 1011,   65,   67,
X       67,  516, 1011, 1011,   65,   65,  519,   67,   65,   65,
X     1011,  520,  518,   67,   67,  523, 1011,   67,   67,  521,
X       65,   65,   65,   65, 1011,  522,   65,   65,   65,   67,
X       67,   67,   67,  524,   65,   67,   67,   67,   65,   65,
X       65,   65,   65,   67, 1011, 1011, 1011,   67,   67,   67,
X       67,   67,  526,  531,  525,  530,  529, 1011, 1011, 1011,
X       65, 1011,  533,  528,   65,   65,  527,  534,  532,   67,
X      535,   65,  530,   67,   67,   65,   65,  536,   65,   65,
X
X       67,   65,  538,   65,   67,   67,   65,   67,   67,  537,
X       67,   65,   67,   65,   65,   67, 1011,   65,  539, 1011,
X       67, 1011,   67,   67,   65,  542,   67,   65,  545,   65,
X      541,   65,  540,   67,   65,   65,   67,   65,   67,  543,
X       67,   65,   65,   67,   67, 1011,   67,   65,   65,   65,
X       67,   67,  546,   65,  544,   65,   67,   67,   67,  547,
X     1011,   65,   67,   65,   67,  550,   65,   65,   65,  551,
X       67,   65,   67,  549,  548,   67,   67,   67,  552,   65,
X       67,  553,  554,   65,   65,   65,   65,   65,   67,   65,
X       65,  548,   67,   67,   67,   67,   67,   65,   67,   67,
X
X       65,   65,  555,  556,   65,   65,   67,   65,   65,   67,
X       67, 1011, 1011,   67,   67,   65,   67,   67,  557,  561,
X      558,  559,   65,   65,   67,   65, 1011, 1011,   65,   65,
X       65,   67,   67,   65,   67,  562,  560,   67,   67,   67,
X       65,   65,   67,   65,   65,   65,  567,  563,   65,   67,
X       67,   65,   67,   67,   67,  566, 1011,   67,   65,  565,
X       67,   65,   65, 1011,   65,  564,  568,   67,   65, 1011,
X       67,   67,  566,   67,   65,   65,   65,   67,  569,   65,
X       65,   65,  570,   67,   67,   67, 1011,   65,   67,   67,
X       67,   65,  571,   65, 1011,  572,   67, 1011,   65,  573,
X
X       67,  577,   67,  575,   65,  580,  574,   67,   65,  576,
X       65,  581,  579,   67,   65,  578,   65,   67,   65,   67,
X      582,   65,   65,   67,  586,   67,  583,   67,   65, 1011,
X       67,   67, 1011,   65,   65, 1011, 1011,   67,  590,   65,
X       65,  584,   67,   67,  587,  585,   65,   65,   67,   67,
X      591,  588,  592,  589,   65,   67,   67,   65,  594,   65,
X      593,   65,   65,   67,   65,   65,   67,   65,   67, 1011,
X       67,   67, 1011,   67,   67,   65,   67,   65,  598,  596,
X      602,  600,  595,   65,   67,   65,   67, 1011, 1011,   65,
X      597, 1011,   67,  599,   67, 1011,  601,  603,   67,  605,
X
X       65,   65,   65,   65,  604, 1011,   65,   65, 1011,   67,
X       67,   67,   67, 1011,  606,   67,   67,  607, 1011,   65,
X     1011,  604,  608,   65,   65,   65, 1011,  609,   67,  611,
X       65,  610,   67,   67,   67,  612,   65,  614,  615,   67,
X       65,  617,  619,   65,  616,   67,  613,   65, 1011,   67,
X       65, 1011,   67,   65,  622, 1011,   67,  621,   65,   67,
X      618,  620,   67,   65,  623, 1011,  625,   67,   65,   65,
X       65,   65,   67,   65,  624,  626,   65,   67,   67,   67,
X       67,   65,   67,   65,   65,   67,   65, 1011,  635,  636,
X       67,   65,   67,   67,  627,   67,  629,   65, 1011,  631,
X
X       67,  633,   65,  628,   65, 1011,   67,  632,   65,   65,
X     1011,   67, 1011,   67,  638, 1011,  630,   67,   67,  639,
X       65,  634,   65,   65,  637,   65, 1011,   65,   65,   67,
X       65,   67,   67,   65,   67,  640,   67,   67,   65,   67,
X       65,   65,   67, 1011, 1011,   65,   65,   67,  644,   67,
X       67,  645,  646,  641,   67,   67,   65,   65,  648,  643,
X       65,   65,   65,   65,   65,   67,   67, 1011,  642,   67,
X       67,   67,   67,   67, 1011,   65,  647,  649,  650,   65,
X     1011,   65,  652,  651,   67, 1011,  653,  654,   67,  656,
X       67,  657,   65,   65,  658,   65, 1011,  659,   65, 1011,
X
X      651,   67,   67, 1011,   67,  655, 1011,   67,  657,   65,
X      661,   65,  660,   65,   65,  662,   65,   65,   67,   65,
X       67,   65,   67,   67,   65,   67,   67,   65,   67,   65,
X       67, 1011,   65,   67,   65, 1011,   67,   65,   67,   65,
X      663,   67,   65,   67,  664,  671,   67, 1011,   67,  665,
X      666,   67,  670,  669,  668,   65,  674,   65,   65, 1011,
X      667, 1011,  672,   65,   67,  673,   67,   67,  678,  676,
X      675,   65,   67,   65,   65,  677,   65,   65, 1011,  680,
X       67, 1011,   67,   67,   65,   67,   67,  681,   65,   65,
X      683,  679,  682,   67,  685,   65,   65,   67,   67,   65,
X
X      684, 1011,   65, 1011,   67,   67, 1011,   65,   67,   65,
X      687,   67,  689,  688,   65,  686,   67,  684,   67,   65,
X       65,   65,   65,   67, 1011,   65,   65, 1011,   67,   67,
X       67,   67, 1011,  690,   67,   67,  693,  696,   65,  691,
X      695,  692,  694,   65,   65,   65,   65,   67,   65, 1011,
X       65,   65,   67,   67,   67,   67, 1011,   67,  697,   67,
X       67,  703,  704,   65,  706,  698,   65,  701, 1011, 1011,
X       65,   65,   67,  702, 1011,   67,  699,  700,  705,   67,
X       67,   65,  698,   65,  709,  710,  711,  712,  707, 1011,
X       67,   65,   67,   65,   65,  705,   65,   65,  714,  715,
X
X       67,  713,   67,   67,   65,   67,   67,   65,   65,  708,
X       65,   65,   65,   67,  717,  714,   67,   67,   65,   67,
X       67,   67, 1011,   65,  720, 1011,  719,   67, 1011, 1011,
X      721,  718,   67,   65,  716,   65,  724,  725,  726,  727,
X       65,   65,   67,   65,   67, 1011,   65, 1011,  718,   67,
X       67,   65,   67,  730,  731,   67,  723,   65, 1011,   65,
X       67,  722,   65,   65,   65, 1011,   67,  728,   67, 1011,
X     1011,   67,   67,   67,   65,  736,  737,  738,  739,  732,
X       65,  734, 1011,   67,  728,   65,  729,   65,   65,   67,
X       65,  733,   65,   65,   67,   65,   67,   67, 1011,   67,
X
X       65,   67,   67, 1011,   67,   65,   65,  735,   65,   67,
X       65,  744,  740,  742,   67,   67, 1011,   67, 1011,   67,
X      743,   65, 1011,  741,   65,  749,  750,  751,  752,  740,
X       67,   65,   65,   67,  746,  747,   65,  748,  745,  753,
X       67,   67,   65,   65, 1011,   67,  755,  754,   65, 1011,
X       65,   67,   67,  761, 1011,   65,   65,   67,  756,   67,
X     1011, 1011, 1011,  757,   67,   67,  762, 1011,  758,  760,
X       65,  759,   65,  765,  766,  767,  768, 1011,   65,   67,
X      757,   67,  764,   65,  769,   65,  760,   67,   65,   65,
X       65,   65,   67,  763,   67, 1011,   65,   67,   67,   67,
X
X       67, 1011,   65,  774,  773,   67,   65,   65,   65,   65,
X      770,   67,  771, 1011, 1011,   67,   67,   67,   67,   65,
X      777,   65,  775,  776,   65,  778,  772,   65,   67,  771,
X       67, 1011, 1011,   67,   65, 1011,   67,   65,   65,   65,
X      776,  779,   65,   67,  780, 1011,   67,   67,   67,   65,
X       65,   67,  782,   65,  781,   65,   65,  783,   67,   67,
X       65, 1011,   67,   65,   67,   67,   65,   65,   65,   67,
X      784,  786,   67,   65,   65,   67,   67,   67,   65,   65,
X      787,  790,   67,   67,  791,  785,   65,   67,   67,   65,
X      792,   65,   65,  788, 1011,   67,  789,   65,   67, 1011,
X
X       67,   67,  797,  795,   65,  799,   67,  794,  793,   65,
X     1011,   65,  796,   67,   65,   65,  798,   65,   67,  800,
X       67,   65,   65,   67,   67,   65,   67, 1011,  801, 1011,
X       67,   67, 1011,  798,   67, 1011,  800,   65,  803,  804,
X      805,  806,   65,   65,  802,   65,   67,   65,  808,  809,
X       65,   67,   67,   65,   67,   65,   67,   65,   65,   67,
X     1011,  802,   67, 1011,   67, 1011,   67,   67,   65,  810,
X      811,  812,  813,   65,  807,   65,   65,   67,   65,   65,
X     1011, 1011,   67, 1011,   67,   67,   65,   67,   67,   65,
X      815,  816,  817,   65,   65,   67,   65,   65,   67, 1011,
X
X     1011, 1011,   67,   67,  814,   67,   67,   65,  818,  819,
X      820,  821,   65,   65,   65, 1011,   67, 1011,   65,   65,
X     1011,   67,   67,   67,  834,   65,  835,   67,   67,  822,
X     1011,  836, 1011,  837,   67,  823,   65,  824,  825,  826,
X      827,  828,  829,  831,   65,   67,   65,   65,   65,   66,
X      837,   65,   65,   67,   65,   67,   67,   67,   65, 1011,
X       67,   67,  830,   67,  832,   65, 1011,   67,  840,  839,
X       65,   65, 1011,  833,   67,  838,   65, 1011, 1011,   67,
X       67,  841,   65,  849,  850,   67,  842,  844, 1011, 1011,
X      833,   67,  838,   65,  845,  846,  847,  848,  841,   65,
X
X       65,   65,   67,  843,   65, 1011,   65,   65,   67,   67,
X       67,   65,   65,   67,  851,   67,   67, 1011,   65,   65,
X       67,   67,   65,  854,  855,  856,  857,   67,   67, 1011,
X       65,   67,  858,   65,   65,  859,   65,   65,  852,   67,
X       65,   65,   67,   67,   65,   67,   67,  853,  860,   67,
X       67,  861,   65,   67, 1011,  863,   65,  864,   65,   65,
X       65,   67,   65,  865,   65,   67,   65,   67,   67,   67,
X       65,   67,  862,   67,  866,   67,   65, 1011,  870,   67,
X      868,   65, 1011,  867,   65,   67,  869,   65,   65, 1011,
X       67,  872, 1011,   67, 1011,  871,   67,   67,  875,  876,
X
X      867,  873, 1011,  869,   65,   65,   65,   65,   65,  877,
X      878,  874,   65,   67,   67,   67,   67,   67,   65,   65,
X       65,   67,   65, 1011,   65,  879,   65,   67,   67,   67,
X     1011,   67,  884,   67,   65,   67,   65,  880,   65,  881,
X       65,  882,   65,   67,   65,   67,  883,   67, 1011,   67,
X       65,   67,   65,   67,   65,   65,   65,  885,   65,   67,
X       65,   67, 1011,   67,   67,   67,   65,   67,   65,   67,
X       65,  886,   65,   65,   65,   67,   65,   67,   65,   67,
X     1011,   67,   67,   67,  887,   67,   65,   67,  886,   65,
X       65,  888,   65,   65,   65,   67,   65,   65,   67,   67,
X
X       65,   67,   67,   67,   65,   67,   67,   65,   65,   67,
X      891,  889,  893,   67,  895,  897,   67,   67, 1011,   65,
X      890,   65,   65,  892, 1011,  900, 1011,  894,   67,  896,
X       67,   67,  899,  898,   65,  903,   65, 1011,   65,   65,
X       65,  901,   65,   67, 1011,   67,  902,   67,   67,   67,
X       65,   67,   65,  904, 1011,   65,   65,   65,   65,   67,
X       65,   67,   65,  902,   67,   67,   67,   67,  905,   67,
X       65,   67,   65,   65,  906,   65,   65,  907, 1011,   67,
X       65,   67,   67,   65,   67,   67,   65,  908,   65,   67,
X     1011,   65,   67,  913,  909,   67,   65,   67,   65,  910,
X
X       67, 1011,  914,   65,   65,   67,   65,   67,  915,  911,
X      916,  912,   67,   67,   65,   67,  910,  919,   65,   65,
X     1011,   65,   65,   67,  917,  920, 1011,   67,   67,  918,
X       67,   67,  921,   65,   65,  923,   65,  924,  925,   65,
X       65,   65,   67,   67,   65,   67,   65, 1011,   67,   67,
X       67,  922,   65,   67,   65,   67,  927,   65,  928,   65,
X       65,   67,   65,   67,  926,  929,   67,   65,   67,   67,
X       65,   67,   65,   65,  930,   65,   67,   65,  931,   67,
X       65,   67,   67,   65,   67,   65,   67,   65,   65,   67,
X     1011,   65,   67,   65,   67,   65,   67,   67, 1011,  933,
X
X       67,   65,   67,  934,   67,   65,   65,  939,   65,  932,
X       67,   65, 1011, 1011,   67,   67,   65,   67,   65,   65,
X       67,  936,  935,   65,  937,   67,  938,   67,   67,   65,
X      944,   65,   67,  943,  940,   65,   65,  941,   67,   65,
X       67,  942, 1011, 1011,   67,   67,   65,  945,   67,   65,
X       65,  947,  948,  949,   65,   67,   65,   65,   67,   67,
X       65,   65,  946,   67,   65,   67,   67,  950,   65,   67,
X       67,   65,   65,   67, 1011,   65, 1011,   67,  953,   65,
X       67,   67,   65,  951,   67,  952,  954,   65,   67,  955,
X       65,   67,  956,   65,   65, 1011,   67,   65,   65,   67,
X
X     1011, 1011,   67,   67,  958, 1011,   67,   67,   65,  959,
X      957,   65,  962,   65,  963, 1011,   65,   67,   65,   65,
X       67,   65,   67,   65,  960,   67,  961,   67,   67,  964,
X       67, 1011,   67,   65,   65, 1011,  967,   65,   65,  970,
X      968,  965,   67,   67,  966, 1011,   67,   67,   65,   65,
X       65,   65,  971,   65,  969, 1011, 1011,   67,   67,   67,
X       67, 1011,   67,   65,  972,  973,  974,   65,   65,   65,
X      975,   65,   67, 1011, 1011, 1011,   67,   67,   67,  977,
X       67,  972,  973,  978,  976,  979,   65,   65,   65,  981,
X       65,   65,  980,   65,   65,   67,   67,   67, 1011,   67,
X
X       67,   65,   67,   67,   65,   65,   65,  984, 1011, 1011,
X       67,   65,  985,   67,   67,   67, 1011,  982,  986,  983,
X       67,   65,   65,   65,   65,  989,  987,   65,   65, 1011,
X       67,   67,   67,   67,   65,   65,   67,   67,  988,  992,
X     1011,   65,   65,   67,   67,  993,   65,   65,  991,  994,
X       67,   67,   65,   65,  990,   67,   67,   65,   65,   65,
X     1011,   67,   67,   65,   65,   65,   67,   67,   67,  996,
X       65,   65,   67,   67,   67, 1011, 1011, 1011,   65,   67,
X       67,   65, 1011, 1001,  998, 1003,  995,   67, 1002,   65,
X       67,  997, 1005, 1011,   65,   65,  999,   65,   67, 1004,
X
X       65,   65, 1000,   67,   67,   65,   67, 1011,   65,   67,
X       67, 1006,   65, 1011,   67,   65, 1008,   67,   65, 1011,
X     1011,   67, 1007, 1011,   67, 1011, 1011,   67, 1011, 1011,
X     1011, 1011, 1011, 1010, 1011, 1011, 1011, 1009,   47,   47,
X       47,   47,   47,   47,   47,   47,   47,   47,   47,   47,
X       47,   50,   50,   50,   50,   50,   50,   50,   50,   50,
X       50,   50,   50,   50,   59, 1011,   59, 1011, 1011, 1011,
X     1011,   59, 1011,   59,   64,   64,   64,   64,   64,   66,
X       66,   66, 1011,   66,   66,   66,   66,   66,  161,  161,
X      161,  161,  161,  161,  161,  161,  161,  161,  161,  161,
X
X      161,   51,   51,   51,   51,   51,   51,   51,   51,   51,
X       51,   51,   51,   51,  167, 1011,  167,  167,  167,  167,
X      167,  167,  167,  167,  167,  167,  167,   55, 1011, 1011,
X     1011,   55,   55,  173,  173,  173,  173, 1011,  173,  173,
X      173,  173,  173,  173,  173,  173,  180, 1011, 1011,  180,
X      181, 1011, 1011,  181,  181,  181,  182, 1011,  182,  182,
X      182,  182,  182,  182,  184,  184,  184,  184,  184,  336,
X     1011, 1011,  336,  339, 1011, 1011,  339,  343,  343, 1011,
X     1011,  343,  343,  343,  343,  343,    3, 1011, 1011, 1011,
X     1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011,
X
X     1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011,
X     1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011,
X     1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011,
X     1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011,
X     1011, 1011, 1011, 1011, 1011, 1011
X    } ;
X
Xstatic const short int yy_chk[3547] =
X    {   0,
X        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
X        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
X        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
X        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
X        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
X        1,    1,    1,    1,    1,    1,    1,    1,    1,    7,
X        8,   16,  343,    8,   11,   11,   11,   11,   11,   11,
X       11,   11,   13,   13,   13,   13,   13,   13,   13,   13,
X       16,   29,   28,   47,   36,   23,   40,   16,   26,   56,
X       29,   28,   31,   36,   23,   40,   53,   26,  173,   23,
X
X       28,   31,   36,  184,  182,   50,  181,   23,   40,    7,
X       28,    8,   15,   23,   15,   15,   15,   15,   15,   15,
X       15,   15,   51,   23,   31,   26,   34,   24,   33,  177,
X       35,   15,  174,   47,   56,   34,   24,   33,   15,   35,
X       34,   24,   33,  173,   34,  171,   33,   53,   24,  164,
X       15,   22,   24,   50,   34,   24,   33,  161,   35,   38,
X       22,   35,   33,   39,   35,   22,   22,   22,   38,  175,
X       51,  167,   39,   38,   64,   60,   22,   66,   22,  175,
X       38,  168,   22,   22,   22,   59,   66,   38,   69,   72,
X       38,   39,   55,   55,   55,   22,   25,   69,   72,   25,
X
X       57,   57,   57,   58,   59,   25,   74,   72,   52,  137,
X       25,   59,   25,   25,   25,   74,  121,   68,  137,  167,
X       69,   25,   25,   25,   25,  121,   68,   25,   25,  168,
X       25,   54,   54,   54,   54,   54,   54,   54,   54,   74,
X       25,   27,   68,   70,   27,   76,  137,   71,  121,   68,
X       27,   73,   70,   75,   76,   27,   71,   27,   27,   70,
X       73,   49,   75,   27,   46,   45,   27,   27,   27,   73,
X       76,   70,   27,   27,   75,   71,   14,   76,   77,   83,
X       79,   82,   73,   91,   78,   27,   30,   77,   83,   79,
X       82,    5,   91,   78,   80,   82,   83,   30,    3,   30,
X
X       30,   91,   30,   80,    2,   30,    0,   77,   30,   30,
X       30,   30,   78,   79,   30,   30,   81,   30,    0,   80,
X       30,    0,  135,   85,   84,   81,   80,   30,   32,  118,
X       81,  135,   85,   84,   81,   86,   87,    0,  118,   32,
X       85,   32,   32,   84,   86,   87,   84,   32,   85,   84,
X       32,   32,   32,   32,  135,   85,   32,   32,   87,   32,
X      118,   86,   32,   86,   88,   89,   90,   92,   93,   32,
X       37,   94,    0,   88,   89,   90,   92,   93,   95,   37,
X       94,   96,    0,   88,   37,  140,   93,   95,    0,    0,
X       96,   37,   37,   89,  140,  180,    0,   96,   37,  169,
X
X       90,   92,   97,   37,   94,   94,   37,   95,   37,   98,
X      140,   97,   99,  100,   96,  180,  102,  180,   98,   97,
X      103,   99,  100,  106,   97,  102,   98,   97,  101,  103,
X      104,    0,  106,  105,   98,  100,  107,  101,   99,  104,
X       99,   98,  105,  108,  102,  107,  101,  169,  104,  109,
X      110,  105,  108,    0,  103,  101,  106,  106,  109,  110,
X        0,  111,  112,    0,  109,  109,  109,  110,  109,  107,
X      111,  112,  101,    0,  109,  110,  108,  110,  113,  114,
X        0,  109,  110,  115,  112,    0,  116,  113,  114,  111,
X        0,  119,  115,  120,  110,  116,  113,    0,  113,  117,
X
X      119,  122,  120,  113,  123,  113,  114,    0,  117,  119,
X      122,  115,    0,  123,  120,  116,  126,  117,    0,  124,
X      116,  113,  113,  114,  127,  126,  120,  120,  124,  122,
X      125,  117,  117,  127,  117,  123,  124,    0,  124,  125,
X      127,  124,  126,  128,  126,  129,  127,  125,    0,  130,
X      131,  132,  128,    0,  129,  125,    0,  125,  130,  131,
X      132,    0,  125,  133,    0,  132,  136,  132,  131,    0,
X      128,  134,  133,  129,  125,  136,  138,  141,  132,  132,
X      134,  133,  132,  130,  139,  138,  141,  128,  142,  143,
X      144,  150,  134,  139,  136,  132,    0,  142,  143,  144,
X
X      150,    0,    0,  145,  134,  134,  146,  147,  149,  138,
X      141,  139,  145,  148,  151,  146,  147,  149,  143,  144,
X      150,  146,  148,  151,  142,  145,  154,    0,  139,    0,
X        0,  145,  152,  153,  155,  154,  149,    0,  148,  146,
X      147,  152,  153,  155,    0,  148,  152,  153,  151,  155,
X      156,    0,  157,  154,  158,  159,  160,    0,  186,  156,
X      152,  157,  185,  158,  159,  160,  187,  186,  158,  189,
X      154,  185,    0,  160,    0,  187,    0,  159,  189,    0,
X      159,  156,  179,  179,  179,  179,  179,  179,  179,  179,
X      185,  186,  188,  190,  191,  192,  189,  193,    0,  187,
X
X      195,  188,  190,  191,  192,  194,  193,  190,  196,  195,
X      188,  193,  197,  189,  194,  198,  199,  196,  201,    0,
X      200,  197,    0,  202,  198,  199,    0,  201,  192,  200,
X      191,  195,  202,  194,  203,  188,  196,    0,  200,  204,
X        0,  199,  205,  203,  206,  197,  201,    0,  204,  198,
X      207,  205,  208,  206,  209,  204,  202,  211,  210,  207,
X      212,  208,  206,  209,  214,  203,  211,  210,  213,  212,
X      215,  218,  216,  214,  205,  210,    0,  213,  217,  215,
X      218,  216,    0,    0,    0,  211,  216,  217,    0,  219,
X      221,  214,  217,  212,  222,  220,  218,  213,  219,  221,
X
X        0,    0,  223,  222,  220,  215,    0,    0,  214,  219,
X      220,  223,  224,    0,    0,  224,  221,  223,  225,  226,
X      227,  224,  222,  221,  228,  229,  230,  225,  226,  227,
X      231,  232,  233,  228,  229,  230,  225,  226,  234,  231,
X      232,  233,  235,  230,  236,  237,    0,  234,  238,    0,
X        0,  235,    0,  236,  237,  224,    0,  238,  231,  237,
X        0,  233,  238,  239,  232,  234,  240,  241,    0,  236,
X      242,  244,  239,    0,  243,  240,  241,  235,  245,  242,
X      244,    0,  234,  243,    0,  246,  240,  245,  239,  243,
X      244,    0,  247,  241,  246,  248,  249,    0,  242,  250,
X
X      241,  247,  251,  244,  248,  249,  245,  252,  250,  253,
X      254,  251,  255,  256,  257,    0,  252,  258,  253,  254,
X      259,  255,  256,  257,  252,  260,  258,  254,    0,  259,
X      262,    0,  261,    0,  260,    0,    0,  253,  259,  262,
X      256,  261,  264,  260,  262,  255,  263,  258,    0,  257,
X      261,  264,  262,  259,  265,  263,  264,  256,  260,  266,
X      261,  267,  263,  265,  268,  269,  261,  270,  266,  271,
X      267,  273,    0,  268,  269,    0,  270,  272,  271,  265,
X      273,  267,    0,  269,  266,  274,  272,    0,    0,  275,
X      276,  277,  278,    0,  274,  270,  273,  268,  275,  276,
X
X      277,  278,  273,  272,  275,  279,  280,  281,  282,  283,
X      272,  276,  284,  274,  279,  280,  281,  282,  283,  285,
X        0,  284,  277,  287,  286,  282,    0,  288,  285,  284,
X      288,  289,  287,  286,  291,  278,  288,  283,  290,    0,
X      289,    0,  293,  291,    0,  296,  292,  290,  291,  295,
X      287,  293,  285,  286,  296,  292,  290,    0,  295,  294,
X      297,    0,  293,  295,  298,  296,  289,  287,  294,  297,
X      288,  292,  299,  298,  302,    0,  294,  300,  301,  303,
X        0,  299,  304,  302,  297,  305,  300,  301,  303,  302,
X      306,  304,  307,    0,  305,  309,    0,    0,  299,  306,
X
X      303,  307,  300,  308,  309,  299,  301,  310,  300,  311,
X      313,  306,  308,  304,  307,  314,  310,  309,  311,  313,
X      312,  310,  315,  312,  314,  316,  317,    0,  305,  312,
X      318,  315,  319,  320,  316,  317,  308,  321,    0,  318,
X      323,  319,  320,  322,  316,  313,  321,  315,  314,  323,
X      324,    0,  322,  325,  326,    0,    0,  316,  318,  324,
X      317,    0,  325,  326,  320,  319,  327,  328,  330,  329,
X      326,  321,  336,  323,  322,  327,  328,  330,  329,  331,
X      332,  324,  325,    0,    0,  330,    0,  339,  331,  332,
X        0,  327,  336,  331,  336,  328,  329,    0,  332,  335,
X
X      335,  335,  335,  335,  335,  335,  335,  339,    0,  339,
X        0,    0,    0,  329,  338,  338,  338,  338,  338,  338,
X      338,  338,  344,  345,  346,  347,  350,    0,  349,  352,
X      351,  344,  345,  346,  347,  350,  344,  349,  352,  351,
X      353,  355,    0,  350,  351,  354,    0,  356,    0,  353,
X      355,  345,    0,  357,  354,  346,  356,  347,  348,  360,
X      349,  356,  357,  352,  358,  359,  362,  348,  360,  355,
X      361,    0,  348,  358,  359,  362,  354,  348,  353,  361,
X      348,  357,    0,  359,  361,  348,  363,  348,  364,  365,
X      348,  348,  366,  348,  362,  363,  358,  364,  365,  367,
X
X      368,  366,  348,    0,  369,    0,  370,  371,  367,  368,
X      372,  373,  364,  369,  368,  370,  371,    0,  374,  372,
X      373,  365,    0,    0,  375,  376,  370,  374,  377,  378,
X        0,  370,  369,  375,  376,  374,    0,  377,  378,  371,
X      379,  380,  381,  382,    0,  373,  383,  384,  385,  379,
X      380,  381,  382,  377,  386,  383,  384,  385,  390,  387,
X      388,  391,  389,  386,    0,    0,    0,  390,  387,  388,
X      391,  389,  380,  387,  379,  385,  384,    0,    0,    0,
X      392,    0,  389,  383,  393,  394,  382,  389,  388,  392,
X      390,  395,  385,  393,  394,  396,  397,  392,  398,  399,
X
X      395,  400,  394,  401,  396,  397,  402,  398,  399,  393,
X      400,  403,  401,  404,  405,  402,    0,  406,  394,    0,
X      403,    0,  404,  405,  407,  401,  406,  408,  405,  409,
X      399,  410,  398,  407,  411,  412,  408,  413,  409,  402,
X      410,  414,  415,  411,  412,    0,  413,  416,  417,  418,
X      414,  415,  407,  419,  403,  420,  416,  417,  418,  408,
X        0,  421,  419,  422,  420,  418,  423,  424,  425,  419,
X      421,  426,  422,  417,  416,  423,  424,  425,  421,  427,
X      426,  422,  425,  428,  429,  430,  431,  433,  427,  432,
X      434,  416,  428,  429,  430,  431,  433,  435,  432,  434,
X
X      436,  437,  426,  427,  439,  438,  435,  440,  441,  436,
X      437,    0,    0,  439,  438,  442,  440,  441,  429,  438,
X      432,  434,  443,  444,  442,  445,    0,    0,  446,  447,
X      448,  443,  444,  449,  445,  440,  436,  446,  447,  448,
X      450,  451,  449,  452,  453,  454,  447,  442,  455,  450,
X      451,  456,  452,  453,  454,  446,    0,  455,  457,  444,
X      456,  458,  459,    0,  460,  443,  451,  457,  461,    0,
X      458,  459,  446,  460,  462,  463,  464,  461,  453,  465,
X      466,  467,  455,  462,  463,  464,    0,  468,  465,  466,
X      467,  469,  458,  470,    0,  460,  468,    0,  471,  462,
X
X      469,  465,  470,  463,  472,  469,  462,  471,  473,  464,
X      475,  470,  467,  472,  474,  466,  476,  473,  477,  475,
X      471,  478,  479,  474,  475,  476,  472,  477,  480,    0,
X      478,  479,    0,  482,  481,    0,    0,  480,  479,  483,
X      484,  473,  482,  481,  476,  474,  485,  486,  483,  484,
X      480,  477,  481,  478,  487,  485,  486,  488,  484,  489,
X      483,  490,  491,  487,  493,  494,  488,  492,  489,    0,
X      490,  491,    0,  493,  494,  495,  492,  496,  490,  486,
X      494,  492,  485,  498,  495,  497,  496,    0,    0,  499,
X      488,    0,  498,  491,  497,    0,  493,  495,  499,  497,
X
X      500,  501,  502,  503,  496,    0,  504,  505,    0,  500,
X      501,  502,  503,    0,  498,  504,  505,  498,    0,  506,
X        0,  496,  499,  507,  508,  509,    0,  499,  506,  501,
X      510,  500,  507,  508,  509,  502,  511,  504,  505,  510,
X      512,  507,  509,  514,  506,  511,  503,  513,    0,  512,
X      515,    0,  514,  516,  512,    0,  513,  511,  517,  515,
X      508,  510,  516,  518,  513,    0,  515,  517,  519,  520,
X      521,  522,  518,  523,  514,  517,  525,  519,  520,  521,
X      522,  524,  523,  526,  527,  525,  528,    0,  528,  528,
X      524,  529,  526,  527,  518,  528,  522,  530,    0,  524,
X
X      529,  526,  531,  521,  532,    0,  530,  525,  533,  534,
X        0,  531,    0,  532,  530,    0,  523,  533,  534,  531,
X      535,  527,  536,  537,  529,  538,    0,  539,  540,  535,
X      541,  536,  537,  542,  538,  532,  539,  540,  543,  541,
X      544,  545,  542,    0,    0,  547,  546,  543,  541,  544,
X      545,  542,  543,  535,  547,  546,  548,  549,  545,  540,
X      550,  551,  552,  553,  554,  548,  549,    0,  538,  550,
X      551,  552,  553,  554,    0,  555,  544,  546,  547,  556,
X        0,  557,  549,  548,  555,    0,  550,  551,  556,  553,
X      557,  554,  558,  559,  555,  560,    0,  556,  561,    0,
X
X      548,  558,  559,    0,  560,  552,    0,  561,  554,  562,
X      558,  563,  557,  564,  565,  561,  566,  567,  562,  568,
X      563,  570,  564,  565,  569,  566,  567,  571,  568,  572,
X      570,    0,  574,  569,  573,    0,  571,  579,  572,  575,
X      562,  574,  576,  573,  563,  571,  579,    0,  575,  564,
X      566,  576,  570,  569,  568,  577,  575,  578,  580,    0,
X      567,    0,  573,  581,  577,  574,  578,  580,  579,  577,
X      576,  582,  581,  585,  583,  578,  584,  586,    0,  581,
X      582,    0,  585,  583,  587,  584,  586,  582,  588,  589,
X      584,  580,  583,  587,  586,  590,  591,  588,  589,  592,
X
X      585,    0,  593,    0,  590,  591,    0,  594,  592,  595,
X      589,  593,  591,  590,  596,  587,  594,  585,  595,  598,
X      597,  600,  599,  596,    0,  601,  602,    0,  598,  597,
X      600,  599,    0,  593,  601,  602,  596,  600,  603,  594,
X      599,  595,  597,  604,  605,  606,  607,  603,  608,    0,
X      610,  609,  604,  605,  606,  607,    0,  608,  602,  610,
X      609,  607,  608,  611,  610,  603,  612,  606,    0,    0,
X      614,  615,  611,  606,    0,  612,  604,  605,  609,  614,
X      615,  616,  603,  613,  613,  613,  613,  613,  611,    0,
X      616,  617,  613,  618,  619,  609,  620,  621,  615,  616,
X
X      617,  614,  618,  619,  622,  620,  621,  623,  624,  612,
X      625,  626,  627,  622,  620,  615,  623,  624,  628,  625,
X      626,  627,    0,  629,  625,    0,  624,  628,    0,    0,
X      627,  622,  629,  631,  617,  630,  630,  630,  630,  630,
X      632,  635,  631,  633,  630,    0,  636,    0,  622,  632,
X      635,  634,  633,  634,  634,  636,  629,  637,    0,  638,
X      634,  628,  639,  640,  641,    0,  637,  632,  638,    0,
X        0,  639,  640,  641,  642,  642,  642,  642,  642,  637,
X      644,  640,    0,  642,  632,  643,  633,  646,  645,  644,
X      647,  638,  648,  649,  643,  650,  646,  645,    0,  647,
X
X      651,  648,  649,    0,  650,  652,  653,  641,  654,  651,
X      661,  649,  643,  645,  652,  653,    0,  654,    0,  661,
X      646,  656,    0,  644,  655,  655,  655,  655,  655,  643,
X      656,  657,  658,  655,  651,  653,  659,  654,  650,  656,
X      657,  658,  660,  662,    0,  659,  658,  657,  663,    0,
X      664,  660,  662,  661,    0,  665,  666,  663,  659,  664,
X        0,    0,    0,  659,  665,  666,  663,    0,  659,  660,
X      668,  659,  667,  667,  667,  667,  667,    0,  669,  668,
X      659,  667,  666,  671,  668,  670,  660,  669,  672,  673,
X      674,  675,  671,  664,  670,    0,  676,  672,  673,  674,
X
X      675,    0,  677,  673,  672,  676,  678,  679,  680,  681,
X      669,  677,  670,    0,    0,  678,  679,  680,  681,  682,
X      678,  683,  675,  676,  684,  679,  671,  685,  682,  670,
X      683,    0,    0,  684,  686,    0,  685,  687,  688,  689,
X      676,  680,  690,  686,  682,    0,  687,  688,  689,  691,
X      692,  690,  686,  693,  683,  694,  695,  688,  691,  692,
X      696,    0,  693,  697,  694,  695,  699,  698,  700,  696,
X      690,  693,  697,  701,  702,  699,  698,  700,  703,  704,
X      694,  698,  701,  702,  699,  691,  705,  703,  704,  706,
X      700,  707,  708,  696,    0,  705,  697,  709,  706,    0,
X
X      707,  708,  705,  703,  710,  707,  709,  702,  701,  711,
X        0,  712,  704,  710,  713,  714,  706,  715,  711,  708,
X      712,  717,  718,  713,  714,  719,  715,    0,  713,    0,
X      717,  718,    0,  706,  719,    0,  708,  716,  716,  716,
X      716,  716,  720,  721,  715,  723,  716,  722,  722,  722,
X      724,  720,  721,  725,  723,  726,  722,  727,  728,  724,
X        0,  715,  725,    0,  726,    0,  727,  728,  729,  729,
X      729,  729,  729,  730,  720,  731,  732,  729,  733,  734,
X        0,    0,  730,    0,  731,  732,  736,  733,  734,  735,
X      735,  735,  735,  737,  738,  736,  739,  740,  735,    0,
X
X        0,    0,  737,  738,  732,  739,  740,  741,  741,  741,
X      741,  741,  742,  743,  744,    0,  741,    0,  746,  749,
X        0,  742,  743,  744,  748,  750,  748,  746,  749,  742,
X        0,  748,    0,  748,  750,  743,  745,  745,  745,  745,
X      745,  745,  745,  746,  751,  745,  747,  752,  753,  748,
X      748,  754,  755,  751,  756,  747,  752,  753,  757,    0,
X      754,  755,  745,  756,  747,  759,    0,  757,  755,  754,
X      758,  760,    0,  747,  759,  753,  762,    0,    0,  758,
X      760,  756,  763,  763,  763,  762,  757,  759,    0,    0,
X      747,  763,  753,  761,  761,  761,  761,  761,  756,  764,
X
X      765,  766,  761,  758,  767,    0,  768,  769,  764,  765,
X      766,  770,  771,  767,  764,  768,  769,    0,  773,  774,
X      770,  771,  772,  772,  772,  772,  772,  773,  774,    0,
X      775,  772,  773,  776,  777,  774,  778,  779,  769,  775,
X      780,  781,  776,  777,  782,  778,  779,  770,  775,  780,
X      781,  776,  783,  782,    0,  779,  784,  780,  785,  786,
X      787,  783,  788,  781,  789,  784,  790,  785,  786,  787,
X      791,  788,  777,  789,  783,  790,  792,    0,  787,  791,
X      785,  794,    0,  784,  793,  792,  786,  795,  796,    0,
X      794,  790,    0,  793,    0,  789,  795,  796,  793,  794,
X
X      784,  791,    0,  786,  797,  798,  799,  800,  801,  795,
X      796,  792,  802,  797,  798,  799,  800,  801,  803,  804,
X      805,  802,  806,    0,  807,  797,  808,  803,  804,  805,
X        0,  806,  802,  807,  809,  808,  810,  798,  811,  799,
X      812,  800,  813,  809,  814,  810,  801,  811,    0,  812,
X      815,  813,  816,  814,  817,  818,  819,  807,  820,  815,
X      821,  816,    0,  817,  818,  819,  822,  820,  823,  821,
X      824,  814,  825,  826,  827,  822,  828,  823,  829,  824,
X        0,  825,  826,  827,  823,  828,  831,  829,  814,  830,
X      832,  830,  833,  834,  835,  831,  836,  837,  830,  832,
X
X      838,  833,  834,  835,  839,  836,  837,  840,  841,  838,
X      833,  831,  835,  839,  836,  837,  840,  841,    0,  842,
X      832,  843,  844,  834,    0,  840,    0,  835,  842,  836,
X      843,  844,  839,  838,  845,  843,  846,    0,  847,  848,
X      849,  841,  850,  845,    0,  846,  842,  847,  848,  849,
X      851,  850,  852,  844,    0,  853,  854,  855,  856,  851,
X      857,  852,  858,  842,  853,  854,  855,  856,  851,  857,
X      859,  858,  860,  862,  852,  861,  863,  853,    0,  859,
X      864,  860,  862,  866,  861,  863,  865,  858,  867,  864,
X        0,  868,  866,  863,  859,  865,  869,  867,  870,  860,
X
X      868,    0,  865,  871,  872,  869,  873,  870,  866,  860,
X      867,  861,  871,  872,  874,  873,  860,  871,  875,  876,
X        0,  877,  878,  874,  868,  873,    0,  875,  876,  869,
X      877,  878,  874,  879,  880,  876,  881,  877,  878,  883,
X      882,  884,  879,  880,  885,  881,  886,    0,  883,  882,
X      884,  875,  887,  885,  888,  886,  880,  889,  881,  890,
X      891,  887,  892,  888,  879,  882,  889,  893,  890,  891,
X      894,  892,  895,  896,  884,  897,  893,  898,  886,  894,
X      899,  895,  896,  900,  897,  901,  898,  902,  903,  899,
X        0,  904,  900,  906,  901,  905,  902,  903,    0,  899,
X
X      904,  907,  906,  901,  905,  908,  909,  906,  910,  898,
X      907,  911,    0,    0,  908,  909,  912,  910,  913,  914,
X      911,  903,  902,  916,  904,  912,  905,  913,  914,  915,
X      912,  918,  916,  911,  907,  917,  919,  908,  915,  920,
X      918,  910,    0,    0,  917,  919,  921,  915,  920,  922,
X      923,  917,  919,  920,  924,  921,  925,  926,  922,  923,
X      927,  928,  916,  924,  929,  925,  926,  922,  931,  927,
X      928,  930,  932,  929,    0,  933,    0,  931,  927,  934,
X      930,  932,  935,  923,  933,  926,  928,  936,  934,  929,
X      937,  935,  930,  938,  941,    0,  936,  939,  940,  937,
X
X        0,    0,  938,  941,  935,    0,  939,  940,  943,  936,
X      934,  942,  939,  944,  940,    0,  945,  943,  946,  947,
X      942,  948,  944,  949,  937,  945,  938,  946,  947,  942,
X      948,    0,  949,  950,  951,    0,  946,  952,  953,  949,
X      947,  943,  950,  951,  944,    0,  952,  953,  954,  955,
X      956,  957,  951,  958,  948,    0,    0,  954,  955,  956,
X      957,    0,  958,  959,  952,  953,  954,  962,  963,  960,
X      957,  961,  959,    0,    0,    0,  962,  963,  960,  959,
X      961,  952,  953,  960,  958,  961,  964,  965,  966,  963,
X      967,  968,  962,  969,  970,  964,  965,  966,    0,  967,
X
X      968,  971,  969,  970,  972,  973,  974,  967,    0,    0,
X      971,  975,  970,  972,  973,  974,    0,  964,  971,  966,
X      975,  976,  977,  978,  979,  975,  972,  980,  981,    0,
X      976,  977,  978,  979,  982,  983,  980,  981,  973,  979,
X        0,  984,  985,  982,  983,  980,  986,  987,  978,  983,
X      984,  985,  988,  989,  976,  986,  987,  990,  991,  992,
X        0,  988,  989,  993,  994,  995,  990,  991,  992,  989,
X      996,  997,  993,  994,  995,    0,    0,    0,  999,  996,
X      997,  998,    0,  995,  992,  997,  987,  999,  996, 1000,
X      998,  990,  999,    0, 1001, 1002,  993, 1003, 1000,  998,
X
X     1004, 1005,  994, 1001, 1002, 1006, 1003,    0, 1007, 1004,
X     1005, 1001, 1008,    0, 1006, 1009, 1005, 1007, 1010,    0,
X        0, 1008, 1003,    0, 1009,    0,    0, 1010,    0,    0,
X        0,    0,    0, 1009,    0,    0,    0, 1008, 1012, 1012,
X     1012, 1012, 1012, 1012, 1012, 1012, 1012, 1012, 1012, 1012,
X     1012, 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013,
X     1013, 1013, 1013, 1013, 1014,    0, 1014,    0,    0,    0,
X        0, 1014,    0, 1014, 1015, 1015, 1015, 1015, 1015, 1016,
X     1016, 1016,    0, 1016, 1016, 1016, 1016, 1016, 1017, 1017,
X     1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017,
X
X     1017, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018,
X     1018, 1018, 1018, 1018, 1019,    0, 1019, 1019, 1019, 1019,
X     1019, 1019, 1019, 1019, 1019, 1019, 1019, 1020,    0,    0,
X        0, 1020, 1020, 1021, 1021, 1021, 1021,    0, 1021, 1021,
X     1021, 1021, 1021, 1021, 1021, 1021, 1022,    0,    0, 1022,
X     1023,    0,    0, 1023, 1023, 1023, 1024,    0, 1024, 1024,
X     1024, 1024, 1024, 1024, 1025, 1025, 1025, 1025, 1025, 1026,
X        0,    0, 1026, 1027,    0,    0, 1027, 1028, 1028,    0,
X        0, 1028, 1028, 1028, 1028, 1028, 1011, 1011, 1011, 1011,
X     1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011,
X
X     1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011,
X     1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011,
X     1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011,
X     1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011,
X     1011, 1011, 1011, 1011, 1011, 1011
X    } ;
X
Xstatic yy_state_type yy_last_accepting_state;
Xstatic char *yy_last_accepting_cpos;
X
X/* The intent behind this definition is that it'll catch
X * any uses of REJECT which flex missed.
X */
X#define REJECT reject_used_but_not_detected
X#define yymore() yymore_used_but_not_detected
X#define YY_MORE_ADJ 0
Xchar *yytext;
X# line 1 "javaa.l"
X# line 21 "javaa.l"
X#include <stdlib.h>
X#include <string.h>
X#include <signal.h>
X#include <stdio.h>
X#include "types.h"
X#include "gram.h"
X#include "listing.h"
X#include "utils.h"
X#include "build.h"
X#include "protos.h"
X#define MYRET(a)        \
X	{             \
X	echo(yytext); \
X	return((a));  \
X	}
X#define RETKEY(a)                         \
X	{                                 \
X	echo(yytext);                     \
X	yylval.rk.terminal = a;           \
X	strcpy(yylval.rk.string,yytext);  \
X	return((a));                      \
X	}
X   int linenumber;
X   int col;
X
X/* Macros after this point can all be overridden by user definitions in
X * section 1.
X */
X
X#ifdef YY_MALLOC_DECL
XYY_MALLOC_DECL
X#else
X#if __STDC__
X#ifndef __cplusplus
X#include <stdlib.h>
X#endif
X#else
X/* Just try to get by without declaring the routines.  This will fail
X * miserably on non-ANSI systems for which sizeof(size_t) != sizeof(int)
X * or sizeof(void*) != sizeof(int).
X */
X#endif
X#endif
X
X/* Amount of stuff to slurp up with each read. */
X#ifndef YY_READ_BUF_SIZE
X#define YY_READ_BUF_SIZE 8192
X#endif
X
X/* Copy whatever the last rule matched to the standard output. */
X
X#ifndef ECHO
X/* This used to be an fputs(), but since the string might contain NUL's,
X * we now use fwrite().
X */
X#define ECHO (void) fwrite( yytext, yyleng, 1, yyout )
X#endif
X
X/* Gets input and stuffs it into "buf".  number of characters read, or YY_NULL,
X * is returned in "result".
X */
X#ifndef YY_INPUT
X#define YY_INPUT(buf,result,max_size) \
X	if ( yy_current_buffer->yy_is_interactive ) \
X		{ \
X		int c = getc( yyin ); \
X		result = c == EOF ? 0 : 1; \
X		buf[0] = (char) c; \
X		} \
X	else if ( ((result = fread( buf, 1, max_size, yyin )) == 0) \
X		  && ferror( yyin ) ) \
X		YY_FATAL_ERROR( "input in flex scanner failed" );
X#endif
X
X/* No semi-colon after return; correct usage is to write "yyterminate();" -
X * we don't want an extra ';' after the "return" because that will cause
X * some compilers to complain about unreachable statements.
X */
X#ifndef yyterminate
X#define yyterminate() return YY_NULL
X#endif
X
X/* Number of entries by which start-condition stack grows. */
X#ifndef YY_START_STACK_INCR
X#define YY_START_STACK_INCR 25
X#endif
X
X/* Report a fatal error. */
X#ifndef YY_FATAL_ERROR
X#define YY_FATAL_ERROR(msg) yy_fatal_error( msg )
X#endif
X
X/* Default declaration of generated scanner - a define so the user can
X * easily add parameters.
X */
X#ifndef YY_DECL
X#define YY_DECL int yylex YY_PROTO(( void ))
X#endif
X
X/* Code executed at the beginning of each rule, after yytext and yyleng
X * have been set up.
X */
X#ifndef YY_USER_ACTION
X#define YY_USER_ACTION
X#endif
X
X/* Code executed at the end of each rule. */
X#ifndef YY_BREAK
X#define YY_BREAK break;
X#endif
X
XYY_DECL
X	{
X	register yy_state_type yy_current_state;
X	register char *yy_cp, *yy_bp;
X	register int yy_act;
X
X# line 47 "javaa.l"
X
X
X	if ( yy_init )
X		{
X#ifdef YY_USER_INIT
X		YY_USER_INIT;
X#endif
X
X		if ( ! yy_start )
X			yy_start = 1;	/* first start state */
X
X		if ( ! yyin )
X			yyin = stdin;
X
X		if ( ! yyout )
X			yyout = stdout;
X
X		if ( yy_current_buffer )
X			yy_init_buffer( yy_current_buffer, yyin );
X		else
X			yy_current_buffer =
X				yy_create_buffer( yyin, YY_BUF_SIZE );
X
X		yy_load_buffer_state();
X
X		yy_init = 0;
X		}
X
X	while ( 1 )		/* loops until end-of-file is reached */
X		{
X		yy_cp = yy_c_buf_p;
X
X		/* Support of yytext. */
X		*yy_cp = yy_hold_char;
X
X		/* yy_bp points to the position in yy_ch_buf of the start of
X		 * the current run.
X		 */
X		yy_bp = yy_cp;
X
X		yy_current_state = yy_start;
X		if ( yy_bp[-1] == '\n' )
X			++yy_current_state;
Xyy_match:
X		do
X			{
X			register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)];
X			if ( yy_accept[yy_current_state] )
X				{
X				yy_last_accepting_state = yy_current_state;
X				yy_last_accepting_cpos = yy_cp;
X				}
X			while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
X				{
X				yy_current_state = (int) yy_def[yy_current_state];
X				if ( yy_current_state >= 1012 )
X					yy_c = yy_meta[(unsigned int) yy_c];
X				}
X			yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
X			++yy_cp;
X			}
X		while ( yy_base[yy_current_state] != 3487 );
X
Xyy_find_action:
X		yy_act = yy_accept[yy_current_state];
X
X		YY_DO_BEFORE_ACTION;
X
X
Xdo_action:	/* This label is used only to access EOF actions. */
X
X
X		switch ( yy_act )
X	{ /* beginning of action switch */
X			case 0: /* must back up */
X			/* undo the effects of YY_DO_BEFORE_ACTION */
X			*yy_cp = yy_hold_char;
X			yy_cp = yy_last_accepting_cpos;
X			yy_current_state = yy_last_accepting_state;
X			goto yy_find_action;
X
Xcase 1:
XYY_USER_ACTION
X# line 48 "javaa.l"
X{RETKEY(CLASS)}
X	YY_BREAK
Xcase 2:
XYY_USER_ACTION
X# line 49 "javaa.l"
X{RETKEY(EXTENDS)}
X	YY_BREAK
Xcase 3:
XYY_USER_ACTION
X# line 50 "javaa.l"
X{RETKEY(ACCESS)}
X	YY_BREAK
Xcase 4:
XYY_USER_ACTION
X# line 51 "javaa.l"
X{RETKEY(IMPLEMENTS)}
X	YY_BREAK
Xcase 5:
XYY_USER_ACTION
X# line 52 "javaa.l"
X{RETKEY(FIELD)}
X	YY_BREAK
Xcase 6:
XYY_USER_ACTION
X# line 53 "javaa.l"
X{RETKEY(METHOD)}
X	YY_BREAK
Xcase 7:
XYY_USER_ACTION
X# line 54 "javaa.l"
X{RETKEY(MAX_STACK)}
X	YY_BREAK
Xcase 8:
XYY_USER_ACTION
X# line 55 "javaa.l"
X{RETKEY(MAX_LOCALS)}
X	YY_BREAK
Xcase 9:
XYY_USER_ACTION
X# line 56 "javaa.l"
X{RETKEY(CODE)}
X	YY_BREAK
Xcase 10:
XYY_USER_ACTION
X# line 57 "javaa.l"
X{RETKEY(PUBLIC)}
X	YY_BREAK
Xcase 11:
XYY_USER_ACTION
X# line 58 "javaa.l"
X{RETKEY(PRIVATE)}
X	YY_BREAK
Xcase 12:
XYY_USER_ACTION
X# line 59 "javaa.l"
X{RETKEY(PROTECTED)}
X	YY_BREAK
Xcase 13:
XYY_USER_ACTION
X# line 60 "javaa.l"
X{RETKEY(ABSTRACT)}
X	YY_BREAK
Xcase 14:
XYY_USER_ACTION
X# line 61 "javaa.l"
X{RETKEY(FINAL)}
X	YY_BREAK
Xcase 15:
XYY_USER_ACTION
X# line 62 "javaa.l"
X{RETKEY(INTERFACE)}
X	YY_BREAK
Xcase 16:
XYY_USER_ACTION
X# line 63 "javaa.l"
X{RETKEY(STATIC)}
X	YY_BREAK
Xcase 17:
XYY_USER_ACTION
X# line 64 "javaa.l"
X{RETKEY(NATIVE)}
X	YY_BREAK
Xcase 18:
XYY_USER_ACTION
X# line 65 "javaa.l"
X{RETKEY(SYNCHRONIZED)}
X	YY_BREAK
Xcase 19:
XYY_USER_ACTION
X# line 66 "javaa.l"
X{RETKEY(TRANSIENT)}
X	YY_BREAK
Xcase 20:
XYY_USER_ACTION
X# line 67 "javaa.l"
X{RETKEY(VOLATILE)}
X	YY_BREAK
Xcase 21:
XYY_USER_ACTION
X# line 68 "javaa.l"
X{RETKEY(BYTE)}
X	YY_BREAK
Xcase 22:
XYY_USER_ACTION
X# line 69 "javaa.l"
X{RETKEY(CHAR)}
X	YY_BREAK
Xcase 23:
XYY_USER_ACTION
X# line 70 "javaa.l"
X{RETKEY(DOUBLE)}
X	YY_BREAK
Xcase 24:
XYY_USER_ACTION
X# line 71 "javaa.l"
X{RETKEY(FLOAT)}
X	YY_BREAK
Xcase 25:
XYY_USER_ACTION
X# line 72 "javaa.l"
X{RETKEY(INT)}
X	YY_BREAK
Xcase 26:
XYY_USER_ACTION
X# line 73 "javaa.l"
X{RETKEY(LONG)}
X	YY_BREAK
Xcase 27:
XYY_USER_ACTION
X# line 74 "javaa.l"
X{RETKEY(SHORT)}
X	YY_BREAK
Xcase 28:
XYY_USER_ACTION
X# line 75 "javaa.l"
X{RETKEY(BOOLEAN)}
X	YY_BREAK
Xcase 29:
XYY_USER_ACTION
X# line 76 "javaa.l"
X{RETKEY(VOID)}
X	YY_BREAK
Xcase 30:
XYY_USER_ACTION
X# line 77 "javaa.l"
X{RETKEY(DEFAULT)}
X	YY_BREAK
Xcase 31:
XYY_USER_ACTION
X# line 78 "javaa.l"
X{RETKEY(TO)}
X	YY_BREAK
Xcase 32:
XYY_USER_ACTION
X# line 79 "javaa.l"
X{RETKEY(EXCEPTIONS)}
X	YY_BREAK
Xcase 33:
XYY_USER_ACTION
X# line 80 "javaa.l"
X{RETKEY(SOURCEFILE)}
X	YY_BREAK
Xcase 34:
XYY_USER_ACTION
X# line 81 "javaa.l"
X{RETKEY(THROWS)}
X	YY_BREAK
Xcase 35:
XYY_USER_ACTION
X# line 82 "javaa.l"
X{RETKEY(LINENUMBERTABLE)}
X	YY_BREAK
Xcase 36:
XYY_USER_ACTION
X# line 83 "javaa.l"
X{RETKEY(LOCALVARIABLETABLE)}
X	YY_BREAK
Xcase 37:
XYY_USER_ACTION
X# line 84 "javaa.l"
X{RETKEY(ACC_PUBLIC)}
X	YY_BREAK
Xcase 38:
XYY_USER_ACTION
X# line 85 "javaa.l"
X{RETKEY(ACC_PRIVATE)}
X	YY_BREAK
Xcase 39:
XYY_USER_ACTION
X# line 86 "javaa.l"
X{RETKEY(ACC_PROTECTED)}
X	YY_BREAK
Xcase 40:
XYY_USER_ACTION
X# line 87 "javaa.l"
X{RETKEY(ACC_STATIC)}
X	YY_BREAK
Xcase 41:
XYY_USER_ACTION
X# line 88 "javaa.l"
X{RETKEY(ACC_FINAL)}
X	YY_BREAK
Xcase 42:
XYY_USER_ACTION
X# line 89 "javaa.l"
X{RETKEY(ACC_SYNCHRONIZED)}
X	YY_BREAK
Xcase 43:
XYY_USER_ACTION
X# line 90 "javaa.l"
X{RETKEY(ACC_VOLATILE)}
X	YY_BREAK
Xcase 44:
XYY_USER_ACTION
X# line 91 "javaa.l"
X{RETKEY(ACC_TRANSIENT)}
X	YY_BREAK
Xcase 45:
XYY_USER_ACTION
X# line 92 "javaa.l"
X{RETKEY(ACC_NATIVE)}
X	YY_BREAK
Xcase 46:
XYY_USER_ACTION
X# line 93 "javaa.l"
X{RETKEY(ACC_INTERFACE)}
X	YY_BREAK
Xcase 47:
XYY_USER_ACTION
X# line 94 "javaa.l"
X{RETKEY(ACC_ABSTRACT)}
X	YY_BREAK
Xcase 48:
XYY_USER_ACTION
X# line 95 "javaa.l"
X{RETKEY(AALOAD)}
X	YY_BREAK
Xcase 49:
XYY_USER_ACTION
X# line 96 "javaa.l"
X{RETKEY(AASTORE)}
X	YY_BREAK
Xcase 50:
XYY_USER_ACTION
X# line 97 "javaa.l"
X{RETKEY(ACONST_NULL)}
X	YY_BREAK
Xcase 51:
XYY_USER_ACTION
X# line 98 "javaa.l"
X{RETKEY(ALOAD_0)}
X	YY_BREAK
Xcase 52:
XYY_USER_ACTION
X# line 99 "javaa.l"
X{RETKEY(ALOAD_1)}
X	YY_BREAK
Xcase 53:
XYY_USER_ACTION
X# line 100 "javaa.l"
X{RETKEY(ALOAD_2)}
X	YY_BREAK
Xcase 54:
XYY_USER_ACTION
X# line 101 "javaa.l"
X{RETKEY(ALOAD_3)}
X	YY_BREAK
Xcase 55:
XYY_USER_ACTION
X# line 102 "javaa.l"
X{RETKEY(ANEWARRAY)}
X	YY_BREAK
Xcase 56:
XYY_USER_ACTION
X# line 103 "javaa.l"
X{RETKEY(ARETURN)}
X	YY_BREAK
Xcase 57:
XYY_USER_ACTION
X# line 104 "javaa.l"
X{RETKEY(ARRAYLENGTH)}
X	YY_BREAK
Xcase 58:
XYY_USER_ACTION
X# line 105 "javaa.l"
X{RETKEY(ASTORE_0)}
X	YY_BREAK
Xcase 59:
XYY_USER_ACTION
X# line 106 "javaa.l"
X{RETKEY(ASTORE_1)}
X	YY_BREAK
Xcase 60:
XYY_USER_ACTION
X# line 107 "javaa.l"
X{RETKEY(ASTORE_2)}
X	YY_BREAK
Xcase 61:
XYY_USER_ACTION
X# line 108 "javaa.l"
X{RETKEY(ASTORE_3)}
X	YY_BREAK
Xcase 62:
XYY_USER_ACTION
X# line 109 "javaa.l"
X{RETKEY(ATHROW)}
X	YY_BREAK
Xcase 63:
XYY_USER_ACTION
X# line 110 "javaa.l"
X{RETKEY(BALOAD)}
X	YY_BREAK
Xcase 64:
XYY_USER_ACTION
X# line 111 "javaa.l"
X{RETKEY(BASTORE)}
X	YY_BREAK
Xcase 65:
XYY_USER_ACTION
X# line 112 "javaa.l"
X{RETKEY(BIPUSH)}
X	YY_BREAK
Xcase 66:
XYY_USER_ACTION
X# line 113 "javaa.l"
X{RETKEY(CALOAD)}
X	YY_BREAK
Xcase 67:
XYY_USER_ACTION
X# line 114 "javaa.l"
X{RETKEY(CASTORE)}
X	YY_BREAK
Xcase 68:
XYY_USER_ACTION
X# line 115 "javaa.l"
X{RETKEY(CHECKCAST)}
X	YY_BREAK
Xcase 69:
XYY_USER_ACTION
X# line 116 "javaa.l"
X{RETKEY(D2F)}
X	YY_BREAK
Xcase 70:
XYY_USER_ACTION
X# line 117 "javaa.l"
X{RETKEY(D2I)}
X	YY_BREAK
Xcase 71:
XYY_USER_ACTION
X# line 118 "javaa.l"
X{RETKEY(D2L)}
X	YY_BREAK
Xcase 72:
XYY_USER_ACTION
X# line 119 "javaa.l"
X{RETKEY(DADD)}
X	YY_BREAK
Xcase 73:
XYY_USER_ACTION
X# line 120 "javaa.l"
X{RETKEY(DALOAD)}
X	YY_BREAK
Xcase 74:
XYY_USER_ACTION
X# line 121 "javaa.l"
X{RETKEY(DASTORE)}
X	YY_BREAK
Xcase 75:
XYY_USER_ACTION
X# line 122 "javaa.l"
X{RETKEY(DCMPG)}
X	YY_BREAK
Xcase 76:
XYY_USER_ACTION
X# line 123 "javaa.l"
X{RETKEY(DCMPL)}
X	YY_BREAK
Xcase 77:
XYY_USER_ACTION
X# line 124 "javaa.l"
X{RETKEY(DCONST_0)}
X	YY_BREAK
Xcase 78:
XYY_USER_ACTION
X# line 125 "javaa.l"
X{RETKEY(DCONST_1)}
X	YY_BREAK
Xcase 79:
XYY_USER_ACTION
X# line 126 "javaa.l"
X{RETKEY(DDIV)}
X	YY_BREAK
Xcase 80:
XYY_USER_ACTION
X# line 127 "javaa.l"
X{RETKEY(DLOAD_0)}
X	YY_BREAK
Xcase 81:
XYY_USER_ACTION
X# line 128 "javaa.l"
X{RETKEY(DLOAD_1)}
X	YY_BREAK
Xcase 82:
XYY_USER_ACTION
X# line 129 "javaa.l"
X{RETKEY(DLOAD_2)}
X	YY_BREAK
Xcase 83:
XYY_USER_ACTION
X# line 130 "javaa.l"
X{RETKEY(DLOAD_3)}
X	YY_BREAK
Xcase 84:
XYY_USER_ACTION
X# line 131 "javaa.l"
X{RETKEY(DMUL)}
X	YY_BREAK
Xcase 85:
XYY_USER_ACTION
X# line 132 "javaa.l"
X{RETKEY(DNEG)}
X	YY_BREAK
Xcase 86:
XYY_USER_ACTION
X# line 133 "javaa.l"
X{RETKEY(DREM)}
X	YY_BREAK
Xcase 87:
XYY_USER_ACTION
X# line 134 "javaa.l"
X{RETKEY(DRETURN)}
X	YY_BREAK
Xcase 88:
XYY_USER_ACTION
X# line 135 "javaa.l"
X{RETKEY(DSTORE_0)}
X	YY_BREAK
Xcase 89:
XYY_USER_ACTION
X# line 136 "javaa.l"
X{RETKEY(DSTORE_1)}
X	YY_BREAK
Xcase 90:
XYY_USER_ACTION
X# line 137 "javaa.l"
X{RETKEY(DSTORE_2)}
X	YY_BREAK
Xcase 91:
XYY_USER_ACTION
X# line 138 "javaa.l"
X{RETKEY(DSTORE_3)}
X	YY_BREAK
Xcase 92:
XYY_USER_ACTION
X# line 139 "javaa.l"
X{RETKEY(DSUB)}
X	YY_BREAK
Xcase 93:
XYY_USER_ACTION
X# line 140 "javaa.l"
X{RETKEY(DUP)}
X	YY_BREAK
Xcase 94:
XYY_USER_ACTION
X# line 141 "javaa.l"
X{RETKEY(DUP_X1)}
X	YY_BREAK
Xcase 95:
XYY_USER_ACTION
X# line 142 "javaa.l"
X{RETKEY(DUP_X2)}
X	YY_BREAK
Xcase 96:
XYY_USER_ACTION
X# line 143 "javaa.l"
X{RETKEY(DUP2)}
X	YY_BREAK
Xcase 97:
XYY_USER_ACTION
X# line 144 "javaa.l"
X{RETKEY(DUP2_X1)}
X	YY_BREAK
Xcase 98:
XYY_USER_ACTION
X# line 145 "javaa.l"
X{RETKEY(DUP2_X2)}
X	YY_BREAK
Xcase 99:
XYY_USER_ACTION
X# line 146 "javaa.l"
X{RETKEY(F2D)}
X	YY_BREAK
Xcase 100:
XYY_USER_ACTION
X# line 147 "javaa.l"
X{RETKEY(F2I)}
X	YY_BREAK
Xcase 101:
XYY_USER_ACTION
X# line 148 "javaa.l"
X{RETKEY(F2L)}
X	YY_BREAK
Xcase 102:
XYY_USER_ACTION
X# line 149 "javaa.l"
X{RETKEY(FADD)}
X	YY_BREAK
Xcase 103:
XYY_USER_ACTION
X# line 150 "javaa.l"
X{RETKEY(FALOAD)}
X	YY_BREAK
Xcase 104:
XYY_USER_ACTION
X# line 151 "javaa.l"
X{RETKEY(FASTORE)}
X	YY_BREAK
Xcase 105:
XYY_USER_ACTION
X# line 152 "javaa.l"
X{RETKEY(FCMPG)}
X	YY_BREAK
Xcase 106:
XYY_USER_ACTION
X# line 153 "javaa.l"
X{RETKEY(FCMPL)}
X	YY_BREAK
Xcase 107:
XYY_USER_ACTION
X# line 154 "javaa.l"
X{RETKEY(FCONST_0)}
X	YY_BREAK
Xcase 108:
XYY_USER_ACTION
X# line 155 "javaa.l"
X{RETKEY(FCONST_1)}
X	YY_BREAK
Xcase 109:
XYY_USER_ACTION
X# line 156 "javaa.l"
X{RETKEY(FCONST_2)}
X	YY_BREAK
Xcase 110:
XYY_USER_ACTION
X# line 157 "javaa.l"
X{RETKEY(FDIV)}
X	YY_BREAK
Xcase 111:
XYY_USER_ACTION
X# line 158 "javaa.l"
X{RETKEY(FLOAD_0)}
X	YY_BREAK
Xcase 112:
XYY_USER_ACTION
X# line 159 "javaa.l"
X{RETKEY(FLOAD_1)}
X	YY_BREAK
Xcase 113:
XYY_USER_ACTION
X# line 160 "javaa.l"
X{RETKEY(FLOAD_2)}
X	YY_BREAK
Xcase 114:
XYY_USER_ACTION
X# line 161 "javaa.l"
X{RETKEY(FLOAD_3)}
X	YY_BREAK
Xcase 115:
XYY_USER_ACTION
X# line 162 "javaa.l"
X{RETKEY(FMUL)}
X	YY_BREAK
Xcase 116:
XYY_USER_ACTION
X# line 163 "javaa.l"
X{RETKEY(FNEG)}
X	YY_BREAK
Xcase 117:
XYY_USER_ACTION
X# line 164 "javaa.l"
X{RETKEY(FREM)}
X	YY_BREAK
Xcase 118:
XYY_USER_ACTION
X# line 165 "javaa.l"
X{RETKEY(FRETURN)}
X	YY_BREAK
Xcase 119:
XYY_USER_ACTION
X# line 166 "javaa.l"
X{RETKEY(FSTORE_0)}
X	YY_BREAK
Xcase 120:
XYY_USER_ACTION
X# line 167 "javaa.l"
X{RETKEY(FSTORE_1)}
X	YY_BREAK
Xcase 121:
XYY_USER_ACTION
X# line 168 "javaa.l"
X{RETKEY(FSTORE_2)}
X	YY_BREAK
Xcase 122:
XYY_USER_ACTION
X# line 169 "javaa.l"
X{RETKEY(FSTORE_3)}
X	YY_BREAK
Xcase 123:
XYY_USER_ACTION
X# line 170 "javaa.l"
X{RETKEY(FSUB)}
X	YY_BREAK
Xcase 124:
XYY_USER_ACTION
X# line 171 "javaa.l"
X{RETKEY(GETFIELD)}
X	YY_BREAK
Xcase 125:
XYY_USER_ACTION
X# line 172 "javaa.l"
X{RETKEY(GETSTATIC)}
X	YY_BREAK
Xcase 126:
XYY_USER_ACTION
X# line 173 "javaa.l"
X{RETKEY(GOTO)}
X	YY_BREAK
Xcase 127:
XYY_USER_ACTION
X# line 174 "javaa.l"
X{RETKEY(GOTO_W)}
X	YY_BREAK
Xcase 128:
XYY_USER_ACTION
X# line 175 "javaa.l"
X{RETKEY(I2B)}
X	YY_BREAK
Xcase 129:
XYY_USER_ACTION
X# line 176 "javaa.l"
X{RETKEY(I2C)}
X	YY_BREAK
Xcase 130:
XYY_USER_ACTION
X# line 177 "javaa.l"
X{RETKEY(I2D)}
X	YY_BREAK
Xcase 131:
XYY_USER_ACTION
X# line 178 "javaa.l"
X{RETKEY(I2F)}
X	YY_BREAK
Xcase 132:
XYY_USER_ACTION
X# line 179 "javaa.l"
X{RETKEY(I2L)}
X	YY_BREAK
Xcase 133:
XYY_USER_ACTION
X# line 180 "javaa.l"
X{RETKEY(I2S)}
X	YY_BREAK
Xcase 134:
XYY_USER_ACTION
X# line 181 "javaa.l"
X{RETKEY(IADD)}
X	YY_BREAK
Xcase 135:
XYY_USER_ACTION
X# line 182 "javaa.l"
X{RETKEY(IALOAD)}
X	YY_BREAK
Xcase 136:
XYY_USER_ACTION
X# line 183 "javaa.l"
X{RETKEY(IAND)}
X	YY_BREAK
Xcase 137:
XYY_USER_ACTION
X# line 184 "javaa.l"
X{RETKEY(IASTORE)}
X	YY_BREAK
Xcase 138:
XYY_USER_ACTION
X# line 185 "javaa.l"
X{RETKEY(ICONST_0)}
X	YY_BREAK
Xcase 139:
XYY_USER_ACTION
X# line 186 "javaa.l"
X{RETKEY(ICONST_1)}
X	YY_BREAK
Xcase 140:
XYY_USER_ACTION
X# line 187 "javaa.l"
X{RETKEY(ICONST_2)}
X	YY_BREAK
Xcase 141:
XYY_USER_ACTION
X# line 188 "javaa.l"
X{RETKEY(ICONST_3)}
X	YY_BREAK
Xcase 142:
XYY_USER_ACTION
X# line 189 "javaa.l"
X{RETKEY(ICONST_4)}
X	YY_BREAK
Xcase 143:
XYY_USER_ACTION
X# line 190 "javaa.l"
X{RETKEY(ICONST_5)}
X	YY_BREAK
Xcase 144:
XYY_USER_ACTION
X# line 191 "javaa.l"
X{RETKEY(ICONST_M1)}
X	YY_BREAK
Xcase 145:
XYY_USER_ACTION
X# line 192 "javaa.l"
X{RETKEY(IDIV)}
X	YY_BREAK
Xcase 146:
XYY_USER_ACTION
X# line 193 "javaa.l"
X{RETKEY(IF_ACMPEQ)}
X	YY_BREAK
Xcase 147:
XYY_USER_ACTION
X# line 194 "javaa.l"
X{RETKEY(IF_ACMPNE)}
X	YY_BREAK
Xcase 148:
XYY_USER_ACTION
X# line 195 "javaa.l"
X{RETKEY(IF_ICMPEQ)}
X	YY_BREAK
Xcase 149:
XYY_USER_ACTION
X# line 196 "javaa.l"
X{RETKEY(IF_ICMPNE)}
X	YY_BREAK
Xcase 150:
XYY_USER_ACTION
X# line 197 "javaa.l"
X{RETKEY(IF_ICMPLT)}
X	YY_BREAK
Xcase 151:
XYY_USER_ACTION
X# line 198 "javaa.l"
X{RETKEY(IF_ICMPGE)}
X	YY_BREAK
Xcase 152:
XYY_USER_ACTION
X# line 199 "javaa.l"
X{RETKEY(IF_ICMPGT)}
X	YY_BREAK
Xcase 153:
XYY_USER_ACTION
X# line 200 "javaa.l"
X{RETKEY(IF_ICMPLE)}
X	YY_BREAK
Xcase 154:
XYY_USER_ACTION
X# line 201 "javaa.l"
X{RETKEY(IFEQ)}
X	YY_BREAK
Xcase 155:
XYY_USER_ACTION
X# line 202 "javaa.l"
X{RETKEY(IFNE)}
X	YY_BREAK
Xcase 156:
XYY_USER_ACTION
X# line 203 "javaa.l"
X{RETKEY(IFLT)}
X	YY_BREAK
Xcase 157:
XYY_USER_ACTION
X# line 204 "javaa.l"
X{RETKEY(IFGE)}
X	YY_BREAK
Xcase 158:
XYY_USER_ACTION
X# line 205 "javaa.l"
X{RETKEY(IFGT)}
X	YY_BREAK
Xcase 159:
XYY_USER_ACTION
X# line 206 "javaa.l"
X{RETKEY(IFLE)}
X	YY_BREAK
Xcase 160:
XYY_USER_ACTION
X# line 207 "javaa.l"
X{RETKEY(IFNONNULL)}
X	YY_BREAK
Xcase 161:
XYY_USER_ACTION
X# line 208 "javaa.l"
X{RETKEY(IFNULL)}
X	YY_BREAK
Xcase 162:
XYY_USER_ACTION
X# line 209 "javaa.l"
X{RETKEY(ILOAD_0)}
X	YY_BREAK
Xcase 163:
XYY_USER_ACTION
X# line 210 "javaa.l"
X{RETKEY(ILOAD_1)}
X	YY_BREAK
Xcase 164:
XYY_USER_ACTION
X# line 211 "javaa.l"
X{RETKEY(ILOAD_2)}
X	YY_BREAK
Xcase 165:
XYY_USER_ACTION
X# line 212 "javaa.l"
X{RETKEY(ILOAD_3)}
X	YY_BREAK
Xcase 166:
XYY_USER_ACTION
X# line 213 "javaa.l"
X{RETKEY(IMUL)}
X	YY_BREAK
Xcase 167:
XYY_USER_ACTION
X# line 214 "javaa.l"
X{RETKEY(INEG)}
X	YY_BREAK
Xcase 168:
XYY_USER_ACTION
X# line 215 "javaa.l"
X{RETKEY(IOR)}
X	YY_BREAK
Xcase 169:
XYY_USER_ACTION
X# line 216 "javaa.l"
X{RETKEY(IREM)}
X	YY_BREAK
Xcase 170:
XYY_USER_ACTION
X# line 217 "javaa.l"
X{RETKEY(IRETURN)}
X	YY_BREAK
Xcase 171:
XYY_USER_ACTION
X# line 218 "javaa.l"
X{RETKEY(ISHL)}
X	YY_BREAK
Xcase 172:
XYY_USER_ACTION
X# line 219 "javaa.l"
X{RETKEY(ISHR)}
X	YY_BREAK
Xcase 173:
XYY_USER_ACTION
X# line 220 "javaa.l"
X{RETKEY(ISTORE_0)}
X	YY_BREAK
Xcase 174:
XYY_USER_ACTION
X# line 221 "javaa.l"
X{RETKEY(ISTORE_1)}
X	YY_BREAK
Xcase 175:
XYY_USER_ACTION
X# line 222 "javaa.l"
X{RETKEY(ISTORE_2)}
X	YY_BREAK
Xcase 176:
XYY_USER_ACTION
X# line 223 "javaa.l"
X{RETKEY(ISTORE_3)}
X	YY_BREAK
Xcase 177:
XYY_USER_ACTION
X# line 224 "javaa.l"
X{RETKEY(ISUB)}
X	YY_BREAK
Xcase 178:
XYY_USER_ACTION
X# line 225 "javaa.l"
X{RETKEY(IUSHR)}
X	YY_BREAK
Xcase 179:
XYY_USER_ACTION
X# line 226 "javaa.l"
X{RETKEY(IXOR)}
X	YY_BREAK
Xcase 180:
XYY_USER_ACTION
X# line 227 "javaa.l"
X{RETKEY(JSR)}
X	YY_BREAK
Xcase 181:
XYY_USER_ACTION
X# line 228 "javaa.l"
X{RETKEY(JSR_W)}
X	YY_BREAK
Xcase 182:
XYY_USER_ACTION
X# line 229 "javaa.l"
X{RETKEY(L2D)}
X	YY_BREAK
Xcase 183:
XYY_USER_ACTION
X# line 230 "javaa.l"
X{RETKEY(L2F)}
X	YY_BREAK
Xcase 184:
XYY_USER_ACTION
X# line 231 "javaa.l"
X{RETKEY(L2I)}
X	YY_BREAK
Xcase 185:
XYY_USER_ACTION
X# line 232 "javaa.l"
X{RETKEY(LADD)}
X	YY_BREAK
Xcase 186:
XYY_USER_ACTION
X# line 233 "javaa.l"
X{RETKEY(LALOAD)}
X	YY_BREAK
Xcase 187:
XYY_USER_ACTION
X# line 234 "javaa.l"
X{RETKEY(LAND)}
X	YY_BREAK
Xcase 188:
XYY_USER_ACTION
X# line 235 "javaa.l"
X{RETKEY(LASTORE)}
X	YY_BREAK
Xcase 189:
XYY_USER_ACTION
X# line 236 "javaa.l"
X{RETKEY(LCMP)}
X	YY_BREAK
Xcase 190:
XYY_USER_ACTION
X# line 237 "javaa.l"
X{RETKEY(LCONST_0)}
X	YY_BREAK
Xcase 191:
XYY_USER_ACTION
X# line 238 "javaa.l"
X{RETKEY(LCONST_1)}
X	YY_BREAK
Xcase 192:
XYY_USER_ACTION
X# line 239 "javaa.l"
X{RETKEY(LDIV)}
X	YY_BREAK
Xcase 193:
XYY_USER_ACTION
X# line 240 "javaa.l"
X{RETKEY(LLOAD_0)}
X	YY_BREAK
Xcase 194:
XYY_USER_ACTION
X# line 241 "javaa.l"
X{RETKEY(LLOAD_1)}
X	YY_BREAK
Xcase 195:
XYY_USER_ACTION
X# line 242 "javaa.l"
X{RETKEY(LLOAD_2)}
X	YY_BREAK
Xcase 196:
XYY_USER_ACTION
X# line 243 "javaa.l"
X{RETKEY(LLOAD_3)}
X	YY_BREAK
Xcase 197:
XYY_USER_ACTION
X# line 244 "javaa.l"
X{RETKEY(LMUL)}
X	YY_BREAK
Xcase 198:
XYY_USER_ACTION
X# line 245 "javaa.l"
X{RETKEY(LNEG)}
X	YY_BREAK
Xcase 199:
XYY_USER_ACTION
X# line 246 "javaa.l"
X{RETKEY(LOR)}
X	YY_BREAK
Xcase 200:
XYY_USER_ACTION
X# line 247 "javaa.l"
X{RETKEY(LREM)}
X	YY_BREAK
Xcase 201:
XYY_USER_ACTION
X# line 248 "javaa.l"
X{RETKEY(LRETURN)}
X	YY_BREAK
Xcase 202:
XYY_USER_ACTION
X# line 249 "javaa.l"
X{RETKEY(LSHL)}
X	YY_BREAK
Xcase 203:
XYY_USER_ACTION
X# line 250 "javaa.l"
X{RETKEY(LSHR)}
X	YY_BREAK
Xcase 204:
XYY_USER_ACTION
X# line 251 "javaa.l"
X{RETKEY(LSTORE_0)}
X	YY_BREAK
Xcase 205:
XYY_USER_ACTION
X# line 252 "javaa.l"
X{RETKEY(LSTORE_1)}
X	YY_BREAK
Xcase 206:
XYY_USER_ACTION
X# line 253 "javaa.l"
X{RETKEY(LSTORE_2)}
X	YY_BREAK
Xcase 207:
XYY_USER_ACTION
X# line 254 "javaa.l"
X{RETKEY(LSTORE_3)}
X	YY_BREAK
Xcase 208:
XYY_USER_ACTION
X# line 255 "javaa.l"
X{RETKEY(LSUB)}
X	YY_BREAK
Xcase 209:
XYY_USER_ACTION
X# line 256 "javaa.l"
X{RETKEY(LUSHR)}
X	YY_BREAK
Xcase 210:
XYY_USER_ACTION
X# line 257 "javaa.l"
X{RETKEY(LXOR)}
X	YY_BREAK
Xcase 211:
XYY_USER_ACTION
X# line 258 "javaa.l"
X{RETKEY(MONITORENTER)}
X	YY_BREAK
Xcase 212:
XYY_USER_ACTION
X# line 259 "javaa.l"
X{RETKEY(MONITOREXIT)}
X	YY_BREAK
Xcase 213:
XYY_USER_ACTION
X# line 260 "javaa.l"
X{RETKEY(NOP)}
X	YY_BREAK
Xcase 214:
XYY_USER_ACTION
X# line 261 "javaa.l"
X{RETKEY(POP)}
X	YY_BREAK
Xcase 215:
XYY_USER_ACTION
X# line 262 "javaa.l"
X{RETKEY(POP2)}
X	YY_BREAK
Xcase 216:
XYY_USER_ACTION
X# line 263 "javaa.l"
X{RETKEY(RETURN)}
X	YY_BREAK
Xcase 217:
XYY_USER_ACTION
X# line 264 "javaa.l"
X{RETKEY(SALOAD)}
X	YY_BREAK
Xcase 218:
XYY_USER_ACTION
X# line 265 "javaa.l"
X{RETKEY(SASTORE)}
X	YY_BREAK
Xcase 219:
XYY_USER_ACTION
X# line 266 "javaa.l"
X{RETKEY(SWAP)}
X	YY_BREAK
Xcase 220:
XYY_USER_ACTION
X# line 267 "javaa.l"
X{RETKEY(IINC)}
X	YY_BREAK
Xcase 221:
XYY_USER_ACTION
X# line 268 "javaa.l"
X{RETKEY(INSTANCEOF)}
X	YY_BREAK
Xcase 222:
XYY_USER_ACTION
X# line 269 "javaa.l"
X{RETKEY(INVOKEINTERFACE)}
X	YY_BREAK
Xcase 223:
XYY_USER_ACTION
X# line 270 "javaa.l"
X{RETKEY(INVOKENONVIRTUAL)}
X	YY_BREAK
Xcase 224:
XYY_USER_ACTION
X# line 271 "javaa.l"
X{RETKEY(INVOKESTATIC)}
X	YY_BREAK
Xcase 225:
XYY_USER_ACTION
X# line 272 "javaa.l"
X{RETKEY(INVOKEVIRTUAL)}
X	YY_BREAK
Xcase 226:
XYY_USER_ACTION
X# line 273 "javaa.l"
X{RETKEY(LDC)}
X	YY_BREAK
Xcase 227:
XYY_USER_ACTION
X# line 274 "javaa.l"
X{RETKEY(LDC_W)}
X	YY_BREAK
Xcase 228:
XYY_USER_ACTION
X# line 275 "javaa.l"
X{RETKEY(LDC2_W)}
X	YY_BREAK
Xcase 229:
XYY_USER_ACTION
X# line 276 "javaa.l"
X{RETKEY(MULTIANEWARRAY)}
X	YY_BREAK
Xcase 230:
XYY_USER_ACTION
X# line 277 "javaa.l"
X{RETKEY(NEW)}
X	YY_BREAK
Xcase 231:
XYY_USER_ACTION
X# line 278 "javaa.l"
X{RETKEY(NEWARRAY)}
X	YY_BREAK
Xcase 232:
XYY_USER_ACTION
X# line 279 "javaa.l"
X{RETKEY(PUTFIELD)}
X	YY_BREAK
Xcase 233:
XYY_USER_ACTION
X# line 280 "javaa.l"
X{RETKEY(PUTSTATIC)}
X	YY_BREAK
Xcase 234:
XYY_USER_ACTION
X# line 281 "javaa.l"
X{RETKEY(SIPUSH)}
X	YY_BREAK
Xcase 235:
XYY_USER_ACTION
X# line 282 "javaa.l"
X{RETKEY(ILOAD)}
X	YY_BREAK
Xcase 236:
XYY_USER_ACTION
X# line 283 "javaa.l"
X{RETKEY(FLOAD)}
X	YY_BREAK
Xcase 237:
XYY_USER_ACTION
X# line 284 "javaa.l"
X{RETKEY(ALOAD)}
X	YY_BREAK
Xcase 238:
XYY_USER_ACTION
X# line 285 "javaa.l"
X{RETKEY(LLOAD)}
X	YY_BREAK
Xcase 239:
XYY_USER_ACTION
X# line 286 "javaa.l"
X{RETKEY(DLOAD)}
X	YY_BREAK
Xcase 240:
XYY_USER_ACTION
X# line 287 "javaa.l"
X{RETKEY(ISTORE)}
X	YY_BREAK
Xcase 241:
XYY_USER_ACTION
X# line 288 "javaa.l"
X{RETKEY(FSTORE)}
X	YY_BREAK
Xcase 242:
XYY_USER_ACTION
X# line 289 "javaa.l"
X{RETKEY(ASTORE)}
X	YY_BREAK
Xcase 243:
XYY_USER_ACTION
X# line 290 "javaa.l"
X{RETKEY(LSTORE)}
X	YY_BREAK
Xcase 244:
XYY_USER_ACTION
X# line 291 "javaa.l"
X{RETKEY(DSTORE)}
X	YY_BREAK
Xcase 245:
XYY_USER_ACTION
X# line 292 "javaa.l"
X{RETKEY(RET)}
X	YY_BREAK
Xcase 246:
XYY_USER_ACTION
X# line 293 "javaa.l"
X{RETKEY(WIDE)}
X	YY_BREAK
Xcase 247:
XYY_USER_ACTION
X# line 294 "javaa.l"
X{RETKEY(LOAD)}
X	YY_BREAK
Xcase 248:
XYY_USER_ACTION
X# line 295 "javaa.l"
X{RETKEY(STORE)}
X	YY_BREAK
Xcase 249:
XYY_USER_ACTION
X# line 296 "javaa.l"
X{RETKEY(LOOKUPSWITCH)}
X	YY_BREAK
Xcase 250:
XYY_USER_ACTION
X# line 297 "javaa.l"
X{RETKEY(TABLESWITCH)}
X	YY_BREAK
Xcase 251:
XYY_USER_ACTION
X# line 298 "javaa.l"
X{echo(yytext);}
X	YY_BREAK
Xcase 252:
XYY_USER_ACTION
X# line 299 "javaa.l"
X{ NewLine(1); }
X	YY_BREAK
Xcase 253:
X*yy_cp = yy_hold_char; /* undo effects of setting up yytext */
Xyy_c_buf_p = yy_cp -= 1;
XYY_DO_BEFORE_ACTION; /* set up yytext again */
XYY_USER_ACTION
X# line 300 "javaa.l"
X{echo(yytext);}
X	YY_BREAK
Xcase 254:
XYY_USER_ACTION
X# line 301 "javaa.l"
X{echo(yytext);}
X	YY_BREAK
Xcase 255:
XYY_USER_ACTION
X# line 302 "javaa.l"
X{ 
X			  if (yyleng >= 99) oops("String too long");
X			  else {
X			     unsigned char c;
X			     char *str;
X			     str = (char *) malloc(yyleng+2);
X			     c = strlen(yytext);
X			     strcpy(&(str[1]),yytext);
X			     str[0] = c;
X			     str[c] = '\0';
X			     yylval.string = &(str[1]);
X			  }
X			  MYRET(LABEL) 
X			}
X	YY_BREAK
Xcase 256:
XYY_USER_ACTION
X# line 316 "javaa.l"
X{
X			  if (yyleng >= 99) oops("String too long");
X			  else {
X			     unsigned char c;
X			     char *str;
X			     str = (char *) malloc(yyleng+2);
X			     c = strlen(yytext);
X			     strcpy(&(str[1]),yytext);
X			     str[0] = c;
X			     yylval.string = &(str[1]);
X			  }
X			  MYRET(IDENTIFIER) 
X			}
X	YY_BREAK
Xcase 257:
XYY_USER_ACTION
X# line 329 "javaa.l"
X{ 
X			  if (yyleng >= 99) oops("String too long");
X			  else {
X			     unsigned char c;
X			     char *str;
X			     str = (char *) malloc(yyleng+2);
X			     c = strlen(yytext);
X			     strcpy(&(str[1]),yytext);
X			     str[0] = c;
X			     yylval.string = &(str[1]);
X			  }
X			  if (IsTypeSymbol(yytext))
X			       MYRET(IDENTIFIER)  /* was TYPENAME */
X			  else MYRET(IDENTIFIER) 
X			}
X	YY_BREAK
Xcase 258:
XYY_USER_ACTION
X# line 344 "javaa.l"
X{ 
X			  if (yyleng >= 99) oops("String too long");
X			  else {
X			     unsigned char c;
X			     char *str;
X			     str = (char *) malloc(yyleng+2);
X			     c = strlen(yytext);
X			     strcpy(&(str[1]),yytext);
X			     str[0] = c;
X			     yylval.string = &(str[1]);
X			  }
X			  if (IsTypeSymbol(yytext))
X			       MYRET(IDENTIFIER)  /* was TYPENAME */
X			  else MYRET(IDENTIFIER) 
X			}
X	YY_BREAK
Xcase 259:
XYY_USER_ACTION
X# line 360 "javaa.l"
X{ yylval.intval = (int) strtol(yytext,(char**)NULL,0);
X		           MYRET(INTCONSTANT) }
X	YY_BREAK
Xcase 260:
XYY_USER_ACTION
X# line 362 "javaa.l"
X{ yylval.longval = strtoll(yytext,(char**)NULL,0);
X		           MYRET(LONGCONSTANT) /*all longs need work*/}
X	YY_BREAK
Xcase 261:
XYY_USER_ACTION
X# line 364 "javaa.l"
X{ yylval.intval = 0; MYRET(INTCONSTANT) }
X	YY_BREAK
Xcase 262:
XYY_USER_ACTION
X# line 365 "javaa.l"
X{ yylval.intval = (int) strtol(yytext,(char**)NULL,0);
X		           MYRET(INTCONSTANT) }
X	YY_BREAK
Xcase 263:
XYY_USER_ACTION
X# line 367 "javaa.l"
X{ yylval.longval = strtoll(yytext,(char**)NULL,0);
X		           MYRET(LONGCONSTANT) }
X	YY_BREAK
Xcase 264:
XYY_USER_ACTION
X# line 369 "javaa.l"
X{ yylval.intval = (int) strtol(yytext,(char**)NULL,0);
X		           MYRET(INTCONSTANT) }
X	YY_BREAK
Xcase 265:
XYY_USER_ACTION
X# line 371 "javaa.l"
X{ yylval.intval = (int) strtol(yytext,(char**)NULL,0);
X		           MYRET(INTCONSTANT) }
X	YY_BREAK
Xcase 266:
XYY_USER_ACTION
X# line 373 "javaa.l"
X{ yylval.longval = strtoll(yytext,(char**)NULL,0);
X		           MYRET(LONGCONSTANT) }
X	YY_BREAK
Xcase 267:
XYY_USER_ACTION
X# line 375 "javaa.l"
X{ yylval.charval = '\n';   MYRET(CHARCONSTANT) }
X	YY_BREAK
Xcase 268:
XYY_USER_ACTION
X# line 376 "javaa.l"
X{ yylval.charval = yytext[2];   MYRET(CHARCONSTANT) }
X	YY_BREAK
Xcase 269:
XYY_USER_ACTION
X# line 377 "javaa.l"
X{ yylval.charval = yytext[1];   MYRET(CHARCONSTANT) }
X	YY_BREAK
Xcase 270:
XYY_USER_ACTION
X# line 378 "javaa.l"
X{ oops("What was that?");   MYRET(CHARCONSTANT) }
X	YY_BREAK
Xcase 271:
XYY_USER_ACTION
X# line 380 "javaa.l"
X{ yylval.doubleval = atof(yytext); 
X				MYRET(DOUBLECONSTANT) }
X	YY_BREAK
Xcase 272:
XYY_USER_ACTION
X# line 382 "javaa.l"
X{ yylval.doubleval = atof(yytext); 
X				MYRET(DOUBLECONSTANT) }
X	YY_BREAK
Xcase 273:
XYY_USER_ACTION
X# line 384 "javaa.l"
X{ yylval.doubleval = atof(yytext); 
X				MYRET(DOUBLECONSTANT) }
X	YY_BREAK
Xcase 274:
XYY_USER_ACTION
X# line 386 "javaa.l"
X{ yylval.floatval = (float) atof(yytext); 
X				MYRET(FLOATCONSTANT) }
X	YY_BREAK
Xcase 275:
XYY_USER_ACTION
X# line 388 "javaa.l"
X{ yylval.floatval = (float) atof(yytext); 
X				MYRET(FLOATCONSTANT) }
X	YY_BREAK
Xcase 276:
XYY_USER_ACTION
X# line 390 "javaa.l"
X{ yylval.floatval = (float) atof(yytext); 
X				MYRET(FLOATCONSTANT) }
X	YY_BREAK
Xcase 277:
XYY_USER_ACTION
X# line 393 "javaa.l"
X{
X			  if (yyleng >= 99) oops("String too long");
X			  else {
X			     unsigned char c;
X			     int textlength;
X			     char *str;
X			     str = (char *) malloc(yyleng);
X			     textlength = yyleng-2;
X			     c = textlength;
X			     strncpy(&(str[1]),&(yytext[1]),textlength);
X			     str[0] = c;
X			     yylval.string = &(str[1]);
X			  }
X			  MYRET(STRING_LITERAL) 
X			}
X	YY_BREAK
Xcase 278:
XYY_USER_ACTION
X# line 409 "javaa.l"
X{ MYRET('=') }
X	YY_BREAK
Xcase 279:
XYY_USER_ACTION
X# line 410 "javaa.l"
X{ MYRET('<') }
X	YY_BREAK
Xcase 280:
XYY_USER_ACTION
X# line 411 "javaa.l"
X{ MYRET('>') }
X	YY_BREAK
Xcase 281:
XYY_USER_ACTION
X# line 412 "javaa.l"
X{ MYRET('[') }
X	YY_BREAK
Xcase 282:
XYY_USER_ACTION
X# line 413 "javaa.l"
X{ MYRET(']') }
X	YY_BREAK
Xcase 283:
XYY_USER_ACTION
X# line 414 "javaa.l"
X{ MYRET('(') }
X	YY_BREAK
Xcase 284:
XYY_USER_ACTION
X# line 415 "javaa.l"
X{ MYRET(')') }
X	YY_BREAK
Xcase 285:
XYY_USER_ACTION
X# line 416 "javaa.l"
X{ MYRET(',') }
X	YY_BREAK
Xcase 286:
XYY_USER_ACTION
X# line 417 "javaa.l"
X{ MYRET('.') }
X	YY_BREAK
Xcase 287:
XYY_USER_ACTION
X# line 418 "javaa.l"
X{ MYRET('{') }
X	YY_BREAK
Xcase 288:
XYY_USER_ACTION
X# line 419 "javaa.l"
X{ MYRET('}') }
X	YY_BREAK
Xcase 289:
XYY_USER_ACTION
X# line 420 "javaa.l"
X{ MYRET('?') }
X	YY_BREAK
Xcase 290:
XYY_USER_ACTION
X# line 421 "javaa.l"
X{ MYRET(':') }
X	YY_BREAK
Xcase 291:
XYY_USER_ACTION
X# line 422 "javaa.l"
X{echo(yytext); 
X                                         oops("Illegal character");
X                                        }
X	YY_BREAK
Xcase 292:
XYY_USER_ACTION
X# line 425 "javaa.l"
XECHO;
X	YY_BREAK
Xcase YY_STATE_EOF(INITIAL):
X	yyterminate();
X
X	case YY_END_OF_BUFFER:
X		{
X		/* Amount of text matched not including the EOB char. */
X		int yy_amount_of_matched_text = yy_cp - yytext_ptr - 1;
X
X		/* Undo the effects of YY_DO_BEFORE_ACTION. */
X		*yy_cp = yy_hold_char;
X
X		if ( yy_current_buffer->yy_input_file != yyin )
X			{
X			/* This can happen if we scan a file, yywrap() returns
X			 * 1, and then later the user points yyin at a new
X			 * file to resume scanning.  We have to assure
X			 * consistency between yy_current_buffer and our
X			 * globals.  Here is the right place to do so, because
X			 * this is the first action (other than possibly a
X			 * back-up) that will match for the new input file.
X			 */
X			yy_current_buffer->yy_input_file = yyin;
X			yy_n_chars = yy_current_buffer->yy_n_chars;
X			}
X
X		/* Note that here we test for yy_c_buf_p "<=" to the position
X		 * of the first EOB in the buffer, since yy_c_buf_p will
X		 * already have been incremented past the NUL character
X		 * (since all states make transitions on EOB to the
X		 * end-of-buffer state).  Contrast this with the test
X		 * in input().
X		 */
X		if ( yy_c_buf_p <= &yy_current_buffer->yy_ch_buf[yy_n_chars] )
X			{ /* This was really a NUL. */
X			yy_state_type yy_next_state;
X
X			yy_c_buf_p = yytext_ptr + yy_amount_of_matched_text;
X
X			yy_current_state = yy_get_previous_state();
X
X			/* Okay, we're now positioned to make the NUL
X			 * transition.  We couldn't have
X			 * yy_get_previous_state() go ahead and do it
X			 * for us because it doesn't know how to deal
X			 * with the possibility of jamming (and we don't
X			 * want to build jamming into it because then it
X			 * will run more slowly).
X			 */
X
X			yy_next_state = yy_try_NUL_trans( yy_current_state );
X
X			yy_bp = yytext_ptr + YY_MORE_ADJ;
X
X			if ( yy_next_state )
X				{
X				/* Consume the NUL. */
X				yy_cp = ++yy_c_buf_p;
X				yy_current_state = yy_next_state;
X				goto yy_match;
X				}
X
X			else
X				{
X				goto yy_find_action;
X				}
X			}
X
X		else switch ( yy_get_next_buffer() )
X			{
X			case EOB_ACT_END_OF_FILE:
X				{
X				yy_did_buffer_switch_on_eof = 0;
X
X				if ( yywrap() )
X					{
X					/* Note: because we've taken care in
X					 * yy_get_next_buffer() to have set up
X					 * yytext, we can now set up
X					 * yy_c_buf_p so that if some total
X					 * hoser (like flex itself) wants to
X					 * call the scanner after we return the
X					 * YY_NULL, it'll still work - another
X					 * YY_NULL will get returned.
X					 */
X					yy_c_buf_p = yytext_ptr + YY_MORE_ADJ;
X
X					yy_act = YY_STATE_EOF(YY_START);
X					goto do_action;
X					}
X
X				else
X					{
X					if ( ! yy_did_buffer_switch_on_eof )
X						YY_NEW_FILE;
X					}
X				break;
X				}
X
X			case EOB_ACT_CONTINUE_SCAN:
X				yy_c_buf_p =
X					yytext_ptr + yy_amount_of_matched_text;
X
X				yy_current_state = yy_get_previous_state();
X
X				yy_cp = yy_c_buf_p;
X				yy_bp = yytext_ptr + YY_MORE_ADJ;
X				goto yy_match;
X
X			case EOB_ACT_LAST_MATCH:
X				yy_c_buf_p =
X				&yy_current_buffer->yy_ch_buf[yy_n_chars];
X
X				yy_current_state = yy_get_previous_state();
X
X				yy_cp = yy_c_buf_p;
X				yy_bp = yytext_ptr + YY_MORE_ADJ;
X				goto yy_find_action;
X			}
X		break;
X		}
X
X	default:
X		YY_FATAL_ERROR(
X			"fatal flex scanner internal error--no action found" );
X	} /* end of action switch */
X		} /* end of scanning one token */
X	} /* end of yylex */
X
X
X/* yy_get_next_buffer - try to read in a new buffer
X *
X * Returns a code representing an action:
X *	EOB_ACT_LAST_MATCH -
X *	EOB_ACT_CONTINUE_SCAN - continue scanning from current position
X *	EOB_ACT_END_OF_FILE - end of file
X */
X
Xstatic int yy_get_next_buffer()
X	{
X	register char *dest = yy_current_buffer->yy_ch_buf;
X	register char *source = yytext_ptr - 1; /* copy prev. char, too */
X	register int number_to_move, i;
X	int ret_val;
X
X	if ( yy_c_buf_p > &yy_current_buffer->yy_ch_buf[yy_n_chars + 1] )
X		YY_FATAL_ERROR(
X		"fatal flex scanner internal error--end of buffer missed" );
X
X	if ( yy_current_buffer->yy_fill_buffer == 0 )
X		{ /* Don't try to fill the buffer, so this is an EOF. */
X		if ( yy_c_buf_p - yytext_ptr - YY_MORE_ADJ == 1 )
X			{
X			/* We matched a singled characater, the EOB, so
X			 * treat this as a final EOF.
X			 */
X			return EOB_ACT_END_OF_FILE;
X			}
X
X		else
X			{
X			/* We matched some text prior to the EOB, first
X			 * process it.
X			 */
X			return EOB_ACT_LAST_MATCH;
X			}
X		}
X
X	/* Try to read more data. */
X
X	/* First move last chars to start of buffer. */
X	number_to_move = yy_c_buf_p - yytext_ptr;
X
X	for ( i = 0; i < number_to_move; ++i )
X		*(dest++) = *(source++);
X
X	if ( yy_current_buffer->yy_eof_status != EOF_NOT_SEEN )
X		/* don't do the read, it's not guaranteed to return an EOF,
X		 * just force an EOF
X		 */
X		yy_n_chars = 0;
X
X	else
X		{
X		int num_to_read =
X			yy_current_buffer->yy_buf_size - number_to_move - 1;
X
X		while ( num_to_read <= 0 )
X			{ /* Not enough room in the buffer - grow it. */
X#ifdef YY_USES_REJECT
X			YY_FATAL_ERROR(
X"input buffer overflow, can't enlarge buffer because scanner uses REJECT" );
X#else
X
X			/* just a shorter name for the current buffer */
X			YY_BUFFER_STATE b = yy_current_buffer;
X
X			int yy_c_buf_p_offset = yy_c_buf_p - b->yy_ch_buf;
X
X			b->yy_buf_size *= 2;
X			b->yy_ch_buf = (char *)
X				yy_flex_realloc( (void *) b->yy_ch_buf,
X						 b->yy_buf_size );
X
X			if ( ! b->yy_ch_buf )
X				YY_FATAL_ERROR(
X				"fatal error - scanner input buffer overflow" );
X
X			yy_c_buf_p = &b->yy_ch_buf[yy_c_buf_p_offset];
X
X			num_to_read = yy_current_buffer->yy_buf_size -
X						number_to_move - 1;
X#endif
X			}
X
X		if ( num_to_read > YY_READ_BUF_SIZE )
X			num_to_read = YY_READ_BUF_SIZE;
X
X		/* Read in more data. */
X		YY_INPUT( (&yy_current_buffer->yy_ch_buf[number_to_move]),
X			yy_n_chars, num_to_read );
X		}
X
X	if ( yy_n_chars == 0 )
X		{
X		if ( number_to_move - YY_MORE_ADJ == 1 )
X			{
X			ret_val = EOB_ACT_END_OF_FILE;
X			yyrestart( yyin );
X			}
X
X		else
X			{
X			ret_val = EOB_ACT_LAST_MATCH;
X			yy_current_buffer->yy_eof_status = EOF_PENDING;
X			}
X		}
X
X	else
X		ret_val = EOB_ACT_CONTINUE_SCAN;
X
X	yy_n_chars += number_to_move;
X	yy_current_buffer->yy_ch_buf[yy_n_chars] = YY_END_OF_BUFFER_CHAR;
X	yy_current_buffer->yy_ch_buf[yy_n_chars + 1] = YY_END_OF_BUFFER_CHAR;
X
X	/* yytext begins at the second character in yy_ch_buf; the first
X	 * character is the one which preceded it before reading in the latest
X	 * buffer; it needs to be kept around in case it's a newline, so
X	 * yy_get_previous_state() will have with '^' rules active.
X	 */
X
X	yytext_ptr = &yy_current_buffer->yy_ch_buf[1];
X
X	return ret_val;
X	}
X
X
X/* yy_get_previous_state - get the state just before the EOB char was reached */
X
Xstatic yy_state_type yy_get_previous_state()
X	{
X	register yy_state_type yy_current_state;
X	register char *yy_cp;
X
X	register char *yy_bp = yytext_ptr;
X
X	yy_current_state = yy_start;
X	if ( yy_bp[-1] == '\n' )
X		++yy_current_state;
X
X	for ( yy_cp = yytext_ptr + YY_MORE_ADJ; yy_cp < yy_c_buf_p; ++yy_cp )
X		{
X		register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
X		if ( yy_accept[yy_current_state] )
X			{
X			yy_last_accepting_state = yy_current_state;
X			yy_last_accepting_cpos = yy_cp;
X			}
X		while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
X			{
X			yy_current_state = (int) yy_def[yy_current_state];
X			if ( yy_current_state >= 1012 )
X				yy_c = yy_meta[(unsigned int) yy_c];
X			}
X		yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
X		}
X
X	return yy_current_state;
X	}
X
X
X/* yy_try_NUL_trans - try to make a transition on the NUL character
X *
X * synopsis
X *	next_state = yy_try_NUL_trans( current_state );
X */
X
X#ifdef YY_USE_PROTOS
Xstatic yy_state_type yy_try_NUL_trans( yy_state_type yy_current_state )
X#else
Xstatic yy_state_type yy_try_NUL_trans( yy_current_state )
Xyy_state_type yy_current_state;
X#endif
X	{
X	register int yy_is_jam;
X	register char *yy_cp = yy_c_buf_p;
X
X	register YY_CHAR yy_c = 1;
X	if ( yy_accept[yy_current_state] )
X		{
X		yy_last_accepting_state = yy_current_state;
X		yy_last_accepting_cpos = yy_cp;
X		}
X	while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
X		{
X		yy_current_state = (int) yy_def[yy_current_state];
X		if ( yy_current_state >= 1012 )
X			yy_c = yy_meta[(unsigned int) yy_c];
X		}
X	yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
X	yy_is_jam = (yy_current_state == 1011);
X
X	return yy_is_jam ? 0 : yy_current_state;
X	}
X
X
X#ifdef YY_USE_PROTOS
Xstatic void yyunput( int c, register char *yy_bp )
X#else
Xstatic void yyunput( c, yy_bp )
Xint c;
Xregister char *yy_bp;
X#endif
X	{
X	register char *yy_cp = yy_c_buf_p;
X
X	/* undo effects of setting up yytext */
X	*yy_cp = yy_hold_char;
X
X	if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 )
X		{ /* need to shift things up to make room */
X		/* +2 for EOB chars. */
X		register int number_to_move = yy_n_chars + 2;
X		register char *dest = &yy_current_buffer->yy_ch_buf[
X					yy_current_buffer->yy_buf_size + 2];
X		register char *source =
X				&yy_current_buffer->yy_ch_buf[number_to_move];
X
X		while ( source > yy_current_buffer->yy_ch_buf )
X			*--dest = *--source;
X
X		yy_cp += dest - source;
X		yy_bp += dest - source;
X		yy_n_chars = yy_current_buffer->yy_buf_size;
X
X		if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 )
X			YY_FATAL_ERROR( "flex scanner push-back overflow" );
X		}
X
X	if ( yy_cp > yy_bp && yy_cp[-1] == '\n' )
X		yy_cp[-2] = '\n';
X
X	*--yy_cp = (char) c;
X
X
X	/* Note: the formal parameter *must* be called "yy_bp" for this
X	 * macro to now work correctly.
X	 */
X	YY_DO_BEFORE_ACTION; /* set up yytext again */
X	}
X
X
X#ifdef __cplusplus
Xstatic int yyinput()
X#else
Xstatic int input()
X#endif
X	{
X	int c;
X
X	*yy_c_buf_p = yy_hold_char;
X
X	if ( *yy_c_buf_p == YY_END_OF_BUFFER_CHAR )
X		{
X		/* yy_c_buf_p now points to the character we want to return.
X		 * If this occurs *before* the EOB characters, then it's a
X		 * valid NUL; if not, then we've hit the end of the buffer.
X		 */
X		if ( yy_c_buf_p < &yy_current_buffer->yy_ch_buf[yy_n_chars] )
X			/* This was really a NUL. */
X			*yy_c_buf_p = '\0';
X
X		else
X			{ /* need more input */
X			yytext_ptr = yy_c_buf_p;
X			++yy_c_buf_p;
X
X			switch ( yy_get_next_buffer() )
X				{
X				case EOB_ACT_END_OF_FILE:
X					{
X					if ( yywrap() )
X						{
X						yy_c_buf_p =
X						yytext_ptr + YY_MORE_ADJ;
X						return EOF;
X						}
X
X					YY_NEW_FILE;
X#ifdef __cplusplus
X					return yyinput();
X#else
X					return input();
X#endif
X					}
X
X				case EOB_ACT_CONTINUE_SCAN:
X					yy_c_buf_p = yytext_ptr + YY_MORE_ADJ;
X					break;
X
X				case EOB_ACT_LAST_MATCH:
X#ifdef __cplusplus
X					YY_FATAL_ERROR(
X					"unexpected last match in yyinput()" );
X#else
X					YY_FATAL_ERROR(
X					"unexpected last match in input()" );
X#endif
X				}
X			}
X		}
X
X	c = *yy_c_buf_p;
X	*yy_c_buf_p = '\0';	/* preserve yytext */
X	yy_hold_char = *++yy_c_buf_p;
X
X	return c;
X	}
X
X
X#ifdef YY_USE_PROTOS
Xvoid yyrestart( FILE *input_file )
X#else
Xvoid yyrestart( input_file )
XFILE *input_file;
X#endif
X	{
X	if ( ! yy_current_buffer )
X		yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE );
X
X	yy_init_buffer( yy_current_buffer, input_file );
X	yy_load_buffer_state();
X	}
X
X
X#ifdef YY_USE_PROTOS
Xvoid yy_switch_to_buffer( YY_BUFFER_STATE new_buffer )
X#else
Xvoid yy_switch_to_buffer( new_buffer )
XYY_BUFFER_STATE new_buffer;
X#endif
X	{
X	if ( yy_current_buffer == new_buffer )
X		return;
X
X	if ( yy_current_buffer )
X		{
X		/* Flush out information for old buffer. */
X		*yy_c_buf_p = yy_hold_char;
X		yy_current_buffer->yy_buf_pos = yy_c_buf_p;
X		yy_current_buffer->yy_n_chars = yy_n_chars;
X		}
X
X	yy_current_buffer = new_buffer;
X	yy_load_buffer_state();
X
X	/* We don't actually know whether we did this switch during
X	 * EOF (yywrap()) processing, but the only time this flag
X	 * is looked at is after yywrap() is called, so it's safe
X	 * to go ahead and always set it.
X	 */
X	yy_did_buffer_switch_on_eof = 1;
X	}
X
X
X#ifdef YY_USE_PROTOS
Xvoid yy_load_buffer_state( void )
X#else
Xvoid yy_load_buffer_state()
X#endif
X	{
X	yy_n_chars = yy_current_buffer->yy_n_chars;
X	yytext_ptr = yy_c_buf_p = yy_current_buffer->yy_buf_pos;
X	yyin = yy_current_buffer->yy_input_file;
X	yy_hold_char = *yy_c_buf_p;
X	}
X
X
X#ifdef YY_USE_PROTOS
XYY_BUFFER_STATE yy_create_buffer( FILE *file, int size )
X#else
XYY_BUFFER_STATE yy_create_buffer( file, size )
XFILE *file;
Xint size;
X#endif
X	{
X	YY_BUFFER_STATE b;
X
X	b = (YY_BUFFER_STATE) yy_flex_alloc( sizeof( struct yy_buffer_state ) );
X
X	if ( ! b )
X		YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
X
X	b->yy_buf_size = size;
X
X	/* yy_ch_buf has to be 2 characters longer than the size given because
X	 * we need to put in 2 end-of-buffer characters.
X	 */
X	b->yy_ch_buf = (char *) yy_flex_alloc( b->yy_buf_size + 2 );
X
X	if ( ! b->yy_ch_buf )
X		YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
X
X	yy_init_buffer( b, file );
X
X	return b;
X	}
X
X
X#ifdef YY_USE_PROTOS
Xvoid yy_delete_buffer( YY_BUFFER_STATE b )
X#else
Xvoid yy_delete_buffer( b )
XYY_BUFFER_STATE b;
X#endif
X	{
X	if ( b == yy_current_buffer )
X		yy_current_buffer = (YY_BUFFER_STATE) 0;
X
X	yy_flex_free( (void *) b->yy_ch_buf );
X	yy_flex_free( (void *) b );
X	}
X
X
X#ifdef YY_USE_PROTOS
Xvoid yy_init_buffer( YY_BUFFER_STATE b, FILE *file )
X#else
Xvoid yy_init_buffer( b, file )
XYY_BUFFER_STATE b;
XFILE *file;
X#endif
X	{
X	b->yy_input_file = file;
X
X	/* We put in the '\n' and start reading from [1] so that an
X	 * initial match-at-newline will be true.
X	 */
X
X	b->yy_ch_buf[0] = '\n';
X	b->yy_n_chars = 1;
X
X	/* We always need two end-of-buffer characters.  The first causes
X	 * a transition to the end-of-buffer state.  The second causes
X	 * a jam in that state.
X	 */
X	b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR;
X	b->yy_ch_buf[2] = YY_END_OF_BUFFER_CHAR;
X
X	b->yy_buf_pos = &b->yy_ch_buf[1];
X
X	b->yy_is_interactive = file ? isatty( fileno(file) ) : 0;
X
X	b->yy_fill_buffer = 1;
X
X	b->yy_eof_status = EOF_NOT_SEEN;
X	}
X
X
X#ifdef YY_USE_PROTOS
Xstatic void yy_push_state( int new_state )
X#else
Xstatic void yy_push_state( new_state )
Xint new_state;
X#endif
X	{
X	if ( yy_start_stack_ptr >= yy_start_stack_depth )
X		{
X		int new_size;
X
X		yy_start_stack_depth += YY_START_STACK_INCR;
X		new_size = yy_start_stack_depth * sizeof( int );
X
X		if ( ! yy_start_stack )
X			yy_start_stack = (int *) yy_flex_alloc( new_size );
X
X		else
X			yy_start_stack = (int *) yy_flex_realloc(
X					(void *) yy_start_stack, new_size );
X
X		if ( ! yy_start_stack )
X			YY_FATAL_ERROR(
X			"out of memory expanding start-condition stack" );
X		}
X
X	yy_start_stack[yy_start_stack_ptr++] = YY_START;
X
X	BEGIN(new_state);
X	}
X
X
Xstatic void yy_pop_state()
X	{
X	if ( --yy_start_stack_ptr < 0 )
X		YY_FATAL_ERROR( "start-condition stack underflow" );
X
X	BEGIN(yy_start_stack[yy_start_stack_ptr]);
X	}
X
X
Xstatic int yy_top_state()
X	{
X	return yy_start_stack[yy_start_stack_ptr - 1];
X	}
X
X
X#ifdef YY_USE_PROTOS
Xstatic void yy_fatal_error( const char msg[] )
X#else
Xstatic void yy_fatal_error( msg )
Xchar msg[];
X#endif
X	{
X	(void) fprintf( stderr, "%s\n", msg );
X	exit( 1 );
X	}
X
X
X
X/* Redefine yyless() so it works in section 3 code. */
X
X#undef yyless
X#define yyless(n) \
X	do \
X		{ \
X		/* Undo effects of setting up yytext. */ \
X		yytext[yyleng] = yy_hold_char; \
X		yy_c_buf_p = yytext + n - YY_MORE_ADJ; \
X		yy_hold_char = *yy_c_buf_p; \
X		*yy_c_buf_p = '\0'; \
X		yyleng = n; \
X		} \
X	while ( 0 )
X
X
X/* Internal utility routines. */
X
X#ifndef yytext_ptr
X#ifdef YY_USE_PROTOS
Xstatic void yy_flex_strcpy( char *s1, const char *s2 )
X#else
Xstatic void yy_flex_strcpy( s1, s2 )
Xchar *s1;
Xconst char *s2;
X#endif
X	{
X	while ( (*(s1++) = *(s2++)) )
X		;
X	}
X#endif
X
X
X#ifdef YY_USE_PROTOS
Xstatic void *yy_flex_alloc( unsigned int size )
X#else
Xstatic void *yy_flex_alloc( size )
Xunsigned int size;
X#endif
X	{
X	return (void *) malloc( size );
X	}
X
X#ifdef YY_USE_PROTOS
Xstatic void *yy_flex_realloc( void *ptr, unsigned int size )
X#else
Xstatic void *yy_flex_realloc( ptr, size )
Xvoid *ptr;
Xunsigned int size;
X#endif
X	{
X	return (void *) realloc( ptr, size );
X	}
X
X#ifdef YY_USE_PROTOS
Xstatic void yy_flex_free( void *ptr )
X#else
Xstatic void yy_flex_free( ptr )
Xvoid *ptr;
X#endif
X	{
X	free( ptr );
X	}
X# line 425 "javaa.l"
X
X/* Listing routines */
X
Xvoid StartListing(void) {
X   printf("%s","*     Java Assembler\n\n");
X   linenumber = 0;
X   col        = 1;
X   NewLine(1);
X}
X
Xvoid EndListing(void) {
X   printf("%s","\n\n*     End of Assembly \n\n");
X}
X
Xvoid NewLine(int bump) 
X{
X   linenumber += bump;
X   if (bump) {
X      col = 1;
X      printf("\n%7d: ",linenumber);
X      }
X   else printf("\n%s%6d: ","*",linenumber);
X}
X
Xvoid echo(char *text) 
X{
X   col += strlen(yytext);
X   printf("%s",yytext);
X}
X
Xvoid StartMessage(void) {
X   int i;
X   NewLine(0);
X   printf("%*s",col,"^^^ ");
X}
X
Xvoid EndMessage(void) {
X   int i;
X   NewLine(0);
X   printf("%*s",col," ");
X}
X
Xvoid message(char *text) 
X{
X   StartMessage();
X   printf("%s",text);
X   EndMessage();
X}
X
Xvoid ABORT(int line, int col)
X{
X   fprintf(stderr,"Aborting due to error at line %d, column %d\n",
X                  line, col);
X   EndListing();
X   exit(1);
X}
X
Xvoid warning(char *text)
X{
X   message(text);
X   fprintf(stderr,"%s\n",text);
X}
Xvoid oops(char *text) 
X{
X   message(text);
X   fprintf(stderr,"%s\n",text);
X   ABORT(linenumber,col);
X}
X
Xint LineNumber() {
X  return(linenumber);
X}
Xint ColNumber() {
X  return(col);
X}
END_OF_FILE
if test 121402 -ne `wc -c <'lex.c'`; then
    echo shar: \"'lex.c'\" unpacked with wrong size!
fi
# end of 'lex.c'
fi
if test -f 'main.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'main.c'\"
else
echo shar: Extracting \"'main.c'\" \(433 characters\)
sed "s/^X//" >'main.c' <<'END_OF_FILE'
X/* copyright 1996 Jason Hunt and Washington University, St. Louis */
X#include <stdio.h>
X#include "types.h"
X#include "protos.h"
X#include "listing.h"
X#include "build.h"
Xextern int yydebug;
Xextern int UseStdOut;
Xmain(){
X  int result;
X  UseStdOut = 0;
X  /* yydebug = 1; */
X  StartListing();
X  result = yyparse();
X  EndListing();
X  return(result);
X}
Xvoid yyerror(char *text) 
X{
X   oops(text);
X}
Xint yywrap(void){EndListing(); return(1);}
END_OF_FILE
if test 433 -ne `wc -c <'main.c'`; then
    echo shar: \"'main.c'\" unpacked with wrong size!
fi
# end of 'main.c'
fi
if test -f 'symbol.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'symbol.c'\"
else
echo shar: Extracting \"'symbol.c'\" \(6094 characters\)
sed "s/^X//" >'symbol.c' <<'END_OF_FILE'
X/* copyright 1996 Jason Hunt and Washington University St Louis */
X#include <stdlib.h>
X#include <stdio.h>
X#include <string.h>
X#include "types.h"
X#include "utils.h"
X#include "build.h"
X#include "listing.h"
X
X#define  StartNestLevel  (2)
X#define  EndNestLevel    (64)
X
Xstatic int SymBlock=1024;   /* How many symbols to allocate at a time */
X
Xstatic int NumSymbols=0;
X
Xstatic Symbol *FirstSymbolatLevel[EndNestLevel+1];
Xstatic Symbol *FreeSymbols;
Xstatic Symbol *UsedSymbols;
X
Xstatic int NestLevel = StartNestLevel;
X
Xint IsTypeSymbol(char *name)
X{
X  Symbol *sym;
X  
X  if (!(sym = FindSymbol(0,name))) return(0);
X  if (sym->M.C == TypedefClass) return(1);
X  else                          return(0);
X}
X
Xint CurrentNestLevel(void) { return(NestLevel); }
X
Xvoid IncrNestLevel(void) {
X   char str[100];
X   RangeCheck(StartNestLevel,NestLevel,EndNestLevel-1,"Nest level overflow");
X   FirstSymbolatLevel[++NestLevel] = NULL;
X/* sprintf(str,"Nest level now %d",NestLevel); */
X/* message(str);                               */
X}
Xvoid DecrNestLevel(void) {
X   char str[100];
X   RangeCheck(StartNestLevel+1,NestLevel,EndNestLevel,"Nest level underflow");
X   FirstSymbolatLevel[NestLevel--] = NULL;
X/* sprintf(str,"Nest level now %d",NestLevel); */
X/* message(str);                               */
X}
X
Xvoid DumpSymbolDisplay(void) {
X   int i;
X   Symbol *sym;
X   for (i=NestLevel; i>= 0; --i) {
X      printf("\n Symbol display level %d\n",i);
X      for (sym=FirstSymbolatLevel[i]; sym; sym=sym->next) {
X         ShowSymbol(sym,2); printf("\n");
X      }
X   }
X}
X
Xint GetNestLevel(void) {
X   return(NestLevel);
X}
X
XSymbol *RetrieveSymbol(char *name) 
X{
X   Symbol *sym;
X   sym = LookupSymbol(0,name);
X   if (!(sym->InUse)) {
X      StartMessage();
X      printf("Symbol %s not declared\n",name);
X      oops("Undeclared symbol");
X      EndMessage();
X   }
X   return(sym);
X}
X
XSymbol *EnterSymbol(MimeType M, char *name)
X{
X  Symbol *sym;
X  sym = LookupSymbol(NestLevel, name);
X  if (sym->InUse) {
X     StartMessage();
X     printf("Symbol %s multiply defined\n",name);
X     EndMessage();
X  }
X  sym->InUse = 1;
X  sym->M     = M;
X  sym->level = NestLevel;
X  return(sym);
X}
X
XSymbol *GetSymbol(void) {
X   Symbol *sym;
X
X   if (!FreeSymbols) {
X      Symbol *newblock;
X      int i;
X      newblock = (Symbol *) malloc (SymBlock * sizeof(Symbol));
X      if (!newblock) oops("out of storage for symbol table");
X      bzero((unsigned char *)newblock,SymBlock * sizeof(Symbol));
X      for (i=0; i<SymBlock; ++i) {
X         newblock[i].next = FreeSymbols;
X         FreeSymbols = &(newblock[i]);
X      }
X   }
X              
X
X   sym =  FreeSymbols;
X   FreeSymbols = FreeSymbols->next;
X
X   sym->nextused = UsedSymbols;
X   UsedSymbols = sym;
X
X   sym->next   = NULL;
X   return(sym);
X}
X
XSymbol *ExistsSymbol(char *name)
X{
X   return(FindSymbol(0,name));
X}
X
XSymbol *FindSymbol(int level, char *name)
X{
X   int i;
X   Symbol *sym;
X   for (i=NestLevel; i>= level; i--)
X      for (sym = FirstSymbolatLevel[i]; sym; sym=sym->next) {
X         if (!strcmp(name,sym->name)) return(sym);
X      }
X   return(NULL);
X}
X
XSymbol *LookupSymbol(int level, char *name) 
X{
X   Symbol *sym;
X
X   if (sym=FindSymbol(level,name)) return(sym);
X
X   sym =  GetSymbol();
X
X   sym->name = (char *)malloc(strlen(name)+2);
X   sym->InUse = 0;  /* not yet initialized */
X   sym->SymbolID = ++NumSymbols;
X   strcpy(sym->name,name);
X
X   sym->next                 = FirstSymbolatLevel[level];
X   FirstSymbolatLevel[level] = sym;
X   return(sym);
X}
X
Xvoid FormatType(char *str /* must be 27 chars wide*/, MimeType M)
X{
X  char *basetype;
X  char *storageclass;
X  char *typequalifier;
X  char *function;
X
X  switch (M.C) {
X   case ExternClass:      storageclass = "extern";    break;
X   case StaticClass:      storageclass = "static";    break;
X   case AutoClass:        storageclass = "auto";      break;
X   case RegisterClass:    storageclass = "reg";       break;
X   case TypedefClass:     storageclass = "typedef";   break;
X   default:               oops("Bad StorageClass");
X  }
X
X  switch (M.Q) {
X   case ConstQualifier:    typequalifier = "const";    break;
X   case VolatileQualifier: typequalifier = "vol";      break;
X   case NonQualified:      typequalifier = " ";        break;
X   default:                oops("Bad TypeQualifier");
X }
X
X  switch (M.T.B) {
X    case CharType:        basetype = "char";          break;
X    case IntType:         basetype = "int";           break;
X    case FloatType:       basetype = "float";         break;
X    case VoidType:        basetype = "void";          break;
X    case StructType:      basetype = "struct";        break;
X    case UnionType:       basetype = "union";         break;
X    case EnumType:        basetype = "enum";          break;
X    case ConstType:       basetype = "const";         break;
X    default:              oops("Bad Base Type");
X  }
X
X  if (M.T.function) function = "()";
X  else            function = " ";
X
X  sprintf(str," %-5s *%1.1d %-2s [%1.1d] %-7s %-5s",
X           basetype,
X           M.T.ptrcount,
X           function,
X           M.T.numdims,
X           storageclass,
X           typequalifier
X  );
X}
X
Xvoid FormatSymbol(char *str, Symbol *sym)
X{
X  char p1[80];
X  FormatType(p1,sym->M);
X  sprintf(str,"Symbol%3.3d(%2.2d) %s: %s",
X          sym->SymbolID,
X          sym->level,
X          p1,
X          sym->name);
X}
X
Xvoid PrintSymbol(Symbol *sym)
X{
X   char str[100];
X   FormatSymbol(str,sym);
X   printf("%s",str);
X}
X
Xvoid ShowSymbol(Symbol *sym, int level)
X{
X    int spacing = 2*level+1;
X    printf("\n%-*s",spacing," ");
X    PrintSymbol(sym);
X    if ((sym->M.T.ptrcount == 0) && (sym->M.T.function ==0))
X    switch (sym->M.T.B) {
X       Symbol *s;
X       case StructType:
X       case UnionType:
X       case EnumType:   for (s=sym->M.T.info.contents; s; s=s->adj)
X                              ShowSymbol(s,level+1);
X                        break;
X       case ConstType:
X                        printf(" Value is %d",sym->M.T.info.intval);
X       default:         break;
X    }
X}
X
X
Xvoid ForEachSymbol(void (*Apply)(Symbol *, int))
X{
X   Symbol *sym;
X   for (sym=UsedSymbols; sym; sym=sym->nextused) Apply(sym,0);
X}
END_OF_FILE
if test 6094 -ne `wc -c <'symbol.c'`; then
    echo shar: \"'symbol.c'\" unpacked with wrong size!
fi
# end of 'symbol.c'
fi
if test -f 'utils.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'utils.c'\"
else
echo shar: Extracting \"'utils.c'\" \(1365 characters\)
sed "s/^X//" >'utils.c' <<'END_OF_FILE'
X#include <stdlib.h>
X#include <stdio.h>
X#include <sys/types.h>
X#include <sys/times.h>
X#include <string.h>
X#include "types.h"
X#include "utils.h"
X#include "build.h"
X#include "listing.h"
X
Xvoid bzero(unsigned char *start, int len)
X{
X   while (len-- > 0) *(start++) = (unsigned char) 0;
X}
X
Xvoid RangeCheck(int lower, int value, int upper, char *errormessage) 
X{
X   if ((value < lower) | (value > upper)) {
X      StartMessage();
X      printf("RangeCheck fails: %d <= %d <= %d:  ",lower,value,upper);
X      EndMessage();
X      oops(errormessage);
X   }
X}
X
Xchar *ArbName(void) {
X   static entered = 0;
X   char  *ans;
X   unsigned char c;
X   if (!entered) {
X      int t;
X      entered = 1;
X      t = time(NULL);
X      srand(t);
X   }
X   ans = (char *)malloc(8);
X   sprintf(&(ans[1]),"$%5.5d",rand()%10000);
X   c = strlen(ans);
X   ans[0] = c;
X   return(&(ans[1]));
X}
X
Xchar *ConsStrings(char *str1, char *str2)
X{
X   char *ans;
X   unsigned char c;
X   if (str1 == NULL) str1 = "";
X   if (str2 == NULL) str2 = "";
X   c = strlen(str1) + strlen(str2);
X   ans = (char *) malloc(c+2);
X   strcpy(&(ans[1]),str1);
X   strcpy(&(ans[strlen(str1)+1]),str2);
X   ans[0] = c;
X   return(&(ans[1]));
X}
X
Xvoid ReportID(char *id)
X{
X   Symbol *sym;
X   char str[100];
X   if (sym=FindSymbol(0,id)) FormatSymbol(str,sym);
X   else                      strcpy(str,"--- Null Symbol ---");
X   message(str);
X}
END_OF_FILE
if test 1365 -ne `wc -c <'utils.c'`; then
    echo shar: \"'utils.c'\" unpacked with wrong size!
fi
# end of 'utils.c'
fi
if test -f 'Makefile' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'Makefile'\"
else
echo shar: Extracting \"'Makefile'\" \(1024 characters\)
sed "s/^X//" >'Makefile' <<'END_OF_FILE'
X        CCFLAGS = -g
X        BUILD =  utils.o symbol.o gen.o
X        BIN   =  /home/cec/class/cs431/bin
X	CC     = $(CCC)
X        CFLAGS = $(CCFLAGS)
X
X
Xjavaa:			gram.o newlex lex.o main.o $(BUILD) Makefile
X			$(CC) $(CFLAGS) -o javaa main.o gram.o lex.o $(BUILD)
X
Xgram.o:			javaa.y
X			bison -d -t javaa.y
X			mv javaa.tab.c gram.c
X			cmp -s javaa.tab.h gram.h || cp javaa.tab.h gram.h
X			$(CC) $(CFLAGS) -c gram.c
X
Xgram.o:                 build.h types.h utils.h protos.h
X
Xlex.o:			javaa.l
X			flex javaa.l
X			mv lex.yy.c lex.c
X			$(CC) $(CFLAGS) -c lex.c
X
Xlex.o:			types.h gram.h utils.h build.h listing.h protos.h 
X
X$(BUILD):		types.h build.h utils.h listing.h
X
Xsem.o:			gram.h
X
Xnewlex:                 beginlex middlelex endlex
X			cat beginlex middlelex endlex > newlex
X			cmp -s newlex javaa.l || cp newlex javaa.l
X
Xclean:
X			/bin/rm -f *.o newlex javaa.l
X			/bin/rm -f gram.h javaa.tab.h javaa.tab.c lex.yy.c lex.c gram.c
X			/bin/rm -f javaa.output
X
Xdistrib:
X			shar -o SHAR *.c Makefile *.h beginlex middlelex endlex *.y
END_OF_FILE
if test 1024 -ne `wc -c <'Makefile'`; then
    echo shar: \"'Makefile'\" unpacked with wrong size!
fi
# end of 'Makefile'
fi
if test -f 'build.h' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'build.h'\"
else
echo shar: Extracting \"'build.h'\" \(2825 characters\)
sed "s/^X//" >'build.h' <<'END_OF_FILE'
X/* copyright 1996, Jason Hunt and Washington Univ., St. Louis */
Xint          IsTypeSymbol(char *);
XSymbol      *EnterSymbol(MimeType, char *);
XSymbol      *LookupSymbol(int, char *);
XSymbol      *RetrieveSymbol(char *);
XSymbol      *FindSymbol(int, char *);
Xvoid         PrintSymbol(Symbol *);
Xvoid         ForEachSymbol(void (*Apply)(Symbol *, int));
Xvoid         ShowSymbol(Symbol *, int);
XSymbol      *ExistsSymbol(char *);
Xvoid	     FormatSymbol(char *, Symbol *);
Xvoid         FormatType(char *, MimeType);
Xvoid	     DecrNestLevel(void);
Xvoid	     IncrNestLevel(void);
Xint          CurrentNestLevel(void);
XTreeNode    *CopyNode(TreeNode *);
Xvoid         TreeWalk(TreeNode *, void (*)(TreeNode *), void (*)(TreeNode *));
XTreeNode    *MakeSiblings(TreeNode *, TreeNode *);
XTreeNode    *MakeFamily(TreeNode *, TreeNode *);
XTreeNode    *MakeConversionNode(ConvType);
XTreeNode    *MakeOperatorNode(int);
XTreeNode    *MakeIntegerNode(int);
XTreeNode    *MakeFloatNode(float);
XTreeNode    *MakeSymbolNode(Symbol *);
XTreeNode    *MakeStringNode(char *);
XTreeNode    *MakeCharNode(char);
Xvoid         TreePrint(TreeNode *, int);
Xvoid         LinkNodes(TreeNode *);
Xvoid         DummyVisit(TreeNode *);
Xvoid         SemanticRLvalueCheck(TreeNode *);
Xvoid         SemanticTypeCheck(TreeNode *);
Xvoid         SetBlankMimeType(MimeType);
Xvoid         RegisterSymbol(Symbol *);
Xvoid         CodeGen(TreeNode *, TreeNode *);
Xvoid         GenExprID(TreeNode *);
Xvoid         GenFuncExprID(TreeNode *);
Xvoid         SetStaticLinks(TreeNode *, TreeNode *);
Xvoid GenNoArgCode(int);
Xvoid GenOneArgCode(int, ArgType);
Xvoid GenTwoArgCode(int, ArgType, ArgType);
Xvoid GenFieldArgCode(int, char*, char*, char*);
Xvoid GenMethodArgCode(int, char*, char*, char*);
Xvoid GenClassArgCode(int, char*);
Xvoid GenLabelArgCode(int, char*);
Xvoid GenLocalVarArgCode(int, int);
Xvoid GenINVOKEINTERFACECode(int, char*, char*, char*, int);
Xvoid GenIINCCode(int, int, int);
Xvoid GenMULTIANEWARRAYCode(int, char*, int);
Xvoid GenNEWARRAYCode(int, int);
Xvoid GenLOOKUPSWITCHCode(int, char*, lookupentry*);
Xvoid GenTABLESWITCHCode(int, int, int, char*, tableentry*);
Xvoid InitAssembler();
Xvoid EndAssembler();
Xvoid SetThisClass(short, char*, char*);
Xvoid AddToInterfaceList(char*);
Xvoid SetSourceFile(char*);
Xvoid NewNewMethod(int);
Xvoid NewMethod(char*, char*, int, int);
Xvoid EndMethod();
Xvoid NewField(int, char*, char*, ArgType);
Xchar* GetThisClass();
Xvoid DefineLabel(char*);
Xvoid NewLocalVar(char*, char*);
Xvoid IncrementLocalVarSlot(char*);
Xshort GetLocalVar(char*);
Xlookupentry * AddToLookupList(lookupentry*, int, char*);
Xtableentry * AddToTableList(tableentry*, char*);
Xvoid AddToExceptionList(char*, char*, char*, char*);
Xvoid AddToThrowsList(char*);
Xvoid AddToLineNumberList(char*, short);
Xvoid AddToUserLocalVarList(char*, char*, char*, char*, short);
END_OF_FILE
if test 2825 -ne `wc -c <'build.h'`; then
    echo shar: \"'build.h'\" unpacked with wrong size!
fi
# end of 'build.h'
fi
if test -f 'gram.h' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'gram.h'\"
else
echo shar: Extracting \"'gram.h'\" \(6919 characters\)
sed "s/^X//" >'gram.h' <<'END_OF_FILE'
Xtypedef union {
X   Terminal        rk;
X   Terminal        NT;
X   Terminal        RK;
X   Terminal        Rk;
X
X   float           floatval;
X   double          doubleval;
X   char            charval;
X   int             intval;
X   long            longval;
X   char           *string;
X
X   BaseType        basetype;
X   StorageClass    storageclass;
X   TypeQualifier   typequalifier;
X   ArgType	   argtype;
X  
X   lookupentry *   lookuplistptr;
X   tableentry *    tablelistptr;
X
X   struct {
X	char* classname;
X	char* fieldmethodname;
X   }		classfieldmethodstruct;
X
X   struct _declinfo {
X      int   function;
X      int   ptrcount;
X      int   dimsize[7];
X      int   numdims;
X      char *name;
X   }               declinfo;
X   
X   struct {
X      TreeNode *formals;
X      struct _declinfo D;
X   }               funcstuff;
X
X   struct {
X      Type          T;
X      StorageClass  C;
X      TypeQualifier Q;
X   } declspecs;
X
X   struct {
X      Type          T;
X      StorageClass  C;
X      TypeQualifier Q;
X      TreeNode     *node;
X   } declspecsnode;
X
X   struct {
X      Type          T;
X      StorageClass  C;
X      TypeQualifier Q;
X      Symbol       *headsym;
X      Symbol       *prevsym;
X   } structdeclspecs;
X
X   struct {
X      Symbol   *headsym;
X      Symbol   *prevsym;
X   } headprevsym;
X
X   struct {
X      int       spec;
X      int       val;
X      char     *id;
X   } idspecval;
X
X   struct {
X      Symbol   *sym;
X      int       val;
X   } symval;
X
X   Type            typetype;
X
X   Symbol         *sym;
X
X   struct {
X      TreeNode *decl;
X      TreeNode *func;
X   } declfunc;
X
X   struct {
X      TreeNode *decl;
X      TreeNode *func;
X      TreeNode *exprs;
X      TreeNode *last;
X   } declfuncexprs;
X
X   struct {
X      TreeNode *exprs;
X      TreeNode *last;
X   } exprslast;
X
X   TreeNode       *node;
X} YYSTYPE;
X#define	LABEL	258
X#define	IDENTIFIER	259
X#define	INTCONSTANT	260
X#define	LONGCONSTANT	261
X#define	FLOATCONSTANT	262
X#define	DOUBLECONSTANT	263
X#define	CHARCONSTANT	264
X#define	STRING_LITERAL	265
X#define	CLASS	266
X#define	EXTENDS	267
X#define	ACCESS	268
X#define	IMPLEMENTS	269
X#define	FIELD	270
X#define	METHOD	271
X#define	MAX_STACK	272
X#define	MAX_LOCALS	273
X#define	CODE	274
X#define	PUBLIC	275
X#define	PRIVATE	276
X#define	PROTECTED	277
X#define	ABSTRACT	278
X#define	FINAL	279
X#define	INTERFACE	280
X#define	STATIC	281
X#define	NATIVE	282
X#define	SYNCHRONIZED	283
X#define	TRANSIENT	284
X#define	VOLATILE	285
X#define	BYTE	286
X#define	CHAR	287
X#define	DOUBLE	288
X#define	FLOAT	289
X#define	INT	290
X#define	LONG	291
X#define	SHORT	292
X#define	BOOLEAN	293
X#define	VOID	294
X#define	DEFAULT	295
X#define	TO	296
X#define	EXCEPTIONS	297
X#define	SOURCEFILE	298
X#define	THROWS	299
X#define	LINENUMBERTABLE	300
X#define	LOCALVARIABLETABLE	301
X#define	ACC_PUBLIC	302
X#define	ACC_PRIVATE	303
X#define	ACC_PROTECTED	304
X#define	ACC_STATIC	305
X#define	ACC_FINAL	306
X#define	ACC_SYNCHRONIZED	307
X#define	ACC_VOLATILE	308
X#define	ACC_TRANSIENT	309
X#define	ACC_NATIVE	310
X#define	ACC_INTERFACE	311
X#define	ACC_ABSTRACT	312
X#define	AALOAD	313
X#define	AASTORE	314
X#define	ACONST_NULL	315
X#define	ALOAD_0	316
X#define	ALOAD_1	317
X#define	ALOAD_2	318
X#define	ALOAD_3	319
X#define	ANEWARRAY	320
X#define	ARETURN	321
X#define	ARRAYLENGTH	322
X#define	ASTORE_0	323
X#define	ASTORE_1	324
X#define	ASTORE_2	325
X#define	ASTORE_3	326
X#define	ATHROW	327
X#define	BALOAD	328
X#define	BASTORE	329
X#define	BIPUSH	330
X#define	CALOAD	331
X#define	CASTORE	332
X#define	CHECKCAST	333
X#define	D2F	334
X#define	D2I	335
X#define	D2L	336
X#define	DADD	337
X#define	DALOAD	338
X#define	DASTORE	339
X#define	DCMPG	340
X#define	DCMPL	341
X#define	DCONST_0	342
X#define	DCONST_1	343
X#define	DDIV	344
X#define	DLOAD_0	345
X#define	DLOAD_1	346
X#define	DLOAD_2	347
X#define	DLOAD_3	348
X#define	DMUL	349
X#define	DNEG	350
X#define	DREM	351
X#define	DRETURN	352
X#define	DSTORE_0	353
X#define	DSTORE_1	354
X#define	DSTORE_2	355
X#define	DSTORE_3	356
X#define	DSUB	357
X#define	DUP	358
X#define	DUP_X1	359
X#define	DUP_X2	360
X#define	DUP2	361
X#define	DUP2_X1	362
X#define	DUP2_X2	363
X#define	F2D	364
X#define	F2I	365
X#define	F2L	366
X#define	FADD	367
X#define	FALOAD	368
X#define	FASTORE	369
X#define	FCMPG	370
X#define	FCMPL	371
X#define	FCONST_0	372
X#define	FCONST_1	373
X#define	FCONST_2	374
X#define	FDIV	375
X#define	FLOAD_0	376
X#define	FLOAD_1	377
X#define	FLOAD_2	378
X#define	FLOAD_3	379
X#define	FMUL	380
X#define	FNEG	381
X#define	FREM	382
X#define	FRETURN	383
X#define	FSTORE_0	384
X#define	FSTORE_1	385
X#define	FSTORE_2	386
X#define	FSTORE_3	387
X#define	FSUB	388
X#define	GETFIELD	389
X#define	GETSTATIC	390
X#define	GOTO	391
X#define	GOTO_W	392
X#define	I2B	393
X#define	I2C	394
X#define	I2D	395
X#define	I2F	396
X#define	I2L	397
X#define	I2S	398
X#define	IADD	399
X#define	IALOAD	400
X#define	IAND	401
X#define	IASTORE	402
X#define	ICONST_0	403
X#define	ICONST_1	404
X#define	ICONST_2	405
X#define	ICONST_3	406
X#define	ICONST_4	407
X#define	ICONST_5	408
X#define	ICONST_M1	409
X#define	IDIV	410
X#define	IF_ACMPEQ	411
X#define	IF_ACMPNE	412
X#define	IF_ICMPEQ	413
X#define	IF_ICMPNE	414
X#define	IF_ICMPLT	415
X#define	IF_ICMPGE	416
X#define	IF_ICMPGT	417
X#define	IF_ICMPLE	418
X#define	IFEQ	419
X#define	IFNE	420
X#define	IFLT	421
X#define	IFGE	422
X#define	IFGT	423
X#define	IFLE	424
X#define	IFNONNULL	425
X#define	IFNULL	426
X#define	ILOAD_0	427
X#define	ILOAD_1	428
X#define	ILOAD_2	429
X#define	ILOAD_3	430
X#define	IMUL	431
X#define	INEG	432
X#define	IOR	433
X#define	IREM	434
X#define	IRETURN	435
X#define	ISHL	436
X#define	ISHR	437
X#define	ISTORE_0	438
X#define	ISTORE_1	439
X#define	ISTORE_2	440
X#define	ISTORE_3	441
X#define	ISUB	442
X#define	IUSHR	443
X#define	IXOR	444
X#define	JSR	445
X#define	JSR_W	446
X#define	L2D	447
X#define	L2F	448
X#define	L2I	449
X#define	LADD	450
X#define	LALOAD	451
X#define	LAND	452
X#define	LASTORE	453
X#define	LCMP	454
X#define	LCONST_0	455
X#define	LCONST_1	456
X#define	LDIV	457
X#define	LLOAD_0	458
X#define	LLOAD_1	459
X#define	LLOAD_2	460
X#define	LLOAD_3	461
X#define	LMUL	462
X#define	LNEG	463
X#define	LOR	464
X#define	LREM	465
X#define	LRETURN	466
X#define	LSHL	467
X#define	LSHR	468
X#define	LSTORE_0	469
X#define	LSTORE_1	470
X#define	LSTORE_2	471
X#define	LSTORE_3	472
X#define	LSUB	473
X#define	LUSHR	474
X#define	LXOR	475
X#define	MONITORENTER	476
X#define	MONITOREXIT	477
X#define	NOP	478
X#define	POP	479
X#define	POP2	480
X#define	RETURN	481
X#define	SALOAD	482
X#define	SASTORE	483
X#define	SWAP	484
X#define	IINC	485
X#define	INSTANCEOF	486
X#define	INVOKEINTERFACE	487
X#define	INVOKENONVIRTUAL	488
X#define	INVOKESTATIC	489
X#define	INVOKEVIRTUAL	490
X#define	LDC	491
X#define	LDC_W	492
X#define	LDC2_W	493
X#define	MULTIANEWARRAY	494
X#define	NEW	495
X#define	NEWARRAY	496
X#define	PUTFIELD	497
X#define	PUTSTATIC	498
X#define	SIPUSH	499
X#define	ILOAD	500
X#define	FLOAD	501
X#define	ALOAD	502
X#define	LLOAD	503
X#define	DLOAD	504
X#define	ISTORE	505
X#define	FSTORE	506
X#define	ASTORE	507
X#define	LSTORE	508
X#define	DSTORE	509
X#define	RET	510
X#define	WIDE	511
X#define	LOAD	512
X#define	STORE	513
X#define	LOOKUPSWITCH	514
X#define	TABLESWITCH	515
X
X
Xextern YYSTYPE yylval;
END_OF_FILE
if test 6919 -ne `wc -c <'gram.h'`; then
    echo shar: \"'gram.h'\" unpacked with wrong size!
fi
# end of 'gram.h'
fi
if test -f 'javaa.tab.h' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'javaa.tab.h'\"
else
echo shar: Extracting \"'javaa.tab.h'\" \(6919 characters\)
sed "s/^X//" >'javaa.tab.h' <<'END_OF_FILE'
Xtypedef union {
X   Terminal        rk;
X   Terminal        NT;
X   Terminal        RK;
X   Terminal        Rk;
X
X   float           floatval;
X   double          doubleval;
X   char            charval;
X   int             intval;
X   long            longval;
X   char           *string;
X
X   BaseType        basetype;
X   StorageClass    storageclass;
X   TypeQualifier   typequalifier;
X   ArgType	   argtype;
X  
X   lookupentry *   lookuplistptr;
X   tableentry *    tablelistptr;
X
X   struct {
X	char* classname;
X	char* fieldmethodname;
X   }		classfieldmethodstruct;
X
X   struct _declinfo {
X      int   function;
X      int   ptrcount;
X      int   dimsize[7];
X      int   numdims;
X      char *name;
X   }               declinfo;
X   
X   struct {
X      TreeNode *formals;
X      struct _declinfo D;
X   }               funcstuff;
X
X   struct {
X      Type          T;
X      StorageClass  C;
X      TypeQualifier Q;
X   } declspecs;
X
X   struct {
X      Type          T;
X      StorageClass  C;
X      TypeQualifier Q;
X      TreeNode     *node;
X   } declspecsnode;
X
X   struct {
X      Type          T;
X      StorageClass  C;
X      TypeQualifier Q;
X      Symbol       *headsym;
X      Symbol       *prevsym;
X   } structdeclspecs;
X
X   struct {
X      Symbol   *headsym;
X      Symbol   *prevsym;
X   } headprevsym;
X
X   struct {
X      int       spec;
X      int       val;
X      char     *id;
X   } idspecval;
X
X   struct {
X      Symbol   *sym;
X      int       val;
X   } symval;
X
X   Type            typetype;
X
X   Symbol         *sym;
X
X   struct {
X      TreeNode *decl;
X      TreeNode *func;
X   } declfunc;
X
X   struct {
X      TreeNode *decl;
X      TreeNode *func;
X      TreeNode *exprs;
X      TreeNode *last;
X   } declfuncexprs;
X
X   struct {
X      TreeNode *exprs;
X      TreeNode *last;
X   } exprslast;
X
X   TreeNode       *node;
X} YYSTYPE;
X#define	LABEL	258
X#define	IDENTIFIER	259
X#define	INTCONSTANT	260
X#define	LONGCONSTANT	261
X#define	FLOATCONSTANT	262
X#define	DOUBLECONSTANT	263
X#define	CHARCONSTANT	264
X#define	STRING_LITERAL	265
X#define	CLASS	266
X#define	EXTENDS	267
X#define	ACCESS	268
X#define	IMPLEMENTS	269
X#define	FIELD	270
X#define	METHOD	271
X#define	MAX_STACK	272
X#define	MAX_LOCALS	273
X#define	CODE	274
X#define	PUBLIC	275
X#define	PRIVATE	276
X#define	PROTECTED	277
X#define	ABSTRACT	278
X#define	FINAL	279
X#define	INTERFACE	280
X#define	STATIC	281
X#define	NATIVE	282
X#define	SYNCHRONIZED	283
X#define	TRANSIENT	284
X#define	VOLATILE	285
X#define	BYTE	286
X#define	CHAR	287
X#define	DOUBLE	288
X#define	FLOAT	289
X#define	INT	290
X#define	LONG	291
X#define	SHORT	292
X#define	BOOLEAN	293
X#define	VOID	294
X#define	DEFAULT	295
X#define	TO	296
X#define	EXCEPTIONS	297
X#define	SOURCEFILE	298
X#define	THROWS	299
X#define	LINENUMBERTABLE	300
X#define	LOCALVARIABLETABLE	301
X#define	ACC_PUBLIC	302
X#define	ACC_PRIVATE	303
X#define	ACC_PROTECTED	304
X#define	ACC_STATIC	305
X#define	ACC_FINAL	306
X#define	ACC_SYNCHRONIZED	307
X#define	ACC_VOLATILE	308
X#define	ACC_TRANSIENT	309
X#define	ACC_NATIVE	310
X#define	ACC_INTERFACE	311
X#define	ACC_ABSTRACT	312
X#define	AALOAD	313
X#define	AASTORE	314
X#define	ACONST_NULL	315
X#define	ALOAD_0	316
X#define	ALOAD_1	317
X#define	ALOAD_2	318
X#define	ALOAD_3	319
X#define	ANEWARRAY	320
X#define	ARETURN	321
X#define	ARRAYLENGTH	322
X#define	ASTORE_0	323
X#define	ASTORE_1	324
X#define	ASTORE_2	325
X#define	ASTORE_3	326
X#define	ATHROW	327
X#define	BALOAD	328
X#define	BASTORE	329
X#define	BIPUSH	330
X#define	CALOAD	331
X#define	CASTORE	332
X#define	CHECKCAST	333
X#define	D2F	334
X#define	D2I	335
X#define	D2L	336
X#define	DADD	337
X#define	DALOAD	338
X#define	DASTORE	339
X#define	DCMPG	340
X#define	DCMPL	341
X#define	DCONST_0	342
X#define	DCONST_1	343
X#define	DDIV	344
X#define	DLOAD_0	345
X#define	DLOAD_1	346
X#define	DLOAD_2	347
X#define	DLOAD_3	348
X#define	DMUL	349
X#define	DNEG	350
X#define	DREM	351
X#define	DRETURN	352
X#define	DSTORE_0	353
X#define	DSTORE_1	354
X#define	DSTORE_2	355
X#define	DSTORE_3	356
X#define	DSUB	357
X#define	DUP	358
X#define	DUP_X1	359
X#define	DUP_X2	360
X#define	DUP2	361
X#define	DUP2_X1	362
X#define	DUP2_X2	363
X#define	F2D	364
X#define	F2I	365
X#define	F2L	366
X#define	FADD	367
X#define	FALOAD	368
X#define	FASTORE	369
X#define	FCMPG	370
X#define	FCMPL	371
X#define	FCONST_0	372
X#define	FCONST_1	373
X#define	FCONST_2	374
X#define	FDIV	375
X#define	FLOAD_0	376
X#define	FLOAD_1	377
X#define	FLOAD_2	378
X#define	FLOAD_3	379
X#define	FMUL	380
X#define	FNEG	381
X#define	FREM	382
X#define	FRETURN	383
X#define	FSTORE_0	384
X#define	FSTORE_1	385
X#define	FSTORE_2	386
X#define	FSTORE_3	387
X#define	FSUB	388
X#define	GETFIELD	389
X#define	GETSTATIC	390
X#define	GOTO	391
X#define	GOTO_W	392
X#define	I2B	393
X#define	I2C	394
X#define	I2D	395
X#define	I2F	396
X#define	I2L	397
X#define	I2S	398
X#define	IADD	399
X#define	IALOAD	400
X#define	IAND	401
X#define	IASTORE	402
X#define	ICONST_0	403
X#define	ICONST_1	404
X#define	ICONST_2	405
X#define	ICONST_3	406
X#define	ICONST_4	407
X#define	ICONST_5	408
X#define	ICONST_M1	409
X#define	IDIV	410
X#define	IF_ACMPEQ	411
X#define	IF_ACMPNE	412
X#define	IF_ICMPEQ	413
X#define	IF_ICMPNE	414
X#define	IF_ICMPLT	415
X#define	IF_ICMPGE	416
X#define	IF_ICMPGT	417
X#define	IF_ICMPLE	418
X#define	IFEQ	419
X#define	IFNE	420
X#define	IFLT	421
X#define	IFGE	422
X#define	IFGT	423
X#define	IFLE	424
X#define	IFNONNULL	425
X#define	IFNULL	426
X#define	ILOAD_0	427
X#define	ILOAD_1	428
X#define	ILOAD_2	429
X#define	ILOAD_3	430
X#define	IMUL	431
X#define	INEG	432
X#define	IOR	433
X#define	IREM	434
X#define	IRETURN	435
X#define	ISHL	436
X#define	ISHR	437
X#define	ISTORE_0	438
X#define	ISTORE_1	439
X#define	ISTORE_2	440
X#define	ISTORE_3	441
X#define	ISUB	442
X#define	IUSHR	443
X#define	IXOR	444
X#define	JSR	445
X#define	JSR_W	446
X#define	L2D	447
X#define	L2F	448
X#define	L2I	449
X#define	LADD	450
X#define	LALOAD	451
X#define	LAND	452
X#define	LASTORE	453
X#define	LCMP	454
X#define	LCONST_0	455
X#define	LCONST_1	456
X#define	LDIV	457
X#define	LLOAD_0	458
X#define	LLOAD_1	459
X#define	LLOAD_2	460
X#define	LLOAD_3	461
X#define	LMUL	462
X#define	LNEG	463
X#define	LOR	464
X#define	LREM	465
X#define	LRETURN	466
X#define	LSHL	467
X#define	LSHR	468
X#define	LSTORE_0	469
X#define	LSTORE_1	470
X#define	LSTORE_2	471
X#define	LSTORE_3	472
X#define	LSUB	473
X#define	LUSHR	474
X#define	LXOR	475
X#define	MONITORENTER	476
X#define	MONITOREXIT	477
X#define	NOP	478
X#define	POP	479
X#define	POP2	480
X#define	RETURN	481
X#define	SALOAD	482
X#define	SASTORE	483
X#define	SWAP	484
X#define	IINC	485
X#define	INSTANCEOF	486
X#define	INVOKEINTERFACE	487
X#define	INVOKENONVIRTUAL	488
X#define	INVOKESTATIC	489
X#define	INVOKEVIRTUAL	490
X#define	LDC	491
X#define	LDC_W	492
X#define	LDC2_W	493
X#define	MULTIANEWARRAY	494
X#define	NEW	495
X#define	NEWARRAY	496
X#define	PUTFIELD	497
X#define	PUTSTATIC	498
X#define	SIPUSH	499
X#define	ILOAD	500
X#define	FLOAD	501
X#define	ALOAD	502
X#define	LLOAD	503
X#define	DLOAD	504
X#define	ISTORE	505
X#define	FSTORE	506
X#define	ASTORE	507
X#define	LSTORE	508
X#define	DSTORE	509
X#define	RET	510
X#define	WIDE	511
X#define	LOAD	512
X#define	STORE	513
X#define	LOOKUPSWITCH	514
X#define	TABLESWITCH	515
X
X
Xextern YYSTYPE yylval;
END_OF_FILE
if test 6919 -ne `wc -c <'javaa.tab.h'`; then
    echo shar: \"'javaa.tab.h'\" unpacked with wrong size!
fi
# end of 'javaa.tab.h'
fi
if test -f 'listing.h' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'listing.h'\"
else
echo shar: Extracting \"'listing.h'\" \(263 characters\)
sed "s/^X//" >'listing.h' <<'END_OF_FILE'
Xvoid StartListing(void);
Xvoid EndListing(void);
Xvoid NewLine(int);
Xvoid echo(char *);
Xvoid StartMessage(void);
Xvoid EndMessage(void);
Xvoid message(char *);
Xvoid oops(char *); 
Xvoid warning(char *);
Xvoid ABORT(int, int);
Xint LineNumber(void);
Xint ColNumber(void);
END_OF_FILE
if test 263 -ne `wc -c <'listing.h'`; then
    echo shar: \"'listing.h'\" unpacked with wrong size!
fi
# end of 'listing.h'
fi
if test -f 'protos.h' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'protos.h'\"
else
echo shar: Extracting \"'protos.h'\" \(182 characters\)
sed "s/^X//" >'protos.h' <<'END_OF_FILE'
Xextern void yyerror(char *);
Xextern int yylex(void);
Xextern int yyparse(void);
X#ifdef __cplusplus
Xextern "C" {
X#endif
X   extern int yywrap(void);
X#ifdef __cplusplus
X        }
X#endif
END_OF_FILE
if test 182 -ne `wc -c <'protos.h'`; then
    echo shar: \"'protos.h'\" unpacked with wrong size!
fi
# end of 'protos.h'
fi
if test -f 'types.h' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'types.h'\"
else
echo shar: Extracting \"'types.h'\" \(5953 characters\)
sed "s/^X//" >'types.h' <<'END_OF_FILE'
X/* copyright 1996, Jason Hunt and Washington University, St. Louis */
Xtypedef
X   struct {
X      int opcode;
X      char byteval;
X   }
XOpCodeTranslator;
X
Xtypedef
X   struct lookupentry{
X      long match;
X      char* alabel;
X      lookupentry* next;
X   }
X;
X
Xtypedef
X   struct exceptionentry{
X      short start_pc;
X      short end_pc;
X      short handler_pc;
X      short catch_type;
X      exceptionentry* next;
X   }
X;
X
Xtypedef
X   struct throwsentry{
X      short exceptionclass;
X      throwsentry* next;
X   }
X;
X
X/*yes, I know this is redundant*/
Xtypedef
X   struct interfaceentry{
X      short index;
X      interfaceentry* next; 
X   }
X;
X
Xtypedef
X   struct linenumberentry{
X      short start_pc;
X      short line_number;
X      linenumberentry* next;
X   }
X;
X
Xtypedef
X   struct tableentry{
X      char* alabel;
X      tableentry* next;
X   }
X;
X
Xtypedef
X   struct methodname{
X      char name[L_tmpnam];
X      methodname* next;
X   }
X;
X
Xtypedef
X   struct unresolvedindex{
X      long location;
X      long opcodelocation;
X      unresolvedindex* next;
X   }
X;
X
X/* This structure is intended to hold every constant pool entry.  
X*/
Xtypedef
X   struct {
X      short int myindex;
X      char consttype;
X      short int index1;
X      short int index2;
X      char* stringval;
X      long int intval;  
X      float floatval;
X      long long int longval;
X      /*long int longval2;*/
X      double doubleval;
X   }
XConstPoolEntry; 
X
Xtypedef
X   struct {
X      char* name;
X      long index;
X      unresolvedindex* unresolvedindexhead;
X   }
XLabelInfo;
X
Xtypedef
X   struct {
X      short access_flags;
X      short name_index;
X      short signature_index;
X      short constantvalue_index;  
X
X   }
XFieldInfo;
X
Xtypedef
X   struct {
X      short start_pc;
X      short length;
X      short name_index;
X      short signature_index;
X      short slot;
X      char* name;
X      char* signature;
X   }
XLocalVarInfo;
X
Xtypedef
X   struct userlocalvarentry{
X      short start_pc;
X      short length;
X      short name_index;
X      short signature_index;
X      short slot;
X      userlocalvarentry* next;
X   }
X;
X
Xtypedef
X   struct {
X      short access_flags;
X      short name_index;
X      short signature_index;
X      short max_stack;
X      short max_locals;
X      char Code[65535];
X      unsigned short CodeCounter;
X      LabelInfo Label[100];
X      short LabelCounter;
X      LocalVarInfo LocalVar[256];
X      short LocalVarCounter;
X      short currentslot;
X      short ExceptionsCounter;
X      exceptionentry* exceptionhead;
X      short ThrowsCounter;
X      throwsentry* throwshead;
X      short LineNumberCounter;
X      linenumberentry* linenumberhead;
X      short UserLocalVarCounter;
X      userlocalvarentry* userlocalvarhead;
X   }
XMethodInfo; 
X
Xtypedef
X   struct {
X      short access_flags;
X      short classindex;
X      char* classname;
X      short superclassindex;
X      char* superclassname;
X      short interfacecount;
X      interfaceentry* interfacehead;
X      short sourcefileindex;
X   }
Xthisclassstruct;
X
Xtypedef
X  enum { CharType=1, 
X         IntType=2, 
X         FloatType=3, 
X         VoidType=4, 
X         StructType=5, 
X         UnionType=6,
X         EnumType=7, 
X         AnyType=8, 
X         ConstType=9 }
XBaseType;
X
Xtypedef
X   struct {
X      int type;
X      int intval;
X      long long longval;
X      char* stringval;
X      float floatval;
X      double doubleval;
X   }
XArgType;
X 
X
Xtypedef
X   struct {
X      BaseType B;
X      union {
X         struct _Symbol *contents;
X         int             intval;
X      } info;
X      int function;
X      int numdims;
X      int dimsize[7];
X      int ptrcount;
X   }
XType;
X
Xtypedef
X  enum { ExternClass, StaticClass, AutoClass, RegisterClass, TypedefClass }
XStorageClass;
X
Xtypedef
X  enum { ConstQualifier, VolatileQualifier, NonQualified }
XTypeQualifier;
X
Xtypedef struct _MimeType {
X      Type          T;
X      StorageClass  C;
X      TypeQualifier Q;
X} MimeType;
X
X
Xtypedef struct _Symbol {
X   struct _Symbol *nextused;   /* links all used symbols        */
X   struct _Symbol *next;       /* in free list or at same level */
X   struct _Symbol *adj;        /* next adjacent struct member   */
X   int             InUse;      /* symbol already declared?      */
X   int             level;      /* static nest level of symbol   */
X   MimeType        M;
X   char           *name;
X   int             SymbolID;   /* number used internally        */
X   struct _Symbol *ForwardHash;/* forward isohash link  */
X   struct _Symbol *BackHash;   /* backward isohash link  */
X   struct _Symbol *IsoVar;     /* isovariable stacks  */
X   struct _Symbol *IsoLevel;   /* isolevel links  */
X   int             ExprID;     /* expression ID   */
X   struct _Symbol *nextreg;    /* for symbol table in WIL */
X   int             registered;
X} Symbol;
X
Xtypedef struct _Terminal {
X   int terminal;
X   char string[100];
X} Terminal;
X
Xtypedef
X   enum { SymbolRef, IntegerOperand, FloatOperand, StringOperand, Operator,
X          CharOperand, Conversion
X} NodeType;
X
Xtypedef
X   enum {Error,
X         Iota,
X         Use,
X         Ptr2Int,
X         Ptr2Chr,
X         Int2Ptr,
X         Int2Chr,
X         Chr2Int,
X         Chr2Ptr,
X         X2Bot
X} ConvType;
X
Xtypedef
X   enum { Lvalue, Rvalue, NonLRvalue}
XLRvalue;
X
Xtypedef struct _NodeInfo {
X   NodeType type;
X   MimeType exprtype;
X   LRvalue  LR;
X   struct _TreeNode *NextAliasRelation;
X   struct {
X      Symbol *may;
X      Symbol *must;
X   } alias;
X   union {
X      /* other node types can go here */
X      Symbol  *symbol;
X      char    *str;
X      int      integer;
X      float    floating;
X      char     chr;
X      Terminal oper;
X      ConvType conv;
X   } value;
X} NodeInfo;
X
Xtypedef struct _TreeNode {
X   struct {
X     int linenumber;
X     int colnumber;
X   } sourceinfo;
X   NodeInfo info;
X   struct _TreeNode *child;
X   struct _TreeNode *sibling;
X   struct _TreeNode *head;
X   struct _TreeNode *parent;
X   struct _TreeNode *leftsib;
X   struct {
X      struct _TreeNode *slink;
X      int ExprID;
X      int level;
X   } WILinfo;
X} TreeNode;
X
END_OF_FILE
if test 5953 -ne `wc -c <'types.h'`; then
    echo shar: \"'types.h'\" unpacked with wrong size!
fi
# end of 'types.h'
fi
if test -f 'utils.h' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'utils.h'\"
else
echo shar: Extracting \"'utils.h'\" \(217 characters\)
sed "s/^X//" >'utils.h' <<'END_OF_FILE'
Xvoid         RangeCheck(int, int, int, char *);
Xchar        *ArbName(void);
Xchar        *ConsStrings(char *, char *);
Xvoid	     ReportID(char *);
Xvoid         bzero(unsigned char*, int);
Xchar        *TermString(int);
END_OF_FILE
if test 217 -ne `wc -c <'utils.h'`; then
    echo shar: \"'utils.h'\" unpacked with wrong size!
fi
# end of 'utils.h'
fi
if test -f 'beginlex' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'beginlex'\"
else
echo shar: Extracting \"'beginlex'\" \(984 characters\)
sed "s/^X//" >'beginlex' <<'END_OF_FILE'
X%k5000
Xucase        [A-Z]
Xlcase        [a-z]
Xletter       ({ucase}|{lcase})
Xzero         0
Xnonzero      [1-9]
Xsign         [+-]
Xdigit        ({zero}|{nonzero})
Xblanks       [ \t\f]
Xnewline      \n
XD                       [0-9]
XO                       [0-7]
XL                       [a-zA-Z_]
XH                       [a-fA-F0-9]
XE                       [Ee][+-]?{D}+
XFS                      (f|F|l|L)
XIS                      (u|U|l|L)*
X
X
X%{
X#include <stdlib.h>
X#include <string.h>
X#include <signal.h>
X#include <stdio.h>
X#include "types.h"
X#include "gram.h"
X#include "listing.h"
X#include "utils.h"
X#include "build.h"
X#include "protos.h"
X#define MYRET(a)        \
X	{             \
X	echo(yytext); \
X	return((a));  \
X	}
X#define RETKEY(a)                         \
X	{                                 \
X	echo(yytext);                     \
X	yylval.rk.terminal = a;           \
X	strcpy(yylval.rk.string,yytext);  \
X	return((a));                      \
X	}
X   int linenumber;
X   int col;
X%}
X
X%%
END_OF_FILE
if test 984 -ne `wc -c <'beginlex'`; then
    echo shar: \"'beginlex'\" unpacked with wrong size!
fi
# end of 'beginlex'
fi
if test -f 'middlelex' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'middlelex'\"
else
echo shar: Extracting \"'middlelex'\" \(11843 characters\)
sed "s/^X//" >'middlelex' <<'END_OF_FILE'
X[Cc][Ll][Aa][Ss][Ss]    {RETKEY(CLASS)}
X[Ee][Xx][Tt][Ee][Nn][Dd][Ss]    {RETKEY(EXTENDS)}
X[Aa][Cc][Cc][Ee][Ss][Ss]    {RETKEY(ACCESS)}
X[Ii][Mm][Pp][Ll][Ee][Mm][Ee][Nn][Tt][Ss]    {RETKEY(IMPLEMENTS)}
X[Ff][Ii][Ee][Ll][Dd]    {RETKEY(FIELD)}
X[Mm][Ee][Tt][Hh][Oo][Dd]    {RETKEY(METHOD)}
X[Mm][Aa][Xx]"_"[Ss][Tt][Aa][Cc][Kk]    {RETKEY(MAX_STACK)}
X[Mm][Aa][Xx]"_"[Ll][Oo][Cc][Aa][Ll][Ss]    {RETKEY(MAX_LOCALS)}
X[Cc][Oo][Dd][Ee]    {RETKEY(CODE)}
X[Pp][Uu][Bb][Ll][Ii][Cc]    {RETKEY(PUBLIC)}
X[Pp][Rr][Ii][Vv][Aa][Tt][Ee]    {RETKEY(PRIVATE)}
X[Pp][Rr][Oo][Tt][Ee][Cc][Tt][Ee][Dd]    {RETKEY(PROTECTED)}
X[Aa][Bb][Ss][Tt][Rr][Aa][Cc][Tt]    {RETKEY(ABSTRACT)}
X[Ff][Ii][Nn][Aa][Ll]    {RETKEY(FINAL)}
X[Ii][Nn][Tt][Ee][Rr][Ff][Aa][Cc][Ee]    {RETKEY(INTERFACE)}
X[Ss][Tt][Aa][Tt][Ii][Cc]    {RETKEY(STATIC)}
X[Nn][Aa][Tt][Ii][Vv][Ee]    {RETKEY(NATIVE)}
X[Ss][Yy][Nn][Cc][Hh][Rr][Oo][Nn][Ii][Zz][Ee][Dd]    {RETKEY(SYNCHRONIZED)}
X[Tt][Rr][Aa][Nn][Ss][Ii][Ee][Nn][Tt]    {RETKEY(TRANSIENT)}
X[Vv][Oo][Ll][Aa][Tt][Ii][Ll][Ee]    {RETKEY(VOLATILE)}
X[Bb][Yy][Tt][Ee]    {RETKEY(BYTE)}
X[Cc][Hh][Aa][Rr]    {RETKEY(CHAR)}
X[Dd][Oo][Uu][Bb][Ll][Ee]    {RETKEY(DOUBLE)}
X[Ff][Ll][Oo][Aa][Tt]    {RETKEY(FLOAT)}
X[Ii][Nn][Tt]    {RETKEY(INT)}
X[Ll][Oo][Nn][Gg]    {RETKEY(LONG)}
X[Ss][Hh][Oo][Rr][Tt]    {RETKEY(SHORT)}
X[Bb][Oo][Oo][Ll][Ee][Aa][Nn]    {RETKEY(BOOLEAN)}
X[Vv][Oo][Ii][Dd]    {RETKEY(VOID)}
X[Dd][Ee][Ff][Aa][Uu][Ll][Tt]    {RETKEY(DEFAULT)}
X[Tt][Oo]    {RETKEY(TO)}
X[Ee][Xx][Cc][Ee][Pp][Tt][Ii][Oo][Nn][Ss]    {RETKEY(EXCEPTIONS)}
X[Ss][Oo][Uu][Rr][Cc][Ee][Ff][Ii][Ll][Ee]    {RETKEY(SOURCEFILE)}
X[Tt][Hh][Rr][Oo][Ww][Ss]    {RETKEY(THROWS)}
X[Ll][Ii][Nn][Ee][Nn][Uu][Mm][Bb][Ee][Rr][Tt][Aa][Bb][Ll][Ee]    {RETKEY(LINENUMBERTABLE)}
X[Ll][Oo][Cc][Aa][Ll][Vv][Aa][Rr][Ii][Aa][Bb][Ll][Ee][Tt][Aa][Bb][Ll][Ee]    {RETKEY(LOCALVARIABLETABLE)}
X[Aa][Cc][Cc]"_"[Pp][Uu][Bb][Ll][Ii][Cc]    {RETKEY(ACC_PUBLIC)}
X[Aa][Cc][Cc]"_"[Pp][Rr][Ii][Vv][Aa][Tt][Ee]    {RETKEY(ACC_PRIVATE)}
X[Aa][Cc][Cc]"_"[Pp][Rr][Oo][Tt][Ee][Cc][Tt][Ee][Dd]    {RETKEY(ACC_PROTECTED)}
X[Aa][Cc][Cc]"_"[Ss][Tt][Aa][Tt][Ii][Cc]    {RETKEY(ACC_STATIC)}
X[Aa][Cc][Cc]"_"[Ff][Ii][Nn][Aa][Ll]    {RETKEY(ACC_FINAL)}
X[Aa][Cc][Cc]"_"[Ss][Yy][Nn][Cc][Hh][Rr][Oo][Nn][Ii][Zz][Ee][Dd]    {RETKEY(ACC_SYNCHRONIZED)}
X[Aa][Cc][Cc]"_"[Vv][Oo][Ll][Aa][Tt][Ii][Ll][Ee]    {RETKEY(ACC_VOLATILE)}
X[Aa][Cc][Cc]"_"[Tt][Rr][Aa][Nn][Ss][Ii][Ee][Nn][Tt]    {RETKEY(ACC_TRANSIENT)}
X[Aa][Cc][Cc]"_"[Nn][Aa][Tt][Ii][Vv][Ee]    {RETKEY(ACC_NATIVE)}
X[Aa][Cc][Cc]"_"[Ii][Nn][Tt][Ee][Rr][Ff][Aa][Cc][Ee]    {RETKEY(ACC_INTERFACE)}
X[Aa][Cc][Cc]"_"[Aa][Bb][Ss][Tt][Rr][Aa][Cc][Tt]    {RETKEY(ACC_ABSTRACT)}
X[Aa][Aa][Ll][Oo][Aa][Dd]    {RETKEY(AALOAD)}
X[Aa][Aa][Ss][Tt][Oo][Rr][Ee]    {RETKEY(AASTORE)}
X[Aa][Cc][Oo][Nn][Ss][Tt]"_"[Nn][Uu][Ll][Ll]    {RETKEY(ACONST_NULL)}
X[Aa][Ll][Oo][Aa][Dd]"_""0"    {RETKEY(ALOAD_0)}
X[Aa][Ll][Oo][Aa][Dd]"_""1"    {RETKEY(ALOAD_1)}
X[Aa][Ll][Oo][Aa][Dd]"_""2"    {RETKEY(ALOAD_2)}
X[Aa][Ll][Oo][Aa][Dd]"_""3"    {RETKEY(ALOAD_3)}
X[Aa][Nn][Ee][Ww][Aa][Rr][Rr][Aa][Yy]    {RETKEY(ANEWARRAY)}
X[Aa][Rr][Ee][Tt][Uu][Rr][Nn]    {RETKEY(ARETURN)}
X[Aa][Rr][Rr][Aa][Yy][Ll][Ee][Nn][Gg][Tt][Hh]    {RETKEY(ARRAYLENGTH)}
X[Aa][Ss][Tt][Oo][Rr][Ee]"_""0"    {RETKEY(ASTORE_0)}
X[Aa][Ss][Tt][Oo][Rr][Ee]"_""1"    {RETKEY(ASTORE_1)}
X[Aa][Ss][Tt][Oo][Rr][Ee]"_""2"    {RETKEY(ASTORE_2)}
X[Aa][Ss][Tt][Oo][Rr][Ee]"_""3"    {RETKEY(ASTORE_3)}
X[Aa][Tt][Hh][Rr][Oo][Ww]    {RETKEY(ATHROW)}
X[Bb][Aa][Ll][Oo][Aa][Dd]    {RETKEY(BALOAD)}
X[Bb][Aa][Ss][Tt][Oo][Rr][Ee]    {RETKEY(BASTORE)}
X[Bb][Ii][Pp][Uu][Ss][Hh]    {RETKEY(BIPUSH)}
X[Cc][Aa][Ll][Oo][Aa][Dd]    {RETKEY(CALOAD)}
X[Cc][Aa][Ss][Tt][Oo][Rr][Ee]    {RETKEY(CASTORE)}
X[Cc][Hh][Ee][Cc][Kk][Cc][Aa][Ss][Tt]    {RETKEY(CHECKCAST)}
X[Dd]"2"[Ff]    {RETKEY(D2F)}
X[Dd]"2"[Ii]    {RETKEY(D2I)}
X[Dd]"2"[Ll]    {RETKEY(D2L)}
X[Dd][Aa][Dd][Dd]    {RETKEY(DADD)}
X[Dd][Aa][Ll][Oo][Aa][Dd]    {RETKEY(DALOAD)}
X[Dd][Aa][Ss][Tt][Oo][Rr][Ee]    {RETKEY(DASTORE)}
X[Dd][Cc][Mm][Pp][Gg]    {RETKEY(DCMPG)}
X[Dd][Cc][Mm][Pp][Ll]    {RETKEY(DCMPL)}
X[Dd][Cc][Oo][Nn][Ss][Tt]"_""0"    {RETKEY(DCONST_0)}
X[Dd][Cc][Oo][Nn][Ss][Tt]"_""1"    {RETKEY(DCONST_1)}
X[Dd][Dd][Ii][Vv]    {RETKEY(DDIV)}
X[Dd][Ll][Oo][Aa][Dd]"_""0"    {RETKEY(DLOAD_0)}
X[Dd][Ll][Oo][Aa][Dd]"_""1"    {RETKEY(DLOAD_1)}
X[Dd][Ll][Oo][Aa][Dd]"_""2"    {RETKEY(DLOAD_2)}
X[Dd][Ll][Oo][Aa][Dd]"_""3"    {RETKEY(DLOAD_3)}
X[Dd][Mm][Uu][Ll]    {RETKEY(DMUL)}
X[Dd][Nn][Ee][Gg]    {RETKEY(DNEG)}
X[Dd][Rr][Ee][Mm]    {RETKEY(DREM)}
X[Dd][Rr][Ee][Tt][Uu][Rr][Nn]    {RETKEY(DRETURN)}
X[Dd][Ss][Tt][Oo][Rr][Ee]"_""0"    {RETKEY(DSTORE_0)}
X[Dd][Ss][Tt][Oo][Rr][Ee]"_""1"    {RETKEY(DSTORE_1)}
X[Dd][Ss][Tt][Oo][Rr][Ee]"_""2"    {RETKEY(DSTORE_2)}
X[Dd][Ss][Tt][Oo][Rr][Ee]"_""3"    {RETKEY(DSTORE_3)}
X[Dd][Ss][Uu][Bb]    {RETKEY(DSUB)}
X[Dd][Uu][Pp]    {RETKEY(DUP)}
X[Dd][Uu][Pp]"_"[Xx]"1"    {RETKEY(DUP_X1)}
X[Dd][Uu][Pp]"_"[Xx]"2"    {RETKEY(DUP_X2)}
X[Dd][Uu][Pp]"2"    {RETKEY(DUP2)}
X[Dd][Uu][Pp]"2""_"[Xx]"1"    {RETKEY(DUP2_X1)}
X[Dd][Uu][Pp]"2""_"[Xx]"2"    {RETKEY(DUP2_X2)}
X[Ff]"2"[Dd]    {RETKEY(F2D)}
X[Ff]"2"[Ii]    {RETKEY(F2I)}
X[Ff]"2"[Ll]    {RETKEY(F2L)}
X[Ff][Aa][Dd][Dd]    {RETKEY(FADD)}
X[Ff][Aa][Ll][Oo][Aa][Dd]    {RETKEY(FALOAD)}
X[Ff][Aa][Ss][Tt][Oo][Rr][Ee]    {RETKEY(FASTORE)}
X[Ff][Cc][Mm][Pp][Gg]    {RETKEY(FCMPG)}
X[Ff][Cc][Mm][Pp][Ll]    {RETKEY(FCMPL)}
X[Ff][Cc][Oo][Nn][Ss][Tt]"_""0"    {RETKEY(FCONST_0)}
X[Ff][Cc][Oo][Nn][Ss][Tt]"_""1"    {RETKEY(FCONST_1)}
X[Ff][Cc][Oo][Nn][Ss][Tt]"_""2"    {RETKEY(FCONST_2)}
X[Ff][Dd][Ii][Vv]    {RETKEY(FDIV)}
X[Ff][Ll][Oo][Aa][Dd]"_""0"    {RETKEY(FLOAD_0)}
X[Ff][Ll][Oo][Aa][Dd]"_""1"    {RETKEY(FLOAD_1)}
X[Ff][Ll][Oo][Aa][Dd]"_""2"    {RETKEY(FLOAD_2)}
X[Ff][Ll][Oo][Aa][Dd]"_""3"    {RETKEY(FLOAD_3)}
X[Ff][Mm][Uu][Ll]    {RETKEY(FMUL)}
X[Ff][Nn][Ee][Gg]    {RETKEY(FNEG)}
X[Ff][Rr][Ee][Mm]    {RETKEY(FREM)}
X[Ff][Rr][Ee][Tt][Uu][Rr][Nn]    {RETKEY(FRETURN)}
X[Ff][Ss][Tt][Oo][Rr][Ee]"_""0"    {RETKEY(FSTORE_0)}
X[Ff][Ss][Tt][Oo][Rr][Ee]"_""1"    {RETKEY(FSTORE_1)}
X[Ff][Ss][Tt][Oo][Rr][Ee]"_""2"    {RETKEY(FSTORE_2)}
X[Ff][Ss][Tt][Oo][Rr][Ee]"_""3"    {RETKEY(FSTORE_3)}
X[Ff][Ss][Uu][Bb]    {RETKEY(FSUB)}
X[Gg][Ee][Tt][Ff][Ii][Ee][Ll][Dd]    {RETKEY(GETFIELD)}
X[Gg][Ee][Tt][Ss][Tt][Aa][Tt][Ii][Cc]    {RETKEY(GETSTATIC)}
X[Gg][Oo][Tt][Oo]    {RETKEY(GOTO)}
X[Gg][Oo][Tt][Oo]"_"[Ww]    {RETKEY(GOTO_W)}
X[Ii]"2"[Bb]    {RETKEY(I2B)}
X[Ii]"2"[Cc]    {RETKEY(I2C)}
X[Ii]"2"[Dd]    {RETKEY(I2D)}
X[Ii]"2"[Ff]    {RETKEY(I2F)}
X[Ii]"2"[Ll]    {RETKEY(I2L)}
X[Ii]"2"[Ss]    {RETKEY(I2S)}
X[Ii][Aa][Dd][Dd]    {RETKEY(IADD)}
X[Ii][Aa][Ll][Oo][Aa][Dd]    {RETKEY(IALOAD)}
X[Ii][Aa][Nn][Dd]    {RETKEY(IAND)}
X[Ii][Aa][Ss][Tt][Oo][Rr][Ee]    {RETKEY(IASTORE)}
X[Ii][Cc][Oo][Nn][Ss][Tt]"_""0"    {RETKEY(ICONST_0)}
X[Ii][Cc][Oo][Nn][Ss][Tt]"_""1"    {RETKEY(ICONST_1)}
X[Ii][Cc][Oo][Nn][Ss][Tt]"_""2"    {RETKEY(ICONST_2)}
X[Ii][Cc][Oo][Nn][Ss][Tt]"_""3"    {RETKEY(ICONST_3)}
X[Ii][Cc][Oo][Nn][Ss][Tt]"_""4"    {RETKEY(ICONST_4)}
X[Ii][Cc][Oo][Nn][Ss][Tt]"_""5"    {RETKEY(ICONST_5)}
X[Ii][Cc][Oo][Nn][Ss][Tt]"_"[Mm]"1"    {RETKEY(ICONST_M1)}
X[Ii][Dd][Ii][Vv]    {RETKEY(IDIV)}
X[Ii][Ff]"_"[Aa][Cc][Mm][Pp][Ee][Qq]    {RETKEY(IF_ACMPEQ)}
X[Ii][Ff]"_"[Aa][Cc][Mm][Pp][Nn][Ee]    {RETKEY(IF_ACMPNE)}
X[Ii][Ff]"_"[Ii][Cc][Mm][Pp][Ee][Qq]    {RETKEY(IF_ICMPEQ)}
X[Ii][Ff]"_"[Ii][Cc][Mm][Pp][Nn][Ee]    {RETKEY(IF_ICMPNE)}
X[Ii][Ff]"_"[Ii][Cc][Mm][Pp][Ll][Tt]    {RETKEY(IF_ICMPLT)}
X[Ii][Ff]"_"[Ii][Cc][Mm][Pp][Gg][Ee]    {RETKEY(IF_ICMPGE)}
X[Ii][Ff]"_"[Ii][Cc][Mm][Pp][Gg][Tt]    {RETKEY(IF_ICMPGT)}
X[Ii][Ff]"_"[Ii][Cc][Mm][Pp][Ll][Ee]    {RETKEY(IF_ICMPLE)}
X[Ii][Ff][Ee][Qq]    {RETKEY(IFEQ)}
X[Ii][Ff][Nn][Ee]    {RETKEY(IFNE)}
X[Ii][Ff][Ll][Tt]    {RETKEY(IFLT)}
X[Ii][Ff][Gg][Ee]    {RETKEY(IFGE)}
X[Ii][Ff][Gg][Tt]    {RETKEY(IFGT)}
X[Ii][Ff][Ll][Ee]    {RETKEY(IFLE)}
X[Ii][Ff][Nn][Oo][Nn][Nn][Uu][Ll][Ll]    {RETKEY(IFNONNULL)}
X[Ii][Ff][Nn][Uu][Ll][Ll]    {RETKEY(IFNULL)}
X[Ii][Ll][Oo][Aa][Dd]"_""0"    {RETKEY(ILOAD_0)}
X[Ii][Ll][Oo][Aa][Dd]"_""1"    {RETKEY(ILOAD_1)}
X[Ii][Ll][Oo][Aa][Dd]"_""2"    {RETKEY(ILOAD_2)}
X[Ii][Ll][Oo][Aa][Dd]"_""3"    {RETKEY(ILOAD_3)}
X[Ii][Mm][Uu][Ll]    {RETKEY(IMUL)}
X[Ii][Nn][Ee][Gg]    {RETKEY(INEG)}
X[Ii][Oo][Rr]    {RETKEY(IOR)}
X[Ii][Rr][Ee][Mm]    {RETKEY(IREM)}
X[Ii][Rr][Ee][Tt][Uu][Rr][Nn]    {RETKEY(IRETURN)}
X[Ii][Ss][Hh][Ll]    {RETKEY(ISHL)}
X[Ii][Ss][Hh][Rr]    {RETKEY(ISHR)}
X[Ii][Ss][Tt][Oo][Rr][Ee]"_""0"    {RETKEY(ISTORE_0)}
X[Ii][Ss][Tt][Oo][Rr][Ee]"_""1"    {RETKEY(ISTORE_1)}
X[Ii][Ss][Tt][Oo][Rr][Ee]"_""2"    {RETKEY(ISTORE_2)}
X[Ii][Ss][Tt][Oo][Rr][Ee]"_""3"    {RETKEY(ISTORE_3)}
X[Ii][Ss][Uu][Bb]    {RETKEY(ISUB)}
X[Ii][Uu][Ss][Hh][Rr]    {RETKEY(IUSHR)}
X[Ii][Xx][Oo][Rr]    {RETKEY(IXOR)}
X[Jj][Ss][Rr]    {RETKEY(JSR)}
X[Jj][Ss][Rr]"_"[Ww]    {RETKEY(JSR_W)}
X[Ll]"2"[Dd]    {RETKEY(L2D)}
X[Ll]"2"[Ff]    {RETKEY(L2F)}
X[Ll]"2"[Ii]    {RETKEY(L2I)}
X[Ll][Aa][Dd][Dd]    {RETKEY(LADD)}
X[Ll][Aa][Ll][Oo][Aa][Dd]    {RETKEY(LALOAD)}
X[Ll][Aa][Nn][Dd]    {RETKEY(LAND)}
X[Ll][Aa][Ss][Tt][Oo][Rr][Ee]    {RETKEY(LASTORE)}
X[Ll][Cc][Mm][Pp]    {RETKEY(LCMP)}
X[Ll][Cc][Oo][Nn][Ss][Tt]"_""0"    {RETKEY(LCONST_0)}
X[Ll][Cc][Oo][Nn][Ss][Tt]"_""1"    {RETKEY(LCONST_1)}
X[Ll][Dd][Ii][Vv]    {RETKEY(LDIV)}
X[Ll][Ll][Oo][Aa][Dd]"_""0"    {RETKEY(LLOAD_0)}
X[Ll][Ll][Oo][Aa][Dd]"_""1"    {RETKEY(LLOAD_1)}
X[Ll][Ll][Oo][Aa][Dd]"_""2"    {RETKEY(LLOAD_2)}
X[Ll][Ll][Oo][Aa][Dd]"_""3"    {RETKEY(LLOAD_3)}
X[Ll][Mm][Uu][Ll]    {RETKEY(LMUL)}
X[Ll][Nn][Ee][Gg]    {RETKEY(LNEG)}
X[Ll][Oo][Rr]    {RETKEY(LOR)}
X[Ll][Rr][Ee][Mm]    {RETKEY(LREM)}
X[Ll][Rr][Ee][Tt][Uu][Rr][Nn]    {RETKEY(LRETURN)}
X[Ll][Ss][Hh][Ll]    {RETKEY(LSHL)}
X[Ll][Ss][Hh][Rr]    {RETKEY(LSHR)}
X[Ll][Ss][Tt][Oo][Rr][Ee]"_""0"    {RETKEY(LSTORE_0)}
X[Ll][Ss][Tt][Oo][Rr][Ee]"_""1"    {RETKEY(LSTORE_1)}
X[Ll][Ss][Tt][Oo][Rr][Ee]"_""2"    {RETKEY(LSTORE_2)}
X[Ll][Ss][Tt][Oo][Rr][Ee]"_""3"    {RETKEY(LSTORE_3)}
X[Ll][Ss][Uu][Bb]    {RETKEY(LSUB)}
X[Ll][Uu][Ss][Hh][Rr]    {RETKEY(LUSHR)}
X[Ll][Xx][Oo][Rr]    {RETKEY(LXOR)}
X[Mm][Oo][Nn][Ii][Tt][Oo][Rr][Ee][Nn][Tt][Ee][Rr]    {RETKEY(MONITORENTER)}
X[Mm][Oo][Nn][Ii][Tt][Oo][Rr][Ee][Xx][Ii][Tt]    {RETKEY(MONITOREXIT)}
X[Nn][Oo][Pp]    {RETKEY(NOP)}
X[Pp][Oo][Pp]    {RETKEY(POP)}
X[Pp][Oo][Pp]"2"    {RETKEY(POP2)}
X[Rr][Ee][Tt][Uu][Rr][Nn]    {RETKEY(RETURN)}
X[Ss][Aa][Ll][Oo][Aa][Dd]    {RETKEY(SALOAD)}
X[Ss][Aa][Ss][Tt][Oo][Rr][Ee]    {RETKEY(SASTORE)}
X[Ss][Ww][Aa][Pp]    {RETKEY(SWAP)}
X[Ii][Ii][Nn][Cc]    {RETKEY(IINC)}
X[Ii][Nn][Ss][Tt][Aa][Nn][Cc][Ee][Oo][Ff]    {RETKEY(INSTANCEOF)}
X[Ii][Nn][Vv][Oo][Kk][Ee][Ii][Nn][Tt][Ee][Rr][Ff][Aa][Cc][Ee]    {RETKEY(INVOKEINTERFACE)}
X[Ii][Nn][Vv][Oo][Kk][Ee][Nn][Oo][Nn][Vv][Ii][Rr][Tt][Uu][Aa][Ll]    {RETKEY(INVOKENONVIRTUAL)}
X[Ii][Nn][Vv][Oo][Kk][Ee][Ss][Tt][Aa][Tt][Ii][Cc]    {RETKEY(INVOKESTATIC)}
X[Ii][Nn][Vv][Oo][Kk][Ee][Vv][Ii][Rr][Tt][Uu][Aa][Ll]    {RETKEY(INVOKEVIRTUAL)}
X[Ll][Dd][Cc]    {RETKEY(LDC)}
X[Ll][Dd][Cc]"_"[Ww]    {RETKEY(LDC_W)}
X[Ll][Dd][Cc]"2""_"[Ww]    {RETKEY(LDC2_W)}
X[Mm][Uu][Ll][Tt][Ii][Aa][Nn][Ee][Ww][Aa][Rr][Rr][Aa][Yy]    {RETKEY(MULTIANEWARRAY)}
X[Nn][Ee][Ww]    {RETKEY(NEW)}
X[Nn][Ee][Ww][Aa][Rr][Rr][Aa][Yy]    {RETKEY(NEWARRAY)}
X[Pp][Uu][Tt][Ff][Ii][Ee][Ll][Dd]    {RETKEY(PUTFIELD)}
X[Pp][Uu][Tt][Ss][Tt][Aa][Tt][Ii][Cc]    {RETKEY(PUTSTATIC)}
X[Ss][Ii][Pp][Uu][Ss][Hh]    {RETKEY(SIPUSH)}
X[Ii][Ll][Oo][Aa][Dd]    {RETKEY(ILOAD)}
X[Ff][Ll][Oo][Aa][Dd]    {RETKEY(FLOAD)}
X[Aa][Ll][Oo][Aa][Dd]    {RETKEY(ALOAD)}
X[Ll][Ll][Oo][Aa][Dd]    {RETKEY(LLOAD)}
X[Dd][Ll][Oo][Aa][Dd]    {RETKEY(DLOAD)}
X[Ii][Ss][Tt][Oo][Rr][Ee]    {RETKEY(ISTORE)}
X[Ff][Ss][Tt][Oo][Rr][Ee]    {RETKEY(FSTORE)}
X[Aa][Ss][Tt][Oo][Rr][Ee]    {RETKEY(ASTORE)}
X[Ll][Ss][Tt][Oo][Rr][Ee]    {RETKEY(LSTORE)}
X[Dd][Ss][Tt][Oo][Rr][Ee]    {RETKEY(DSTORE)}
X[Rr][Ee][Tt]    {RETKEY(RET)}
X[Ww][Ii][Dd][Ee]    {RETKEY(WIDE)}
X[Ll][Oo][Aa][Dd]    {RETKEY(LOAD)}
X[Ss][Tt][Oo][Rr][Ee]    {RETKEY(STORE)}
X[Ll][Oo][Oo][Kk][Uu][Pp][Ss][Ww][Ii][Tt][Cc][Hh]    {RETKEY(LOOKUPSWITCH)}
X[Tt][Aa][Bb][Ll][Ee][Ss][Ww][Ii][Tt][Cc][Hh]    {RETKEY(TABLESWITCH)}
END_OF_FILE
if test 11843 -ne `wc -c <'middlelex'`; then
    echo shar: \"'middlelex'\" unpacked with wrong size!
fi
# end of 'middlelex'
fi
if test -f 'endlex' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'endlex'\"
else
echo shar: Extracting \"'endlex'\" \(5083 characters\)
sed "s/^X//" >'endlex' <<'END_OF_FILE'
X{blanks}+				{echo(yytext);}
X{newline}				{ NewLine(1); }
X^#.*$					{echo(yytext);}
X"/*"(\\.|[^\\*/]|"*"[^/])*"*/"		{echo(yytext);}
X{L}({L}|{D})*":"	{ 
X			  if (yyleng >= 99) oops("String too long");
X			  else {
X			     unsigned char c;
X			     char *str;
X			     str = (char *) malloc(yyleng+2);
X			     c = strlen(yytext);
X			     strcpy(&(str[1]),yytext);
X			     str[0] = c;
X			     str[c] = '\0';
X			     yylval.string = &(str[1]);
X			  }
X			  MYRET(LABEL) 
X			}
X({L}({L}|{D})*\/)+{L}({L}|{D})* {
X			  if (yyleng >= 99) oops("String too long");
X			  else {
X			     unsigned char c;
X			     char *str;
X			     str = (char *) malloc(yyleng+2);
X			     c = strlen(yytext);
X			     strcpy(&(str[1]),yytext);
X			     str[0] = c;
X			     yylval.string = &(str[1]);
X			  }
X			  MYRET(IDENTIFIER) 
X			}
X"<"{L}({L}|{D})*">"		{ 
X			  if (yyleng >= 99) oops("String too long");
X			  else {
X			     unsigned char c;
X			     char *str;
X			     str = (char *) malloc(yyleng+2);
X			     c = strlen(yytext);
X			     strcpy(&(str[1]),yytext);
X			     str[0] = c;
X			     yylval.string = &(str[1]);
X			  }
X			  if (IsTypeSymbol(yytext))
X			       MYRET(IDENTIFIER)  /* was TYPENAME */
X			  else MYRET(IDENTIFIER) 
X			}
X{L}({L}|{D})*		{ 
X			  if (yyleng >= 99) oops("String too long");
X			  else {
X			     unsigned char c;
X			     char *str;
X			     str = (char *) malloc(yyleng+2);
X			     c = strlen(yytext);
X			     strcpy(&(str[1]),yytext);
X			     str[0] = c;
X			     yylval.string = &(str[1]);
X			  }
X			  if (IsTypeSymbol(yytext))
X			       MYRET(IDENTIFIER)  /* was TYPENAME */
X			  else MYRET(IDENTIFIER) 
X			}
X
X0[xX]{H}+		{ yylval.intval = (int) strtol(yytext,(char**)NULL,0);
X		           MYRET(INTCONSTANT) }
X0[xX]{H}+[lL]		{ yylval.longval = strtoll(yytext,(char**)NULL,0);
X		           MYRET(LONGCONSTANT) /*all longs need work*/}
X0			{ yylval.intval = 0; MYRET(INTCONSTANT) }
X0{O}*	   		{ yylval.intval = (int) strtol(yytext,(char**)NULL,0);
X		           MYRET(INTCONSTANT) }
X0{O}*[lL]		{ yylval.longval = strtoll(yytext,(char**)NULL,0);
X		           MYRET(LONGCONSTANT) }
X[+-]{D}*   		{ yylval.intval = (int) strtol(yytext,(char**)NULL,0);
X		           MYRET(INTCONSTANT) }
X{D}*	   		{ yylval.intval = (int) strtol(yytext,(char**)NULL,0);
X		           MYRET(INTCONSTANT) }
X{D}*[lL]		{ yylval.longval = strtoll(yytext,(char**)NULL,0);
X		           MYRET(LONGCONSTANT) }
X\'\\n\'			{ yylval.charval = '\n';   MYRET(CHARCONSTANT) }
X\'\\.\'			{ yylval.charval = yytext[2];   MYRET(CHARCONSTANT) }
X\'.\'			{ yylval.charval = yytext[1];   MYRET(CHARCONSTANT) }
X'(\\.|[^\\'])+'		{ oops("What was that?");   MYRET(CHARCONSTANT) }
X
X{D}+{E}[dD]?			{ yylval.doubleval = atof(yytext); 
X				MYRET(DOUBLECONSTANT) }
X{D}*"."{D}+({E})?[dD]?	{ yylval.doubleval = atof(yytext); 
X				MYRET(DOUBLECONSTANT) }
X{D}+"."({E})?[dD]?	{ yylval.doubleval = atof(yytext); 
X				MYRET(DOUBLECONSTANT) }
X{D}+{E}[fF]		{ yylval.floatval = (float) atof(yytext); 
X				MYRET(FLOATCONSTANT) }
X{D}*"."{D}+({E})?[fF]	 { yylval.floatval = (float) atof(yytext); 
X				MYRET(FLOATCONSTANT) }
X{D}+"."({E})?[fF]	{ yylval.floatval = (float) atof(yytext); 
X				MYRET(FLOATCONSTANT) }
X
X\"(\\.|[^\\"])*\"	{
X			  if (yyleng >= 99) oops("String too long");
X			  else {
X			     unsigned char c;
X			     int textlength;
X			     char *str;
X			     str = (char *) malloc(yyleng);
X			     textlength = yyleng-2;
X			     c = textlength;
X			     strncpy(&(str[1]),&(yytext[1]),textlength);
X			     str[0] = c;
X			     yylval.string = &(str[1]);
X			  }
X			  MYRET(STRING_LITERAL) 
X			}
X
X"="			{ MYRET('=') }
X"<"			{ MYRET('<') }
X">"			{ MYRET('>') }
X"["			{ MYRET('[') }
X"]"			{ MYRET(']') }
X"("			{ MYRET('(') }
X")"			{ MYRET(')') }
X","			{ MYRET(',') }
X"."			{ MYRET('.') }
X"{"			{ MYRET('{') }
X"}"			{ MYRET('}') }
X"?"			{ MYRET('?') }
X":"			{ MYRET(':') }
X.					{echo(yytext); 
X                                         oops("Illegal character");
X                                        }
X%%
X/* Listing routines */
X
Xvoid StartListing(void) {
X   printf("%s","*     Java Assembler\n\n");
X   linenumber = 0;
X   col        = 1;
X   NewLine(1);
X}
X
Xvoid EndListing(void) {
X   printf("%s","\n\n*     End of Assembly \n\n");
X}
X
Xvoid NewLine(int bump) 
X{
X   linenumber += bump;
X   if (bump) {
X      col = 1;
X      printf("\n%7d: ",linenumber);
X      }
X   else printf("\n%s%6d: ","*",linenumber);
X}
X
Xvoid echo(char *text) 
X{
X   col += strlen(yytext);
X   printf("%s",yytext);
X}
X
Xvoid StartMessage(void) {
X   int i;
X   NewLine(0);
X   printf("%*s",col,"^^^ ");
X}
X
Xvoid EndMessage(void) {
X   int i;
X   NewLine(0);
X   printf("%*s",col," ");
X}
X
Xvoid message(char *text) 
X{
X   StartMessage();
X   printf("%s",text);
X   EndMessage();
X}
X
Xvoid ABORT(int line, int col)
X{
X   fprintf(stderr,"Aborting due to error at line %d, column %d\n",
X                  line, col);
X   EndListing();
X   exit(1);
X}
X
Xvoid warning(char *text)
X{
X   message(text);
X   fprintf(stderr,"%s\n",text);
X}
Xvoid oops(char *text) 
X{
X   message(text);
X   fprintf(stderr,"%s\n",text);
X   ABORT(linenumber,col);
X}
X
Xint LineNumber() {
X  return(linenumber);
X}
Xint ColNumber() {
X  return(col);
X}
END_OF_FILE
if test 5083 -ne `wc -c <'endlex'`; then
    echo shar: \"'endlex'\" unpacked with wrong size!
fi
# end of 'endlex'
fi
if test -f 'javaa.y' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'javaa.y'\"
else
echo shar: Extracting \"'javaa.y'\" \(24656 characters\)
sed "s/^X//" >'javaa.y' <<'END_OF_FILE'
X/* Copyright 1996, Jason Hunt and Washington University */
X%token <string> LABEL
X%token <string> IDENTIFIER
X%token <intval> INTCONSTANT
X%token <longval> LONGCONSTANT
X%token <floatval> FLOATCONSTANT
X%token <doubleval> DOUBLECONSTANT
X%token <charval> CHARCONSTANT
X%token <string> STRING_LITERAL
X%token <Rk> CLASS
X%token <Rk> EXTENDS
X%token <Rk> ACCESS
X%token <Rk> IMPLEMENTS
X%token <Rk> FIELD
X%token <Rk> METHOD
X%token <Rk> MAX_STACK
X%token <Rk> MAX_LOCALS
X%token <Rk> CODE
X%token <Rk> PUBLIC
X%token <Rk> PRIVATE
X%token <Rk> PROTECTED
X%token <Rk> ABSTRACT
X%token <Rk> FINAL
X%token <Rk> INTERFACE
X%token <Rk> STATIC
X%token <Rk> NATIVE
X%token <Rk> SYNCHRONIZED
X%token <Rk> TRANSIENT
X%token <Rk> VOLATILE
X%token <Rk> BYTE
X%token <Rk> CHAR
X%token <Rk> DOUBLE
X%token <Rk> FLOAT
X%token <Rk> INT
X%token <Rk> LONG
X%token <Rk> SHORT
X%token <Rk> BOOLEAN
X%token <Rk> VOID
X%token <Rk> DEFAULT
X%token <Rk> TO
X%token <Rk> EXCEPTIONS
X%token <Rk> SOURCEFILE
X%token <Rk> THROWS
X%token <Rk> LINENUMBERTABLE
X%token <Rk> LOCALVARIABLETABLE
X%token <Rk> ACC_PUBLIC
X%token <Rk> ACC_PRIVATE
X%token <Rk> ACC_PROTECTED
X%token <Rk> ACC_STATIC
X%token <Rk> ACC_FINAL
X%token <Rk> ACC_SYNCHRONIZED
X%token <Rk> ACC_VOLATILE
X%token <Rk> ACC_TRANSIENT
X%token <Rk> ACC_NATIVE
X%token <Rk> ACC_INTERFACE
X%token <Rk> ACC_ABSTRACT
X%token <Rk> AALOAD
X%token <Rk> AASTORE
X%token <Rk> ACONST_NULL
X%token <Rk> ALOAD_0
X%token <Rk> ALOAD_1
X%token <Rk> ALOAD_2
X%token <Rk> ALOAD_3
X%token <Rk> ANEWARRAY
X%token <Rk> ARETURN
X%token <Rk> ARRAYLENGTH
X%token <Rk> ASTORE_0
X%token <Rk> ASTORE_1
X%token <Rk> ASTORE_2
X%token <Rk> ASTORE_3
X%token <Rk> ATHROW
X%token <Rk> BALOAD
X%token <Rk> BASTORE
X%token <Rk> BIPUSH
X%token <Rk> CALOAD
X%token <Rk> CASTORE
X%token <Rk> CHECKCAST
X%token <Rk> D2F
X%token <Rk> D2I
X%token <Rk> D2L
X%token <Rk> DADD
X%token <Rk> DALOAD
X%token <Rk> DASTORE
X%token <Rk> DCMPG
X%token <Rk> DCMPL
X%token <Rk> DCONST_0
X%token <Rk> DCONST_1
X%token <Rk> DDIV
X%token <Rk> DLOAD_0
X%token <Rk> DLOAD_1
X%token <Rk> DLOAD_2
X%token <Rk> DLOAD_3
X%token <Rk> DMUL
X%token <Rk> DNEG
X%token <Rk> DREM
X%token <Rk> DRETURN
X%token <Rk> DSTORE_0
X%token <Rk> DSTORE_1
X%token <Rk> DSTORE_2
X%token <Rk> DSTORE_3
X%token <Rk> DSUB
X%token <Rk> DUP
X%token <Rk> DUP_X1
X%token <Rk> DUP_X2
X%token <Rk> DUP2
X%token <Rk> DUP2_X1
X%token <Rk> DUP2_X2
X%token <Rk> F2D
X%token <Rk> F2I
X%token <Rk> F2L
X%token <Rk> FADD
X%token <Rk> FALOAD
X%token <Rk> FASTORE
X%token <Rk> FCMPG
X%token <Rk> FCMPL
X%token <Rk> FCONST_0
X%token <Rk> FCONST_1
X%token <Rk> FCONST_2
X%token <Rk> FDIV
X%token <Rk> FLOAD_0
X%token <Rk> FLOAD_1
X%token <Rk> FLOAD_2
X%token <Rk> FLOAD_3
X%token <Rk> FMUL
X%token <Rk> FNEG
X%token <Rk> FREM
X%token <Rk> FRETURN
X%token <Rk> FSTORE_0
X%token <Rk> FSTORE_1
X%token <Rk> FSTORE_2
X%token <Rk> FSTORE_3
X%token <Rk> FSUB
X%token <Rk> GETFIELD
X%token <Rk> GETSTATIC
X%token <Rk> GOTO
X%token <Rk> GOTO_W
X%token <Rk> I2B
X%token <Rk> I2C
X%token <Rk> I2D
X%token <Rk> I2F
X%token <Rk> I2L
X%token <Rk> I2S
X%token <Rk> IADD
X%token <Rk> IALOAD
X%token <Rk> IAND
X%token <Rk> IASTORE
X%token <Rk> ICONST_0
X%token <Rk> ICONST_1
X%token <Rk> ICONST_2
X%token <Rk> ICONST_3
X%token <Rk> ICONST_4
X%token <Rk> ICONST_5
X%token <Rk> ICONST_M1
X%token <Rk> IDIV
X%token <Rk> IF_ACMPEQ
X%token <Rk> IF_ACMPNE
X%token <Rk> IF_ICMPEQ
X%token <Rk> IF_ICMPNE
X%token <Rk> IF_ICMPLT
X%token <Rk> IF_ICMPGE
X%token <Rk> IF_ICMPGT
X%token <Rk> IF_ICMPLE
X%token <Rk> IFEQ
X%token <Rk> IFNE
X%token <Rk> IFLT
X%token <Rk> IFGE
X%token <Rk> IFGT
X%token <Rk> IFLE
X%token <Rk> IFNONNULL
X%token <Rk> IFNULL
X%token <Rk> ILOAD_0
X%token <Rk> ILOAD_1
X%token <Rk> ILOAD_2
X%token <Rk> ILOAD_3
X%token <Rk> IMUL
X%token <Rk> INEG
X%token <Rk> IOR
X%token <Rk> IREM
X%token <Rk> IRETURN
X%token <Rk> ISHL
X%token <Rk> ISHR
X%token <Rk> ISTORE_0
X%token <Rk> ISTORE_1
X%token <Rk> ISTORE_2
X%token <Rk> ISTORE_3
X%token <Rk> ISUB
X%token <Rk> IUSHR
X%token <Rk> IXOR
X%token <Rk> JSR
X%token <Rk> JSR_W
X%token <Rk> L2D
X%token <Rk> L2F
X%token <Rk> L2I
X%token <Rk> LADD
X%token <Rk> LALOAD
X%token <Rk> LAND
X%token <Rk> LASTORE
X%token <Rk> LCMP
X%token <Rk> LCONST_0
X%token <Rk> LCONST_1
X%token <Rk> LDIV
X%token <Rk> LLOAD_0
X%token <Rk> LLOAD_1
X%token <Rk> LLOAD_2
X%token <Rk> LLOAD_3
X%token <Rk> LMUL
X%token <Rk> LNEG
X%token <Rk> LOR
X%token <Rk> LREM
X%token <Rk> LRETURN
X%token <Rk> LSHL
X%token <Rk> LSHR
X%token <Rk> LSTORE_0
X%token <Rk> LSTORE_1
X%token <Rk> LSTORE_2
X%token <Rk> LSTORE_3
X%token <Rk> LSUB
X%token <Rk> LUSHR
X%token <Rk> LXOR
X%token <Rk> MONITORENTER
X%token <Rk> MONITOREXIT
X%token <Rk> NOP
X%token <Rk> POP
X%token <Rk> POP2
X%token <Rk> RETURN
X%token <Rk> SALOAD
X%token <Rk> SASTORE
X%token <Rk> SWAP
X%token <Rk> IINC
X%token <Rk> INSTANCEOF
X%token <Rk> INVOKEINTERFACE
X%token <Rk> INVOKENONVIRTUAL
X%token <Rk> INVOKESTATIC
X%token <Rk> INVOKEVIRTUAL
X%token <Rk> LDC
X%token <Rk> LDC_W
X%token <Rk> LDC2_W
X%token <Rk> MULTIANEWARRAY
X%token <Rk> NEW
X%token <Rk> NEWARRAY
X%token <Rk> PUTFIELD
X%token <Rk> PUTSTATIC
X%token <Rk> SIPUSH
X%token <Rk> ILOAD
X%token <Rk> FLOAD
X%token <Rk> ALOAD
X%token <Rk> LLOAD
X%token <Rk> DLOAD
X%token <Rk> ISTORE
X%token <Rk> FSTORE
X%token <Rk> ASTORE
X%token <Rk> LSTORE
X%token <Rk> DSTORE
X%token <Rk> RET
X%token <Rk> WIDE
X%token <Rk> LOAD
X%token <Rk> STORE
X%token <Rk> LOOKUPSWITCH
X%token <Rk> TABLESWITCH
X%{
X#include <string.h>
X#include <stdlib.h>
X#include <stdio.h>
X#include "types.h"
X#include "utils.h"
X#include "build.h"
X#include "protos.h"
X#include "listing.h"
X%}
X
X%type <argtype>		argument fieldconstant
X%type <string>		label
X%type <intval> 		no_arg_op one_arg_op fieldref_arg_op 
X%type <intval> 		methodref_arg_op class_arg_op label_arg_op 
X%type <intval> 		localvar_arg_op localvar_arg newarraytype 
X%type <intval>		access_specifier class_modifiers method_modifiers
X%type <intval>	 	field_modifiers max_locals_decl
X%type <intval>		abstract_entry final_entry public_entry  
X%type <intval>		interface_entry static_entry native_entry 
X%type <intval>		synchronized_entry transient_entry volatile_entry
X%type <string>		superclass classname arrayorclassname 
X%type <string>	 	returntype arguments type basetype arrayadder
X%type <string>	 	argumentlist methodargument methodarguments
X%type <string>	 	methodargumentlist 
X%type <classfieldmethodstruct> classfieldmethodname endname
X%type <lookuplistptr>	lookuplist 
X%type <tablelistptr>	tablelist 
X
X%union {
X   Terminal        rk;
X   Terminal        NT;
X   Terminal        RK;
X   Terminal        Rk;
X
X   float           floatval;
X   double          doubleval;
X   char            charval;
X   int             intval;
X   long            longval;
X   char           *string;
X
X   BaseType        basetype;
X   StorageClass    storageclass;
X   TypeQualifier   typequalifier;
X   ArgType	   argtype;
X  
X   lookupentry *   lookuplistptr;
X   tableentry *    tablelistptr;
X
X   struct {
X	char* classname;
X	char* fieldmethodname;
X   }		classfieldmethodstruct;
X
X   struct _declinfo {
X      int   function;
X      int   ptrcount;
X      int   dimsize[7];
X      int   numdims;
X      char *name;
X   }               declinfo;
X   
X   struct {
X      TreeNode *formals;
X      struct _declinfo D;
X   }               funcstuff;
X
X   struct {
X      Type          T;
X      StorageClass  C;
X      TypeQualifier Q;
X   } declspecs;
X
X   struct {
X      Type          T;
X      StorageClass  C;
X      TypeQualifier Q;
X      TreeNode     *node;
X   } declspecsnode;
X
X   struct {
X      Type          T;
X      StorageClass  C;
X      TypeQualifier Q;
X      Symbol       *headsym;
X      Symbol       *prevsym;
X   } structdeclspecs;
X
X   struct {
X      Symbol   *headsym;
X      Symbol   *prevsym;
X   } headprevsym;
X
X   struct {
X      int       spec;
X      int       val;
X      char     *id;
X   } idspecval;
X
X   struct {
X      Symbol   *sym;
X      int       val;
X   } symval;
X
X   Type            typetype;
X
X   Symbol         *sym;
X
X   struct {
X      TreeNode *decl;
X      TreeNode *func;
X   } declfunc;
X
X   struct {
X      TreeNode *decl;
X      TreeNode *func;
X      TreeNode *exprs;
X      TreeNode *last;
X   } declfuncexprs;
X
X   struct {
X      TreeNode *exprs;
X      TreeNode *last;
X   } exprslast;
X
X   TreeNode       *node;
X}
X
X%{
X   static void     CheckStructDcl(Type,int);
X   static MimeType GenBlankMimeType();
X   static Type     GenBlankType();
X   static TreeNode *MakeBinOpSubTree(int, TreeNode *, TreeNode *);
X   static TreeNode *MakeUnOpSubTree(int, TreeNode *);
X   static TreeNode *MakeFuncSibs(TreeNode *, TreeNode *, TreeNode *,
X              TreeNode *, TreeNode *);
X   static TreeNode *GenEntryArgs(TreeNode *);
X%}
X
X%start compilation_unit
X%%
Xcompilation_unit
X	: { InitAssembler();} classlist
X       		{ EndAssembler();}
X	;
X
Xclasslist:  
X	class classlist
X	| class
X	;
X
Xclass	: class_modifiers classword IDENTIFIER superclass interfaces '{' 
X	  fieldlist 
X	  	{
X		SetThisClass($1, $3, $4);
X		}
X          methodlist sourcefilename '}'
X	;
X
Xclass_modifiers 
X	: abstract_entry final_entry public_entry interface_entry
X	 	{$$ = $1 | $2 | $3 | $4;}
X	;
X
Xclassword: CLASS
X		{break;}
X	|	{break;}
X	;
X
X
Xsuperclass
X	: EXTENDS classname
X		{ $$ = $2;}
X	| {
X	    char* tempstring;
X	    tempstring = (char *) malloc(strlen("java/lang/Object"));
X	    strcpy(tempstring,"java/lang/Object");
X	    $$ = tempstring;
X	  }
X	;
X
Xclassname: IDENTIFIER '.' classname
X		{
X		  $$ = ConsStrings($1,ConsStrings("/",$3));
X		}
X	| IDENTIFIER
X		{
X		  $$ = $1;
X		}
X	;
X
Xclassfieldmethodname
X	: IDENTIFIER '.' endname
X		{
X		  if ($3.classname == NULL) $$.classname = $1;
X		  else $$.classname = ConsStrings($1,ConsStrings("/",$3.classname));
X		  $$.fieldmethodname = $3.fieldmethodname;
X		}
X	| IDENTIFIER
X		{
X		  $$.classname = GetThisClass();
X		  $$.fieldmethodname = $1;
X		}
X	;
X
Xendname
X	: IDENTIFIER '.' endname
X		{
X		  if ($3.classname == NULL) $$.classname = $1;
X		  else $$.classname = ConsStrings($1,ConsStrings("/",$3.classname));
X		  $$.fieldmethodname = $3.fieldmethodname;
X		}
X	| IDENTIFIER
X		{
X		  $$.classname = NULL;
X		  $$.fieldmethodname = $1;
X		}
X	;
X
Xabstract_entry
X	: ABSTRACT
X		{$$ = 0x0400;}
X	| {$$=0;}
X	;
X
Xfinal_entry
X	: FINAL
X		{$$ = 0x0010;}
X	| {$$=0;}
X	;
X
Xpublic_entry
X	: PUBLIC
X		{$$ = 0x0001;}
X	| {$$=0;}
X	;
X
Xinterface_entry
X	: INTERFACE
X		{$$ = 0x0200;}
X	| {$$=0;}
X	;
X
Xstatic_entry
X	: STATIC
X		{$$ = 0x0008;}
X	| {$$=0;}
X	;
X
Xnative_entry
X	: NATIVE
X		{$$ = 0x0100;}
X	| {$$=0;}
X	;
X
Xsynchronized_entry
X	: SYNCHRONIZED
X		{$$ = 0x0020;}
X	| {$$=0;}
X	;
X
Xtransient_entry
X	: TRANSIENT
X		{$$ = 0x0080;}
X	| {$$=0;}
X	;
X
Xvolatile_entry
X	: VOLATILE
X		{$$ = 0x0040;}
X	| {$$=0;}
X	;
X
Xaccess_specifier
X	: PRIVATE
X		{$$ = 2;}	
X	| PRIVATE PROTECTED
X		{$$ = 6;}	
X	| PROTECTED
X		{$$ = 4;}	
X	| PUBLIC
X		{$$ = 1;}	
X	| {$$=0;}
X	;
X
Xinterfaces
X	: IMPLEMENTS interfacelist
X		{break;}
X	|	{break;}
X	;
X
Xinterfacelist
X	: interfacelist classname
X		{ AddToInterfaceList($2);}
X	| classname
X		{ AddToInterfaceList($1);}
X	;
X
Xfieldlist
X	: fieldlist field
X	| {break;}
X	;
X
Xfield	: FIELD access_specifier field_modifiers type IDENTIFIER fieldconstant
X	 	{NewField($2|$3, $5, $4, $6);}
X	;
X
Xfieldconstant
X	: '=' INTCONSTANT 
X             {$$.type = INTCONSTANT;
X              $$.intval = $2;
X             }
X	| '=' FLOATCONSTANT 
X             {$$.type = FLOATCONSTANT;
X              $$.floatval = $2;
X             }
X	| '=' LONGCONSTANT 
X             {$$.type = LONGCONSTANT;
X              $$.longval = $2;
X             }
X	| '=' DOUBLECONSTANT 
X             {$$.type = DOUBLECONSTANT;
X              $$.doubleval = $2;
X             }
X 	|
X             {$$.type = 0;
X             }
X	;
X
Xfield_modifiers
X	: static_entry final_entry transient_entry volatile_entry
X		{ $$ = $1 | $2 | $3 | $4 ;}
X	; 
X
Xmethodlist
X	: methodlist method
X	| {break;}
X	;
X
Xmethod  : 
X          METHOD access_specifier method_modifiers {NewNewMethod($2|$3);} 
X  	  returntype 
X	  IDENTIFIER 
X	  '(' methodarguments ')' throwslist MAX_STACK INTCONSTANT 
X          max_locals_decl 
X	  { 
X	    char* tmpstr; 
X	    /*message("Calling NewMethod.");*/
X	    tmpstr = ConsStrings("(",ConsStrings($8,ConsStrings(")",$5)));
X	    /*message(tmpstr);*/
X	    NewMethod($6, tmpstr, $12, $13); }
X	    '{'
X            code
X 	    exceptiontable
X 	    linenumbertable 
X 	    localvariabletable 
X   	    '}'   
X		{EndMethod();}
X	;
X
Xthrowslist :
X	  THROWS throwsentries
X		{break;}
X	|	{break;}
X	;
X
Xthrowsentries :
X	  throwsentries classname
X		{AddToThrowsList($2);}
X	| classname
X		{AddToThrowsList($1);}
X     	;
X
Xmax_locals_decl:
X	MAX_LOCALS INTCONSTANT
X		{$$ = $2;}
X	| 	{$$ = -1;}
X	;
X
Xreturntype
X	: type
X		{ $$ = $1; }
X	| VOID
X	    	{ char* tempstring;
X	     	  tempstring = (char *) malloc(strlen("B"));
X	     	  strcpy(tempstring,"V");
X	     	  $$ = tempstring;
X	  	}
X	;
X
Xarguments
X	: argumentlist
X	 	{ $$ = $1;}
X	| {$$ = NULL;}
X	;
X
Xargumentlist: type ',' argumentlist
X		{
X		  /*message("in arguments with comma.");*/
X		  $$ = ConsStrings($1,$3);
X		}
X	| type
X		{ $$ = $1; /*message("in arguments");*/}
X	;
X
X
Xmethodarguments
X	: methodargumentlist
X	 	{ $$ = $1;}
X	| {$$ = NULL;}
X	;
X
Xmethodargumentlist: methodargument ',' methodargumentlist
X		{
X		  /*message("in arguments with comma.");*/
X		  $$ = ConsStrings($1,$3);
X		}
X	| methodargument
X		{ $$ = $1; /*message("in arguments");*/}
X	;
Xmethodargument: type
X		{ $$ = $1; 
X		  /*message("calling IncrementLocalVarSlot");*/
X		  IncrementLocalVarSlot($1); /*message("in methodargument");*/}
X	| type IDENTIFIER
X		{ $$ = $1; NewLocalVar($2, $1);/*message("in methodargument");*/}
X	;
X
X
Xtype	: basetype arrayadder
X		{
X		  /*message("In type.");*/
X		  $$ = ConsStrings($2,$1);
X		}
X	;
X
Xbasetype: BYTE
X		{ $$ = ConsStrings("B",""); }
X	| CHAR
X		{ $$ = ConsStrings("C",""); }
X	| DOUBLE
X		{ $$ = ConsStrings("D",""); }
X	| FLOAT
X		{ $$ = ConsStrings("F",""); }
X	| INT
X		{ $$ = ConsStrings("I",""); }
X	| LONG
X		{ $$ = ConsStrings("J",""); }
X	| SHORT
X		{ $$ = ConsStrings("S",""); }
X	| BOOLEAN
X		{ $$ = ConsStrings("Z",""); }
X	| classname
X		{
X		 $$ = ConsStrings("L", ConsStrings($1,";"));
X	   	 /*message($$);*/
X		 /*message("Got classname.");*/} 
X	;
X
Xarrayadder
X	: '[' ']' arrayadder
X	   	{$$ = ConsStrings("[",$3);}
X	| {$$=NULL;}
X	;
X
Xmethod_modifiers
X	: static_entry abstract_entry final_entry native_entry
X	  synchronized_entry
X		{ $$ = $1 | $2 | $3 | $4 | $5;}
X	; 
X
Xlocalvar: type IDENTIFIER
X	 	{NewLocalVar($2, $1);}
X	;
X
Xarrayorclassname
X	: classname
X		{$$ = $1;}
X	| basetype '[' ']' arrayadder
X		{$$ = ConsStrings("[",ConsStrings($4,$1));}
X	;
X
X
Xcode	: op_list
X       		{break;}
X	;
X
Xop_list	: op_list op_line 
X       		{break;}
X	| 
X       		{break;}
X	;
X
Xop_line	: label op
X       		{break;}
X	| op
X       		{break;}
X	| localvar
X       		{break;}
X	| label localvar
X       		{break;}
X	;
X
Xlabel	: LABEL
X		{DefineLabel($1);}
X	; 
X
Xop	: no_arg_op
X            	{GenNoArgCode($1);
X		}
X	| one_arg_op argument
X		{GenOneArgCode($1, $2);
X		}
X	| fieldref_arg_op type classfieldmethodname 
X		{GenFieldArgCode($1, $3.classname, $3.fieldmethodname, $2);
X		}
X	| methodref_arg_op returntype classfieldmethodname 
X	  '(' arguments ')' 
X		{GenMethodArgCode($1, $3.classname, $3.fieldmethodname,
X		         	 ConsStrings("(",ConsStrings($5,
X				   ConsStrings(")",$2)))); 
X		}
X	| class_arg_op classname 
X		{GenClassArgCode($1, $2);
X		}
X	| ANEWARRAY arrayorclassname 
X		{GenClassArgCode($1.terminal, $2);
X		}
X	| INVOKEINTERFACE returntype classfieldmethodname 
X	  '(' arguments ')' INTCONSTANT 
X		{GenINVOKEINTERFACECode($1.terminal, $3.classname,
X				 $3.fieldmethodname,
X		         	 ConsStrings("(",ConsStrings($5,
X				   ConsStrings(")",$2))), $7); 
X		}
X	| label_arg_op IDENTIFIER
X		{GenLabelArgCode($1, $2);
X		}
X        | localvar_arg_op localvar_arg
X		{GenLocalVarArgCode($1,$2);
X		}
X        | IINC localvar_arg INTCONSTANT
X		{GenIINCCode($1.terminal,$2,$3);
X		}
X	| LOOKUPSWITCH DEFAULT IDENTIFIER '{' lookuplist '}'
X		{GenLOOKUPSWITCHCode($1.terminal,$3,$5);
X		}
X	| TABLESWITCH INTCONSTANT TO INTCONSTANT DEFAULT IDENTIFIER '{'
X	  tablelist '}'
X		{GenTABLESWITCHCode($1.terminal,$2,$4,$6,$8);
X		} 
X        | MULTIANEWARRAY arrayorclassname INTCONSTANT
X		{GenMULTIANEWARRAYCode($1.terminal,$2,$3);
X		}
X        | NEWARRAY newarraytype
X		{GenNEWARRAYCode($1.terminal,$2);
X		}
X	;
X
Xno_arg_op : AALOAD
X  		{$$=$1.terminal;} 
X	| AASTORE
X  		{$$=$1.terminal;} 
X  	| ACONST_NULL 
X  		{$$=$1.terminal;} 
X	| ALOAD_0
X  		{$$=$1.terminal;} 
X	| ALOAD_1
X  		{$$=$1.terminal;} 
X	| ALOAD_2
X  		{$$=$1.terminal;} 
X	| ALOAD_3
X  		{$$=$1.terminal;}
X	| ARETURN
X  		{$$=$1.terminal;}
X	| ARRAYLENGTH
X  		{$$=$1.terminal;}
X	| ASTORE_0
X  		{$$=$1.terminal;}
X	| ASTORE_1
X  		{$$=$1.terminal;}
X	| ASTORE_2
X  		{$$=$1.terminal;}
X	| ASTORE_3
X  		{$$=$1.terminal;}
X	| ATHROW
X  		{$$=$1.terminal;}
X	| BALOAD
X  		{$$=$1.terminal;}
X	| BASTORE
X  		{$$=$1.terminal;}
X	| CALOAD
X  		{$$=$1.terminal;}
X	| CASTORE
X  		{$$=$1.terminal;}
X	| D2F
X  		{$$=$1.terminal;} 
X	| D2I
X  		{$$=$1.terminal;} 
X	| D2L
X  		{$$=$1.terminal;} 
X	| DADD
X  		{$$=$1.terminal;} 
X	| DALOAD
X  		{$$=$1.terminal;} 
X	| DASTORE
X  		{$$=$1.terminal;} 
X	| DCMPG
X  		{$$=$1.terminal;} 
X	| DCMPL
X  		{$$=$1.terminal;} 
X	| DCONST_0
X  		{$$=$1.terminal;} 
X	| DCONST_1
X  		{$$=$1.terminal;} 
X	| DDIV
X  		{$$=$1.terminal;} 
X	| DLOAD_0
X  		{$$=$1.terminal;} 
X	| DLOAD_1
X  		{$$=$1.terminal;} 
X	| DLOAD_2
X  		{$$=$1.terminal;} 
X	| DLOAD_3
X  		{$$=$1.terminal;} 
X	| DMUL
X  		{$$=$1.terminal;} 
X	| DNEG
X  		{$$=$1.terminal;} 
X	| DREM
X  		{$$=$1.terminal;} 
X	| DRETURN
X  		{$$=$1.terminal;} 
X	| DSTORE_0
X  		{$$=$1.terminal;} 
X	| DSTORE_1
X  		{$$=$1.terminal;} 
X	| DSTORE_2
X  		{$$=$1.terminal;} 
X	| DSTORE_3
X  		{$$=$1.terminal;} 
X	| DSUB
X  		{$$=$1.terminal;} 
X	| DUP
X  		{$$=$1.terminal;} 
X	| DUP_X1
X  		{$$=$1.terminal;} 
X	| DUP_X2
X  		{$$=$1.terminal;} 
X	| DUP2
X  		{$$=$1.terminal;} 
X	| DUP2_X1
X  		{$$=$1.terminal;} 
X	| DUP2_X2
X  		{$$=$1.terminal;} 
X	| F2D
X  		{$$=$1.terminal;} 
X	| F2I
X  		{$$=$1.terminal;} 
X	| F2L
X  		{$$=$1.terminal;} 
X	| FADD
X  		{$$=$1.terminal;} 
X	| FALOAD
X  		{$$=$1.terminal;} 
X	| FASTORE
X  		{$$=$1.terminal;} 
X	| FCMPG
X  		{$$=$1.terminal;} 
X	| FCMPL
X  		{$$=$1.terminal;} 
X	| FCONST_0
X  		{$$=$1.terminal;} 
X	| FCONST_1
X  		{$$=$1.terminal;} 
X	| FCONST_2
X  		{$$=$1.terminal;} 
X	| FDIV
X  		{$$=$1.terminal;} 
X	| FLOAD_0
X  		{$$=$1.terminal;} 
X	| FLOAD_1
X  		{$$=$1.terminal;} 
X	| FLOAD_2
X  		{$$=$1.terminal;} 
X	| FLOAD_3
X  		{$$=$1.terminal;} 
X	| FMUL
X  		{$$=$1.terminal;} 
X	| FNEG
X  		{$$=$1.terminal;} 
X	| FREM
X  		{$$=$1.terminal;} 
X	| FRETURN
X  		{$$=$1.terminal;} 
X	| FSTORE_0
X  		{$$=$1.terminal;} 
X	| FSTORE_1
X  		{$$=$1.terminal;} 
X	| FSTORE_2
X  		{$$=$1.terminal;} 
X	| FSTORE_3
X  		{$$=$1.terminal;} 
X	| FSUB
X  		{$$=$1.terminal;} 
X	| I2B
X  		{$$=$1.terminal;} 
X	| I2C
X  		{$$=$1.terminal;} 
X	| I2D
X  		{$$=$1.terminal;} 
X	| I2F
X  		{$$=$1.terminal;} 
X	| I2L
X  		{$$=$1.terminal;} 
X	| I2S
X  		{$$=$1.terminal;} 
X	| IADD
X  		{$$=$1.terminal;} 
X	| IALOAD
X  		{$$=$1.terminal;} 
X	| IAND
X  		{$$=$1.terminal;} 
X	| IASTORE
X  		{$$=$1.terminal;} 
X	| ICONST_0
X  		{$$=$1.terminal;} 
X	| ICONST_1
X  		{$$=$1.terminal;} 
X	| ICONST_2
X  		{$$=$1.terminal;} 
X	| ICONST_3
X  		{$$=$1.terminal;} 
X	| ICONST_4
X  		{$$=$1.terminal;} 
X	| ICONST_5
X  		{$$=$1.terminal;} 
X	| ICONST_M1
X  		{$$=$1.terminal;} 
X	| IDIV
X  		{$$=$1.terminal;} 
X	| ILOAD_0
X  		{$$=$1.terminal;} 
X	| ILOAD_1
X  		{$$=$1.terminal;} 
X	| ILOAD_2
X  		{$$=$1.terminal;} 
X	| ILOAD_3
X  		{$$=$1.terminal;} 
X	| IMUL
X  		{$$=$1.terminal;} 
X	| INEG
X  		{$$=$1.terminal;} 
X	| IOR
X  		{$$=$1.terminal;} 
X	| IREM
X  		{$$=$1.terminal;} 
X	| IRETURN
X  		{$$=$1.terminal;} 
X	| ISHL
X  		{$$=$1.terminal;} 
X	| ISHR
X  		{$$=$1.terminal;} 
X	| ISTORE_0
X  		{$$=$1.terminal;} 
X	| ISTORE_1
X  		{$$=$1.terminal;} 
X	| ISTORE_2
X  		{$$=$1.terminal;} 
X	| ISTORE_3
X  		{$$=$1.terminal;} 
X	| ISUB
X  		{$$=$1.terminal;} 
X	| IUSHR
X  		{$$=$1.terminal;} 
X	| IXOR
X  		{$$=$1.terminal;} 
X	| L2D
X  		{$$=$1.terminal;} 
X	| L2F
X  		{$$=$1.terminal;} 
X	| L2I
X  		{$$=$1.terminal;} 
X	| LADD
X  		{$$=$1.terminal;} 
X	| LALOAD
X  		{$$=$1.terminal;} 
X	| LAND
X  		{$$=$1.terminal;} 
X	| LASTORE
X  		{$$=$1.terminal;} 
X	| LCMP
X  		{$$=$1.terminal;} 
X	| LCONST_0
X  		{$$=$1.terminal;} 
X	| LCONST_1
X  		{$$=$1.terminal;} 
X	| LDIV
X  		{$$=$1.terminal;} 
X	| LLOAD_0
X  		{$$=$1.terminal;} 
X	| LLOAD_1
X  		{$$=$1.terminal;} 
X	| LLOAD_2
X  		{$$=$1.terminal;} 
X	| LLOAD_3
X  		{$$=$1.terminal;} 
X	| LMUL
X  		{$$=$1.terminal;} 
X	| LNEG
X  		{$$=$1.terminal;} 
X	| LOR
X  		{$$=$1.terminal;} 
X	| LREM
X  		{$$=$1.terminal;} 
X	| LRETURN
X  		{$$=$1.terminal;} 
X	| LSHL
X  		{$$=$1.terminal;} 
X	| LSHR
X  		{$$=$1.terminal;} 
X	| LSTORE_0
X  		{$$=$1.terminal;} 
X	| LSTORE_1
X  		{$$=$1.terminal;} 
X	| LSTORE_2
X  		{$$=$1.terminal;} 
X	| LSTORE_3
X  		{$$=$1.terminal;} 
X	| LSUB
X  		{$$=$1.terminal;} 
X	| LUSHR
X  		{$$=$1.terminal;} 
X	| LXOR
X  		{$$=$1.terminal;} 
X	| MONITORENTER
X  		{$$=$1.terminal;} 
X	| MONITOREXIT
X  		{$$=$1.terminal;} 
X	| NOP
X  		{$$=$1.terminal;} 
X	| POP
X  		{$$=$1.terminal;} 
X	| POP2
X  		{$$=$1.terminal;} 
X	| RETURN
X  		{$$=$1.terminal;} 
X	| SALOAD
X  		{$$=$1.terminal;} 
X	| SASTORE
X  		{$$=$1.terminal;} 
X	| SWAP
X  		{$$=$1.terminal;} 
X	| WIDE
X  		{$$=$1.terminal;} 
X	;
X
Xone_arg_op : BIPUSH 
X  		{$$=$1.terminal;} 
X        | LDC
X  		{$$=$1.terminal;}
X    	| LDC_W 
X  		{$$=$1.terminal;}
X    	| LDC2_W 
X  		{$$=$1.terminal;}
X    	| SIPUSH 
X  		{$$=$1.terminal;}
X	;
X
X	
Xmethodref_arg_op
X	: INVOKESTATIC
X  		{$$=$1.terminal;} 
X    	| INVOKENONVIRTUAL 
X  		{$$=$1.terminal;}
X    	| INVOKEVIRTUAL 
X  		{$$=$1.terminal;}
X	;
X
Xfieldref_arg_op
X    	: GETFIELD 
X  		{$$=$1.terminal;}
X    	| GETSTATIC 
X  		{$$=$1.terminal;}
X    	| PUTFIELD 
X  		{$$=$1.terminal;}
X    	| PUTSTATIC 
X  		{$$=$1.terminal;}
X	;
X
Xclass_arg_op
X	: CHECKCAST
X  		{$$=$1.terminal;}
X	| INSTANCEOF
X  		{$$=$1.terminal;}
X	| NEW
X  		{$$=$1.terminal;}
X	;
Xlabel_arg_op
X	: GOTO
X  		{$$=$1.terminal;}
X	| GOTO_W
X  		{$$=$1.terminal;}
X	| IF_ACMPEQ
X  		{$$=$1.terminal;}
X	| IF_ACMPNE
X  		{$$=$1.terminal;}
X	| IF_ICMPEQ
X  		{$$=$1.terminal;}
X	| IF_ICMPNE
X  		{$$=$1.terminal;}
X	| IF_ICMPLT
X  		{$$=$1.terminal;}
X	| IF_ICMPGE
X  		{$$=$1.terminal;}
X	| IF_ICMPGT
X  		{$$=$1.terminal;}
X	| IF_ICMPLE
X  		{$$=$1.terminal;}
X	| IFEQ
X  		{$$=$1.terminal;}
X	| IFNE
X  		{$$=$1.terminal;}
X	| IFLT
X  		{$$=$1.terminal;}
X	| IFGE
X  		{$$=$1.terminal;}
X	| IFGT
X  		{$$=$1.terminal;}
X	| IFLE
X  		{$$=$1.terminal;}
X	| IFNONNULL
X  		{$$=$1.terminal;}
X	| IFNULL
X  		{$$=$1.terminal;}
X	| JSR
X  		{$$=$1.terminal;}
X	| JSR_W
X  		{$$=$1.terminal;}
X	;
X
Xlocalvar_arg_op
X	: ILOAD
X  		{$$=$1.terminal;}
X	| FLOAD
X  		{$$=$1.terminal;}
X	| ALOAD
X  		{$$=$1.terminal;}
X	| LLOAD
X  		{$$=$1.terminal;}
X	| DLOAD
X  		{$$=$1.terminal;}
X	| ISTORE
X  		{$$=$1.terminal;}
X	| FSTORE
X  		{$$=$1.terminal;}
X	| ASTORE
X  		{$$=$1.terminal;}
X	| LSTORE
X  		{$$=$1.terminal;}
X	| DSTORE
X  		{$$=$1.terminal;}
X	| RET
X  		{$$=$1.terminal;}
X	| LOAD
X  		{$$=$1.terminal;}
X	| STORE
X  		{$$=$1.terminal;}
X	;
X
Xlocalvar_arg: INTCONSTANT
X		{ $$ = $1;}
X 	| IDENTIFIER
X		{ $$ = GetLocalVar($1);}
X	;
X
Xlookuplist: INTCONSTANT ':' IDENTIFIER lookuplist
X		{ $$ = AddToLookupList($4,$1,$3); }
X	| 	{$$ = NULL;}
X	;
X
Xtablelist: IDENTIFIER tablelist
X		{ $$ = AddToTableList($2,$1); }
X	| 	{$$ = NULL;}
X	;
X
Xnewarraytype: 
X	BOOLEAN
X		{ $$ = 4;}
X 	| CHAR 
X		{ $$ = 5;}
X 	| FLOAT 
X		{ $$ = 6;}
X 	| DOUBLE 
X		{ $$ = 7;}
X 	| BYTE 
X		{ $$ = 8;}
X 	| SHORT 
X		{ $$ = 9;}
X 	| INT 
X		{ $$ = 10;}
X 	| LONG 
X		{ $$ = 11;}
X	;
X
Xargument: IDENTIFIER 
X             {$$.type = IDENTIFIER;
X              $$.stringval = $1;
X             }
X	| INTCONSTANT 
X             {$$.type = INTCONSTANT;
X              $$.intval = $1;
X             }
X	| LONGCONSTANT 
X             {$$.type = LONGCONSTANT;
X              $$.longval = $1;
X             }
X	| STRING_LITERAL 
X             {$$.type = STRING_LITERAL;
X              $$.stringval = $1;
X             }
X        | FLOATCONSTANT
X             {$$.type = FLOATCONSTANT;
X              $$.floatval = $1;
X	      /*message("got a float constant.");*/
X             }
X        | DOUBLECONSTANT
X             {$$.type = DOUBLECONSTANT;
X              $$.doubleval = $1;
X	      /*message("got a double constant.");*/
X             }
X	;
X
Xexceptiontable:
X	EXCEPTIONS '{' exceptionslist '}'
X		{ break; }
X 	| {break;}
X	;
X
Xexceptionslist: exceptionslist IDENTIFIER IDENTIFIER IDENTIFIER classname 
X		{ AddToExceptionList($2,$3,$4,$5); }
X        | exceptionslist IDENTIFIER IDENTIFIER IDENTIFIER INTCONSTANT 
X		{ 
X		  if ($5 != 0) oops("Must have a class name or 0 here.");
X	          AddToExceptionList($2,$3,$4,NULL); 
X		}
X	| 	{break;}
X	;
X
Xlinenumbertable:
X	LINENUMBERTABLE '{' linenumberlist '}'
X		{ break; }
X 	| {break;}
X	;
X
Xlinenumberlist: linenumberlist IDENTIFIER INTCONSTANT 
X		{ AddToLineNumberList($2,$3); }
X	| 	{break;}
X	;
X
Xlocalvariabletable:
X	LOCALVARIABLETABLE '{' localvariablelist '}'
X		{ break; }
X 	| {break;}
X	;
X
Xlocalvariablelist: localvariablelist IDENTIFIER IDENTIFIER type IDENTIFIER 
X	           INTCONSTANT 
X		{ AddToUserLocalVarList($2,$3,$4,$5,$6); }
X	| 	{break;}
X	;
X
Xsourcefilename:
X	  SOURCEFILE STRING_LITERAL
X		{ SetSourceFile($2); }
X	| 	{break;}
X	;
X%%
END_OF_FILE
if test 24656 -ne `wc -c <'javaa.y'`; then
    echo shar: \"'javaa.y'\" unpacked with wrong size!
fi
# end of 'javaa.y'
fi
if test -f 'README' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'README'\"
else
echo shar: Extracting \"'README'\" \(567 characters\)
sed "s/^X//" >'README' <<'END_OF_FILE'
XJava(tm) Bytecode Assembler
X
XThis program is copyright Jason Hunt and Washington University, 1996.
X
XThis program has been tested only on SunOS 5.4.
X
XType make to create the executable, javaa.
X
XInput is on standard input only.  So to assemble the Hello World test
Xapplication, type:
X
Xjavaa < HelloWorldApp.jasm
X
XWhich will create HelloWorldApp.class, which can be run using JDK.
X
XThe documentation (in HTML format) is included.  Begin with index.html
X
XBugs and comments should be directed to Jason Hunt, djh4@cs.wustl.edu
X
X
X* Java is a trademark of Sun Microsystems.
X
END_OF_FILE
if test 567 -ne `wc -c <'README'`; then
    echo shar: \"'README'\" unpacked with wrong size!
fi
# end of 'README'
fi
if test -f 'HelloWorldApp.jasm' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'HelloWorldApp.jasm'\"
else
echo shar: Extracting \"'HelloWorldApp.jasm'\" \(260 characters\)
sed "s/^X//" >'HelloWorldApp.jasm' <<'END_OF_FILE'
Xclass HelloWorldApp
X{ 
X  method public static void main (java.lang.String[])
X  max_stack 2
X  { 
X    getstatic java.io.PrintStream java.lang.System.out
X    ldc "Hello World!"
X    invokevirtual void java.io.PrintStream.println(java.lang.String)
X    return
X  }
X}
END_OF_FILE
if test 260 -ne `wc -c <'HelloWorldApp.jasm'`; then
    echo shar: \"'HelloWorldApp.jasm'\" unpacked with wrong size!
fi
# end of 'HelloWorldApp.jasm'
fi
if test -f 'HelloWorldApp2.jasm' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'HelloWorldApp2.jasm'\"
else
echo shar: Extracting \"'HelloWorldApp2.jasm'\" \(4306 characters\)
sed "s/^X//" >'HelloWorldApp2.jasm' <<'END_OF_FILE'
XHelloWorldApp2
Xextends java.lang.Object
X{ 
X  Field java.lang.String tester
X  Field int myintfield = 125 
X  Method public static void main (java.lang.String[])
X  max_stack 5
X  max_locals 12
X  {
X    /*Sample accessing a class's own field (by creating an instance of it)*/
X    new HelloWorldApp 	/* create new instance of this class */
X    dup 		/*duplicate the value on the stack (i.e. the 
X			  instance of the class)*/
X    invokenonvirtual void HelloWorldApp.<init>()
X    HelloWorldApp myvar /* this is a variable declaration */
X    store myvar 	/* store the instance of the class in myvar */
X    load myvar
X    ldc "Hello Country!"
X    putfield java.lang.String tester /* store "Hello Country!" in tester */
X    getstatic java.io.PrintStream java.lang.System.out
X    load myvar 		/* This is here, cuz to get field, must have reference
X		   	   to the class instance on stack */
X    getfield java.lang.String tester
X    invokevirtual void java.io.PrintStream.println(java.lang.String)
X
X    
X    ldc 575
X    lookupswitch default nowhere 
X    {
X	1       : mylabel
X	5       : mysecondlabel
X	3356    : mythirdlabel
X    }
X    
Xnowhere:
X    ldc 99
X    tableswitch 85 to 87 default here 
X    {
X        mylabel
X	mysecondlabel
X	mythirdlabel
X    }
X
X    /* sample use of long (or other constants) */
Xhere:
X    long mylong
X    ldc 558359L		/* should be ldc2_w, but assembler figures that out */ 
X    store mylong	/* assembler generates lstore command */
X    getstatic java.io.PrintStream java.lang.System.out
X    load mylong
X    invokevirtual void java.io.PrintStream.println(long)
X
Xmylabel:
X    /* sample use of double */
X    double mydouble
X    ldc 3.14159267		/* should be ldc2_w, but assembler figures that out */ 
X    dstore 10	/* can use slot numbers or local var names here */
X    getstatic java.io.PrintStream java.lang.System.out
X    dload 10
X    invokevirtual void java.io.PrintStream.println(double)
X
Xmysecondlabel:
X    /*sample use of array*/
X    int[] myintarray 	/*variable declaration*/
X    bipush 5 		/*number of elements in the array*/
X    newarray int
X    store myintarray
X    load myintarray
X    bipush 1 		/*index to store the upcoming value in*/
X    bipush 49 		/*value to store in the array*/
X    iastore
X    getstatic java.io.PrintStream java.lang.System.out
X    load myintarray
X    bipush 1
X    iaload 		/*gets the value from array and leaves it on the stack*/
X    invokevirtual void java.io.PrintStream.println(int)
X   
Xmythirdlabel: 
X    /*sample use of array of references*/
X    HelloWorldApp[]  myrefarray 	/*variable declaration*/
X    bipush 5 		/*number of elements in the array*/
X    anewarray HelloWorldApp
X    store myrefarray
X    load myrefarray
X    bipush 0 		/*index to store the upcoming value in*/
X    load myvar		/* this is a pointer to an instance of this class,
X			   it's the value to store in the array */
X    aastore
X    load myrefarray
X    bipush 0
X    aaload 		/*gets the value from array and leaves it on the stack*/
X    ldc "Hello Country!"
X    putfield java.lang.String tester /* store "Hello Country!" in tester */
X    getstatic java.io.PrintStream java.lang.System.out
X    load myrefarray
X    bipush 0
X    aaload 		/*gets the value from array and leaves it on the stack*/
X    getfield java.lang.String tester
X    invokevirtual void java.io.PrintStream.println(java.lang.String)
X    /* Generic Hello World */
X    getstatic java.io.PrintStream java.lang.System.out
X    ldc "Hello World, Everyone!"
X    invokevirtual void java.io.PrintStream.println(java.lang.String)
Xmyfourthlabel:    return
Xmyfifthlabel: 
X    pop
X    return
X   
X    linenumbertable   /*sample only! doesn't correspond to specific file!*/
X    {
X      mysecondlabel 10
X      mythirdlabel  14
X      myfourthlabel 22
X    }
X    localvariabletable /*sample only! doesn't correspond to specific vars!*/
X    {
X      mysecondlabel mythirdlabel int myint 3
X      mylabel myfifthlabel byte mybyte 2
X    } 
X  }
X
X  /* the init class (i.e. constructor) */
X  Method void <init> ()
X  max_stack 2
X  max_locals 1
X  {
X    getstatic java.io.PrintStream java.lang.System.out
X    ldc "In the init method!"
X    invokevirtual void java.io.PrintStream.println(java.lang.String)
X    aload_0 /* this is the instance of the class "passed" in as variable 0 */ 
X    invokenonvirtual void java.lang.Object.<init>()
X    return
X  }
X}
END_OF_FILE
if test 4306 -ne `wc -c <'HelloWorldApp2.jasm'`; then
    echo shar: \"'HelloWorldApp2.jasm'\" unpacked with wrong size!
fi
# end of 'HelloWorldApp2.jasm'
fi
if test -f 'index.html' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'index.html'\"
else
echo shar: Extracting \"'index.html'\" \(1317 characters\)
sed "s/^X//" >'index.html' <<'END_OF_FILE'
X<html>
X<head>
X<title>Java(tm) Bytecode Assembler</title>
X</head>
X<body>
X<center>
X<h1>Java(tm) Bytecode Assembler</h1>
X<h3>The result of an independent study by Washington University undergraduate
XJason Hunt, under the direction of Dr. Ron Cytron, Dept. of Computer Science
X</h3>
X</center>
X<h2>Overview</h2>
XThe Java Bytecode Assembler (or simply Assembler) is a program that converts
Xcode written in "Java Assembly Language" into a valid Java .class file.  This
Xprovides developers a simple means of either programming directly in Java 
Xassembly language or making Java bytecodes the target of a compiler.  It 
Xeliminates the need for developers to generate the constant pool, keep track 
Xof code lengths, calculate offsets, and perform other mundane tasks.
X<p>
X<ul>
X<li>The <a href="jasm.html">Java Assembly Language</a> is similar to the 
Xoutput of Sun's <b>javap</b> utility, but also uses Java-like syntax 
Xto make it more readable.
X<li>The assembler offers a number of <a href="features.html">features</a>
Xthat ease programming in Java bytecodes.
X<li><a href="examples.html">Examples</a> provide the best way to learn the
XJava assembly language.
X<li>The assembler can be <a href="download.html">downloaded</a> for 
Xeducational purposes.
X</ul>
X<p>
X<i>Java is a trademark of Sun Microsystems.</i>
X</body>
X</html> 
END_OF_FILE
if test 1317 -ne `wc -c <'index.html'`; then
    echo shar: \"'index.html'\" unpacked with wrong size!
fi
chmod +x 'index.html'
# end of 'index.html'
fi
if test -f 'jasm.html' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'jasm.html'\"
else
echo shar: Extracting \"'jasm.html'\" \(13740 characters\)
sed "s/^X//" >'jasm.html' <<'END_OF_FILE'
X<html>
X<body>
X<title>Java Assembly Language</title>
X<center>
X<h1>Java Assembly Language</h1>
X</center>
X<p>
XThere is currently no standard syntax for representing Java bytecodes in
Xhuman-readable form.  Sun's <b>javap</b> utility provides one 
Xrepresentation, but its output is complicated by code offsets and constant
Xpool index numbers.  Thus, a simpler syntax of coding in Java bytecodes was 
Xcreated.
X<p>
X<i>Note: This is documentation on the syntax only.  To understand what the
Xoperands mean and their usage in programming, look at the
X<a href="http://java.sun.com/java.sun.com/newdocs.html#JVM">Java Virtual
XMachine Specification</a>.  Most of the documentation is beta, meaning some
Xof it is out-of-date.  Look for the book by Tim Lindholm and Frank Yellin
X(to be available sometime this summer by Addison-Wesley) for the latest
Xdocumentation.  Excerpts are available at the above link.</i> 
X<p>
X<a name="classfile"><h2>The Class File Format</h2>
X<p>
XEach Java Assembly file (usually suffixed by .jasm) should have the following
Xformat:
X<p>
X<pre>
X[abstract] [final] [public] [interface] class <i>classname</i> 
X[extends <i>superclassname</i>]
X[implements <i>interfacename</i> [<i>interfacename</i> [...] ] ]
X{
X  [<i><a href="#field_declarations">field_declarations</a></i>]
X  [<i><a href="#method_declarations">method_declarations</a></i>]
X  [sourcefile <i>sourcefilename</i>]
X}
X</pre>
X<ul>
X<li><i>classname</i> is a valid <a href="#classname">class name</a> for this
Xclass
X<li><i>superclassname</i> is a valid <a href="#classname">class name</a>
Xrepresenting the class that this class inherits from.  If <i>superclassname</i>
Xis missing, the default <b>java.lang.Object</b> superclass is used. 
X<li><i>interfacename</i> is a valid <a href="#classname">class name</a>
Xrepresenting an interface that this class implements. 
X<li><i>sourcefilename</i> is a quoted string literal of the name of the source
Xfile (if this assembly program is generated by a compiler).
X</ul>
X 
X<p>
X<a name="field_declarations"><h2>Field Declarations</h2>
X<p>
XThe declaration of the class's fields should have the following format:
X<pre>
Xfield [<i><a href="#access_specifier">access_specifier</a></i>] [static] [final] [transient] [volatile] <i>fieldname</i> [= <i>constantvalue</i>]
X</pre>
X<ul>
X<li><i>fieldname</i> is an identifier representing the name of the field.
X<li><i>constantvalue</i> is a <a href="#constant">constant</a> (appropriate 
Xto the type of the field) representing the constant value of this field.
X</ul>
X
X<p>
X<a name="method_declarations"><h2>Method Declarations</h2>
X<p>
XThe declaration of the class's methods should have the following format:
X<pre>
Xmethod [<i><a href="#access_specifier">access_specifier</a></i>] [static] [abstract] [final] [native] [synchronized] <i>returntype</i> <i>methodname</i> ( [<i>arg1</i> [, <i>arg2</i> [, ...] ] ] )
X[throws <i>exceptionname</i> [<i>exceptionname</i> [...] ] ]
Xmax_stack <i>value1</i>
X[max_locals <i>value2</i>]
X{
X  [<i><a href="#code">code</a></i>]
X  [<i><a href="#exceptiontable">exceptiontable</a></i>]
X  [<i><a href="#linenumbertable">linenumbertable</a></i>]
X  [<i><a href="#localvariabletable">localvariabletable</a></i>]
X}
X</pre>
X<ul>
X<li><i>returntype</i> is either <b>void</b> or a valid <a href="#type">type</a>.
X<li><i>methodname</i> is an identifier representing the method's name.
X<li><i>arg1</i>, <i>arg2</i>, ... are valid <a href="#type">types</a> followed
Xby an optional identifier representing the name of that local variable. 
X<li><i>exceptionname</i> is a valid <a href="#classname">class name</a> 
Xidentifying an exception that this method throws.
X<li><i>value1</i> is an integer <a href="#constant">constant</a> representing
Xthe maximum size of the stack in this method.
X<li><i>value2</i> is an integer <a href="#constant">constant</a> representing
Xthe maximum number of local variable slots needed for this method.  If 
Xmax_locals is not given, the assembler calculates max_locals based on local
Xvariable declarations.
X</ul>
X
X<p>
X<a name="access_specifier"><h2>Access Specifier</h2>
X<p>
XAn access specifer (used in <a href="#field_declarations">field declarations</a>
Xand <a href="#method_declarations">method declarations</a>) is one of the
Xfollowing:
X<dl>
X<dd> 
X<pre>
Xprivate
Xprivate protected
Xprotected
Xpublic 
X</pre>
X</dl>
X
X<p>
X<a name="code"><h2>Code</h2>
X<p>
XCode is one or more lines in one of the following formats:
X<pre>
X[<i>label</i>] <i><a href="#operation">operation</a></i>
X</pre>
Xor
X<pre>
X[<i>label</i>] <i>vartype</i> <i>localvarname</i>
X</pre>
X<ul>
X<li><i>label</i> is an identifier appended with a colon (':') and is used to
Xmark that position in the code.
X<li><i>vartype</i> is a valid <a href="#type">type</a> denoting the type of the
Xlocal variable.
X<li><i>localvarname</i> is an identifier representing the name of a local 
Xvariable.
X</ul>
X
X<p>
X<a name="operation"><h2>Operation</h2>
X<p>
XAn operation is in one of the following formats:
X<pre>
X<i><a href="#noargoperand">no_arg_operand</a></i>
X
X<i><a href="#constantargoperand">constant_arg_operand</a></i> <i>constantval</i>
X
X<i><a href="#fieldrefoperand">field_ref_operand</a></i> <i>fieldtype</i> <i>fieldname</i>
X
X<i><a href="#methodrefoperand">method_ref_operand</a></i> <i>returntype</i> <i>methodname</i> ( [<i>arg1</i> [,<i>arg2</i> [...]]] )
X
X<i><a href="#classrefoperand">class_ref_operand</a></i> <i>classname</i>
X
X<i><a href="#labeloperand">label_operand</a></i> <i>labelname</i>
X
X<i><a href="#localvaroperand">local_var_operand</a></i> <i>localvararg</i>
X
Xanewarray <i>anewarrayname</i>
X
Xiinc <i>localvararg</i> <i>incrementvalue</i>
X
Xlookupswitch 
Xdefault <i>defaultlabel</i>
X{
X  <i>value1</i> : <i>gotolabel1</i> 
X  <i>value2</i> : <i>gotolabel2</i>
X  ...
X}
X
Xmultianewarray <i>multianewarraytype</i> <i>dimensions</i>
X
Xnewarray <i>newarraytype</i>
X
Xtableswitch <i>beginval</i> to <i>endval</i>
Xdefault <i>defaultlabel</i>
X{
X  <i>gotolabel1</i>
X  <i>gotolabel2</i>
X  ...
X} 
X</pre>
X<ul>
X<li><i>constantval</i> is a valid <a href="#constant">constant</a>.
X<li><i>fieldtype</i> is a valid <a href="#type">type</a>.
X<li><i>fieldname</i> is a valid <a href="#fieldname">field name</a>.
X<li><i>returntype</i> is either <b>void</b> or a valid <a href="#type">type</a>.
X<li><i>methodname</i> is a valid <a href="#methodname">method name</a>.
X<li><i>arg1</i>, <i>arg2</i>, ... are valid <a href="#type">types</a>.
X<li><i>classname</i> is a valid <a href="#classname">class name</a>.
X<li><i>labelname</i>, <i>defaultlabel</i>, <i>gotolabel1</i>, <i>gotolabel2</i>
Xare identifiers corresponding to a label names.
X<li><i>localvararg</i> is either an integer representing a slot number or an
Xidentifier representing an already defined local variable.
X<li><i>incrementvalue</i>, <i>value1</i>, <i>value2</i>, <i>dimensions</i>, 
X<i>beginval</i>, <i>endval</i> are integer constants.
X<li><i>anewarraytype</i>, <i>multianewarraytype</i> are either valid 
X<a href="#classname">class names</a> or array declarations which are valid 
X<a href="#type">types</a> followed by one or more bracket pairs ("[]").
X<li><i>newarraytype</i> is one of the following: <b>boolean</b>, <b>char</b>,
X<b>float</b>, <b>double</b>, <b>byte</b>, <b>short</b>, <b>int</b>, <b>long</b>.
X</ul>
X
X<p>
X<a name="exceptiontable"><h2>Exception Table</h2>
X<p>
XAn exception table has the following format:
X<pre>
Xexceptions 
X{
X  <i>startpc1</i> <i>endpc1</i> <i>handlerpc1</i> <i>catchtype1</i>
X  <i>startpc2</i> <i>endpc2</i> <i>handlerpc2</i> <i>catchtype2</i>
X  ...
X}
X</pre>
X<ul>
X<li><i>startpc1</i>, <i>startpc2</i>, <i>endpc1</i>, <i>endpc2</i>, 
X<i>handlerpc1</i>, <i>handlerpc2</i> are identifiers corresponding to label
Xnames.
X<li><i>catchtype1</i>, <i>catchtype2</i> are either valid <a href="#classname">
Xclass names</a> or the integer 0.
X</ul>
X
X<p>
X<a name="linenumbertable"><h2>Line Number Table</h2>
X<p>
XA line number table has the following format:
X<pre>
Xlinenumbertable 
X{
X  <i>startpc1</i> <i>linenumber1</i>
X  <i>startpc2</i> <i>linenumber2</i>
X  ...
X}
X</pre>
X<ul>
X<li><i>startpc1</i>, <i>startpc2</i> are identifiers corresponding to label
Xnames.
X<li><i>linenumber1</i>, <i>linenumber2</i> are valid integers corresponding
Xto the line numbers in the source file.
X</ul>
X
X<p>
X<a name="localvariabletable"><h2>Local Variable Table</h2>
X<p>
XAn local variable table has the following format:
X<pre>
Xlocalvariabletable 
X{
X  <i>startpc1</i> <i>endpc1</i> <i>type1</i> <i>localvar1</i> <i>slotnum1</i>
X  <i>startpc2</i> <i>endpc2</i> <i>type2</i> <i>localvar2</i> <i>slotnum2</i>
X  ...
X}
X</pre>
X<ul>
X<li><i>startpc1</i>, <i>startpc2</i>, <i>endpc1</i>, <i>endpc2</i>, 
Xare identifiers corresponding to label names which represent the range
Xduring which the local variables will have a value.
X<li><i>type1</i>, <i>type2</i> are valid <a href="#type">types</a> denoting
Xthe types of the given local variables.
X<li><i>localvar1</i>, <i>localvar2</i> are identifiers representing the names
Xof the given local variables.
X<li><i>slotnum1</i>, <i>slotnum2</i> are integer constants representing the
Xslots of the local variables in the method's frame.
X</ul>
X
X<p>
X<a name="classname"><h2>Class Name</h2>
X<p>
XA class name has the following format:
X<pre>
X<i>part1</i>[.<i>part2</i>[.<i>part3</i>[...]]]
X</pre>
X<ul>
X<li><i>part1</i>, <i>part2</i>, ... are identifiers comprising the different
Xparts of the class name
X</ul>
X
X<p>
X<a name="fieldname"><h2>Field Name</h2>
X<p>
XA field name has the following format:
X<pre>
X[<i>aclass</i>].<i>afield</i>
X</pre>
X<ul>
X<li><i>aclass</i> is a valid <a href="#classname">class name</a>.  If 
X<i>aclass</i> is missing, the current class is used.
X<li><i>afield</i> is an identifier representing the field name.
X</ul>
X
X<p>
X<a name="methodname"><h2>Method Name</h2>
X<p>
XA method name has the following format:
X<pre>
X[<i>aclass</i>].<i>amethod</i>
X</pre>
X<ul>
X<li><i>aclass</i> is a valid <a href="#classname">class name</a>.  If 
X<i>aclass</i> is missing, the current class is used.
X<li><i>amethod</i> is an identifier representing the method name.
X</ul>
X
X<p>
X<a name="constant"><h2>Constant</h2>
X<p>
XConstants are defined much like in Java:
X<ul>
X<li>floating-point numbers are assumed to be double, unless suffixed by the
Xletter <b>F</b>, in which case they are considered to be of type float.
X<li>integers are assumed to be of type int unless suffixed by the letter
X<b>L</b>, in which case they are considered to be of type long.
X<li>strings should be enclosed in double-quotes.
X<li>characters should be enclosed in single-quotes.
X<li><b>0x</b> indicates that the following number is in hexadecimal format.
X</ul>
X
X<p>
X<a name="type"><h2>Type</h2>
X<p>
XA type has the following format:
X<pre>
X<i>basetype</i>[<i>bracketpair</i>[<i>bracketpair</i>[...]]]
X</pre>
X<ul>
X<li><i>basetype</i> is either a <a href="#classname">class name</a> or one of
Xthe following: <b>byte</b>, <b>char</b>, <b>double</b>, <b>float</b>,
X<b>int</b>, <b>long</b>, <b>short</b>, <b>boolean</b>.
X<li><i>bracketpair</i> is a matching pair of brackets ("[]") and denotes
Xarray dimensions.
X</ul>
X
X<p>
X<a name="noargoperand"><h2>No Arg Operand</h2>
XThe following are no arg operands:
X<p>
X<b>
Xaaload aastore aconst_null aload_0 aload_1 aload_2 aload_3 areturn 
Xarraylength astore_0 astore_1 astore_2 astore_3 athrow baload bastore caload
Xcastore d2f d2i d2l dadd daload dastore dcmpg dcmpl dconst_0 dconst_1
Xddiv dload_0 dload_1 dload_2 dload_3 dmul dneg drem dreturn dstore_0 
Xdstore_1 dstore_2 dstore_3 dsub dup dup_x1 dup_x2 dup2 dup2_x1 dup2_x2
Xf2d f2i f2l fadd faload fastore fcmpg fcmpl fconst_0 fconst_1 fdiv fload_0
Xfload_1 fload_2 fload_3 fmul fneg frem freturn fstore_0 fstore_1 fstore_2
Xfstore_3 fsub i2b i2c i2d i2f i2l i2s iadd iaload iand iastore iconst_0
Xiconst_1 iconst_2 iconst_3 iconst_4 iconst_5 iconst_m1 idiv iload_0 iload_1
Xiload_2 iload_3 imul ineg ior irem ireturn ishl ishr istore_0 istore_1
Xistore_2 istore_3 isub iushr ixor l2d l2f l2i ladd laload land lastore lcmp
Xlconst_0 lconst_1 ldiv lload_0 lload_1 lload_2 lload_3 lmul lneg lor lrem 
Xlreturn lshl lshr lstore_0 lstore_1 lstore_2 lstore_3 lsub lushr lxor
Xmonitorenter monitorexit nop pop pop2 return saload sastore swap wide 
X</b>
X<p>
X
X<p>
X<a name="constantargoperand"><h2>Constant Arg Operand</h2>
XThe following are constant arg operands:
X<p>
X<b>
Xbipush ldc ldc_w ldc2_w sipush
X</b>
X<p>
X
X<p>
X<a name="fieldrefoperand"><h2>Field Ref Operand</h2>
XThe following are field ref operands:
X<p>
X<b>
Xgetfield getstatic putfield putstatic
X</b>
X<p>
X
X<p>
X<a name="methodrefoperand"><h2>Method Ref Operand</h2>
XThe following are method ref operands:
X<p>
X<b>
Xinvokeinterface invokestatic invokenonvirtual invokevirtual
X</b>
X<p>
X
X<p>
X<a name="classrefoperand"><h2>Class Ref Operand</h2>
XThe following are class ref operands:
X<p>
X<b>
Xcheckcast instanceof new
X</b>
X<p>
X
X<p>
X<a name="labeloperand"><h2>Label Operand</h2>
XThe following are label operands:
X<p>
X<b>
Xgoto goto_w if_acmpeq if_acmpne if_icmpeq if_icmpne if_icmplt if_icmpge
Xif_icmpgt if_icmple ifeq ifne iflt ifge ifgt ifle ifnonnull ifnull jsr jsr_w
X</b>
X<p>
X
X<p>
X<a name="localvaroperand"><h2>Local Var Operand</h2>
XThe following are local var operands:
X<p>
X<b>
Xiload fload aload lload dload istore fstore astore lstore dstore ret
Xload store
X</b>
X<p>
X<ul>
X<li><b>load</b> and <b>store</b> are not standard Java bytecode operands.
XWhen followed by a local variable name, <b>load</b> and <b>store</b> are
Xchanged to the proper <i>x</i><b>load</b> or <i>x</i><b>store</b> command
Xbased on the type of the local variable.
X</ul>
X<p>
X
X<p>
X<h2>General Notes</h2>
X<ul>
X<li>Keywords are NOT case-sensitive.  However, labels and local variable names
Xare case-sensitive.
X<li>C-like comments (using /* and */) are accepted.
X<li>Keywords cannot be used as identifiers.
X<li>Only ascii (not unicode) is supported.
X</ul>
END_OF_FILE
if test 13740 -ne `wc -c <'jasm.html'`; then
    echo shar: \"'jasm.html'\" unpacked with wrong size!
fi
chmod +x 'jasm.html'
# end of 'jasm.html'
fi
if test -f 'features.html' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'features.html'\"
else
echo shar: Extracting \"'features.html'\" \(4299 characters\)
sed "s/^X//" >'features.html' <<'END_OF_FILE'
X<html>
X<head>
X<title>Java(tm) Bytecode Assembler Features</title>
X</head>
X<body>
X<center>
X<h1>Assembler Features</h1>
X</center>
XThe assembler offers a number of features to eliminate complexity in 
Xprogramming in Java bytecodes:
X<ul>
X<li><b>Automatic generation of binary .class file</b>
X<p>
XThe assembler reads in an ascii file written in a <a href="jasm.html">
XJava assembly language</a> and automatically tracks code lengths and attribute
Xcounts.  The assembler then generates a binary .class file that conforms to 
Xthe <a href="http://java.sun.com/java.sun.com/newdocs.html#JVM">Java Virtual
XMachine specification</a>.
X<p>
X<li><b>Automatic generation of constant pool</b>
X<p>
XThe Java assembly language provides no means of directly manipulating the 
Xconstant pool.  Rather, operands that take constant pool offsets as arguments
Xinstead take the contents of that offset as an argument.  
X<p>
XFor example, the <b>new</b> operand in the Java VM Spec takes an index into 
Xthe constant pool.  This index must point to a constant of type CONSTANT_Class,
Xwhich in turn points to a CONSTANT_Utf8 entry in the constant pool representing
Xthe class's name.  Using the assembly language, a programmer need not deal
Xwith the constant pool.  The instruction might simply state 
X<b>new java.lang.Object</b>.
X<p>
XSince the assembler automatically generates the constant pool, the programmer
Xalso doesn't need to wonder if he should use an operand like <b>ldc_w</b>
Xinstead of <b>ldc</b>.  The assembler automatically outputs the proper 
Xcommand based on the size of the generated constant pool index.
X<p>
X<a name="localvar"><li><b>Named Local Variables</b>
X<p>
XThe assembly language allows programmers to declare and use named local
Xvariables rather than simply slot numbers.  Although programmers still have
Xthe freedom to use slot numbers (and may wish to, in order to decrease the 
Xnumber of needed slots), named local variables offer a number of benefits.
X<p>
XWhen a local variable is declared (using syntax like <b>int MyInt</b> in the
Xcode portion of a method), the assembler automatically allocates a slot number
Xto that local variable.  When that local variable is then used in an operation
X(like <b>iload MyInt</b>), the assembler automatically substitutes the proper
Xslot number.  The assembler also tracks the count of <b>max_locals</b>
Xand enters that in the class file (unless the programmer provided a value for
X<b>max_locals</b>).  Named local variables also make an assembly program
Xmuch easier to read, understand, and debug.
X<p>
XThe programmer can also use the special operands of <b>load</b> and 
X<b>store</b>.  These commands are not in the Java VM Spec, but provide for
Xeasier programming.  Following the above example, if the programmer types
X<b>store MyInt</b> the assembler knows that MyInt has a type of int and will
Xautomatically generate the <b>istore</b> command with the proper slot number.
XThis might be particularly helpful in an assembly language class, since it
Xreduces the number of instructions a student needs to learn.
X<p>
X<li><b>Labels</b>
X<p>
XSince manually calculating byte offsets is disliked by most programmers, the
Xassembly language provides for use of labels to mark a position in a piece
Xof code. (In fact, the assembly language does not allow the programmer to 
Xmanually calculate offsets.)
X<p>
XA label declaration should be an identifier followed immediately be a colon 
X(with no space between the identifier and colon).  So one line of code might
Xread <b>MyLabel: istore MyInt</b>.  Later the programmer may include an
Xoperation such as <b>goto MyLabel</b>.  The assembler will automatically 
Xcalculate the offset to <b>MyLabel</b> and enter that into the code.  It will
Xalso change the <b>goto</b> operand to <b>goto_w</b> if the offset is large
Xenough.  Thus the programmer need not worry about calculating the offset
Xor changing the operation based on the size of the offset.
X<p>
XLabels are used anywhere a code offset is needed.  This include commands such
Xas <b>tableswitch</b> as well as the exceptions, line number, and local 
Xvariable tables which come at the end of a method.
X<p>
X</ul>
XThe assembler and its corresponding language provide a number of other features
X(such as Java-like method and class declarations) which are fairly 
Xstraight-forward.
END_OF_FILE
if test 4299 -ne `wc -c <'features.html'`; then
    echo shar: \"'features.html'\" unpacked with wrong size!
fi
chmod +x 'features.html'
# end of 'features.html'
fi
if test -f 'examples.html' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'examples.html'\"
else
echo shar: Extracting \"'examples.html'\" \(7607 characters\)
sed "s/^X//" >'examples.html' <<'END_OF_FILE'
X<html>
X<head>
X<title>Java Bytecode Assembler Examples</title>
X</head>
X<body>
X<center>
X<h1>Examples</h1>
X</center>
X<h2>Hello, World!</h2>
X<p>
XThe king of all sample programs is shown and analyzed below:
X<pre>
Xclass HelloWorldApp
X{ 
X  method public static void main (java.lang.String[])
X  max_stack 2
X  { 
X    getstatic java.io.PrintStream java.lang.System.out
X    ldc "Hello World!"
X    invokevirtual void java.io.PrintStream.println(java.lang.String)
X    return
X  }
X}
X</pre>
XThis program prints out "Hello World!".  Note that this is a stand-alone Java
Xapplication, NOT an applet.  A line-by-line analysis of the program is shown
Xbelow:
X<p>
X<pre>
Xclass HelloWorldApp
X</pre>
XThis is the declaration of the class HelloWorldApp.  Note that the assembler
Xgenerates a .class file based on the name of the class, not the name of the
X.jasm file.  The class declaration can also include modifiers such as
X<b>abstract</b>, <b>final</b>, <b>public</b>, and <b>interface</b>.  The class
Xdeclaration can be followed by the <b>extends</b> or <b>implements</b>
Xclauses.
X<p> 
X<pre>
X  method public static void main (java.lang.String[])
X</pre>
XThis is the declaration for the method named <b>main</b>.  Note the similarity
Xto the Java method declaration (except for the additional <b>method</b>
Xkeyword preceeding the declaration).  This method takes as an argument an
Xarray of references to the class <b>java.lang.String</b> (as do all <b>main</b>
Xmethods).
X<p>
X<pre>
X  max_stack 2
X</pre>
XThis line declares what the maximum size of the stack will be (in this case,
Xit is two).  This line can be followed by a <b>max_locals</b> line to denote
Xthe maximum number of local variables.  If there is no <b>max_locals</b> line,
Xthe assembler automatically calculates it based on the declarations of
X<a href="features.html#localvar">named local variables</a>.
X<p>
X<pre>
X    getstatic java.io.PrintStream java.lang.System.out
X</pre>
XThis line says to get a reference to the static field <b>out</b> from the 
X<b>java.lang.System</b> class and push it onto the stack.  The field's type 
Xis <b>java.io.PrintStream</b>.
X<p>
X<pre>
X    ldc "Hello World!"
X</pre>
XThis line pushes the string "Hello World!" onto the stack.  The <b>ldc</b>
Xcommand can take any <a href="jasm.html#constant">constant</a> as an
Xargument.
X<p>
X<pre>
X    invokevirtual void java.io.PrintStream.println(java.lang.String)
X</pre>
XThis line invokes the virtual method <b>println</b> found in the 
X<b>java.io.PrintStream</b> class.  The method takes a string as an argument
X(thus the <b>ldc "Hello World!"</b> command).  Also, since this is a virtual
Xmethod, a reference to an object must also be on the stack (thus the 
X<b>getstatic</b> command).
X<p>
XNote that since methods can be overloaded, the entire method declaration
X(or signature) is required.
X<p>
X<pre>
X    return
X</pre>
XThis command causes the method to return <b>void</b>.
X<p>
X<h2>A More Complex Example</h2>
XThe following example incorporates many of the more complex bytecode operands 
Xassembly language syntax.  The program is nonsensical, and simply provides
Xexamples of various features of the assembler.  The comments should provide
Xassistance in understanding the code.  The assembly code is shown below:
X<pre>
Xclass HelloWorldApp
Xextends java.lang.Object
X{ 
X  Field java.lang.String tester   /*field declaration*/
X  Field int myintfield = 125
X 
X  Method public static void main (java.lang.String[])
X  max_stack 5
X  max_locals 12
X  {
X    /*Sample accessing a class's own field (by creating an instance of it)*/
X    new HelloWorldApp 	/* create new instance of this class */
X    dup 		/*duplicate the value on the stack (i.e. the 
X			  instance of the class)*/
X    invokenonvirtual void HelloWorldApp.&lt;init&gt;()
X    HelloWorldApp myvar /* this is a variable declaration */
X    store myvar 	/* store the instance of the class in myvar */
X    load myvar
X    ldc "Hello Country!"
X    putfield java.lang.String tester /* store "Hello Country!" in tester */
X    getstatic java.io.PrintStream java.lang.System.out
X    load myvar 		/* This is here, cuz to get field, must have reference
X		   	   to the class instance on stack */
X    getfield java.lang.String tester
X    invokevirtual void java.io.PrintStream.println(java.lang.String)
X
X    
X    ldc 575
X    lookupswitch default nowhere 
X    {
X	1       : mylabel
X	5       : mysecondlabel
X	3356    : mythirdlabel
X    }
X    
Xnowhere:
X    ldc 99
X    tableswitch 85 to 87 default here 
X    {
X        mylabel
X	mysecondlabel
X	mythirdlabel
X    }
X
X    /* sample use of long (or other constants) */
Xhere:
X    long mylong
X    ldc 558359L		/* should be ldc2_w, but assembler figures that out */ 
X    store mylong	/* assembler generates lstore command */
X    getstatic java.io.PrintStream java.lang.System.out
X    load mylong
X    invokevirtual void java.io.PrintStream.println(long)
X
Xmylabel:
X    /* sample use of double */
X    double mydouble
X    ldc 3.14159267		/* should be ldc2_w, but assembler figures that out */ 
X    dstore 10	/* can use slot numbers or local var names here */
X    getstatic java.io.PrintStream java.lang.System.out
X    dload 10
X    invokevirtual void java.io.PrintStream.println(double)
X
Xmysecondlabel:
X    /*sample use of array*/
X    int[] myintarray 	/*variable declaration*/
X    bipush 5 		/*number of elements in the array*/
X    newarray int
X    store myintarray
X    load myintarray
X    bipush 1 		/*index to store the upcoming value in*/
X    bipush 49 		/*value to store in the array*/
X    iastore
X    getstatic java.io.PrintStream java.lang.System.out
X    load myintarray
X    bipush 1
X    iaload 		/*gets the value from array and leaves it on the stack*/
X    invokevirtual void java.io.PrintStream.println(int)
X   
Xmythirdlabel: 
X    /*sample use of array of references*/
X    HelloWorldApp[]  myrefarray 	/*variable declaration*/
X    bipush 5 		/*number of elements in the array*/
X    anewarray HelloWorldApp
X    store myrefarray
X    load myrefarray
X    bipush 0 		/*index to store the upcoming value in*/
X    load myvar		/* this is a pointer to an instance of this class,
X			   it's the value to store in the array */
X    aastore
X    load myrefarray
X    bipush 0
X    aaload 		/*gets the value from array and leaves it on the stack*/
X    ldc "Hello Country!"
X    putfield java.lang.String tester /* store "Hello Country!" in tester */
X    getstatic java.io.PrintStream java.lang.System.out
X    load myrefarray
X    bipush 0
X    aaload 		/*gets the value from array and leaves it on the stack*/
X    getfield java.lang.String tester
X    invokevirtual void java.io.PrintStream.println(java.lang.String)
X    /* Generic Hello World */
X    getstatic java.io.PrintStream java.lang.System.out
X    ldc "Hello World, Everyone!"
X    invokevirtual void java.io.PrintStream.println(java.lang.String)
Xmyfourthlabel:    return
Xmyfifthlabel: 
X    pop
X    return
X   
X    linenumbertable   /*sample only! doesn't correspond to specific file!*/
X    {
X      mysecondlabel 10
X      mythirdlabel  14
X      myfourthlabel 22
X    }
X    localvariabletable /*sample only! doesn't correspond to specific vars!*/
X    {
X      mysecondlabel mythirdlabel int myint 3
X      mylabel myfifthlabel byte mybyte 2
X    } 
X  }
X
X  /* the init class (i.e. constructor) */
X  Method void &lt;init&gt; ()
X  max_stack 2
X  max_locals 1
X  {
X    getstatic java.io.PrintStream java.lang.System.out
X    ldc "In the init method!"
X    invokevirtual void java.io.PrintStream.println(java.lang.String)
X    aload_0 /* this is the instance of the class "passed" in as variable 0 */ 
X    invokenonvirtual void java.lang.Object.&lt;init&gt;() /*call superclass init*/
X    return
X  }
X}
X</pre>
END_OF_FILE
if test 7607 -ne `wc -c <'examples.html'`; then
    echo shar: \"'examples.html'\" unpacked with wrong size!
fi
chmod +x 'examples.html'
# end of 'examples.html'
fi
echo shar: End of shell archive.
exit 0
