gt:           jj_la1[37] = jj_gen;
context: /* Generated By:JavaCC: Do not edit this line. XMLtoSQLScript.java */
  package com.inverse2.parser;
  
  import java.io.* ;
  import java.util.*;
  
  import com.inverse2.util.*;
  
  import org.jdom.Document;
  import org.jdom.Element;
  import org.jdom.Attribute;
  import org.jdom.input.SAXBuilder;
  import org.jdom.output.XMLOutputter;
  
  public class XMLtoSQLScript implements XMLtoSQLScriptConstants {
  
          public static String            ROOT_EL_NAME                    = "xmlToSQLMappingScript";
          public static String            STATEMENT_EL_NAME               = "statement";
          public static String            AUTOCOMMIT_ATT                  = "autocommit";
          public static String            STATEMENT_NUM_ATT               = "number";
          public static String            INSERT_FLAG_ATT                 = "insert";
          public static String            UPDATE_FLAG_ATT                 = "update";
          public static String            DELETE_FLAG_ATT                 = "delete";
          public static String            PROCEDURE_FLAG_ATT              = "procedure";
          public static String            LITERAL_FLAG_ATT                = "literal";
          public static String            SELECT_FLAG_ATT                 = "select";
          public static String            DESCRIPTION_FLAG_ATT    = "description";
          public static String            SINGLETON_SELECT_EL             = "singletonSelect";
          public static String            TARGET_NAME_EL                  = "targetName";
          public static String            MAPPING_EL                              = "mapping";
          public static String            XMLELEMENT_EL                   = "xmlElement";
          public static String            SQLNAME_EL                              = "sqlName";
          public static String            XPATH_ATT                               = "xpath";
          public static String            UID_ATT                                 = "uid";
          public static String            KEY_ATT                                 = "key";
          public static String            KEYNUMBER_ATT                   = "keyNumber";
          public static String            SQLTYPE_ATT                             = "sqlType";
          public static String            SQLFUNCTION_ATT                 = "sqlFunction";
          public static String            VOLATILE_ATT                    = "volatile";
          public static String        IFNULL_ATT                          = "ifnull";
          public static String            LITERALSQL_EL                   = "literalSQL";
          public static String            ONWARNING_EL                    = "onWarning";
          public static String            ONERROR_EL                              = "onError";
          public static String            ABORT_ATT                               = "abort";
          public static String            TRANSACTION_ATT                 = "transaction";
  
      private static Logger       log = Logger.getLogger(XMLtoSQLScript.class.getName());
  
      private Document                    document;
      private Element                             rootElement;
      private Attribute                   autocommitAtt;
      private Element                             statement;
      private int                                 statementNumber;
      private StringBuffer                selectStatement;
      private Element                             mapping;
      private Element                             xmlElement;
      private Element                             sqlName;
  
      public static void main(String args[]) throws ParseException {
  
          XMLtoSQLScript p = null ;
  
          if (args.length < 1) {
              log.info("Reading from stdin");
              p = new XMLtoSQLScript(System.in);
          }
          else {
              try {
                  p = new XMLtoSQLScript(new DataInputStream(new FileInputStream(args[0])));
              }
              catch (FileNotFoundException e) {
                  log.warn("File " + args[0] + " not found. Reading from stdin");
                  p = new XMLtoSQLScript(System.in);
              }
  
          } // else ends here
  
          if (args.length > 0) {
              log.info("Parsing file: " + args[0]);
          }
  
          p.parseUpdateScript();
  
          log.info("Parse Successfull");
  
          p.showXMLScript();
  
      } // end main()
  
          private void showXMLScript() {
  
                  try {
                  XMLOutputter xmlout = new XMLOutputter();
                  xmlout.setFormat(org.jdom.output.Format.getPrettyFormat());
                  xmlout.output(document, System.out);
                  }
                  catch (Exception ex) {
                          log.warn("There was an exception outputting the generated XML script: " + ex.toString());
                  }
  
          }       // end showXMLScript()
  
          private String stripQuotes(String in) {
  
                  int startIdx = 0;
                  int endIdx   = in.length();
  
                  if (in.startsWith("'") || in.startsWith("\"")) {
                          startIdx++;
                  }
  
                  if (in.endsWith("'") || in.endsWith("\"")) {
                          endIdx--;
                  }
  
                  return(in.substring(startIdx, endIdx));
  
          }       // end stripQuotes()
  
          public Element getParsedDocumentRoot() {
                  return(rootElement);
          }
  
    final public void parseUpdateScript() throws ParseException {
      /* Create the script XML document as we begin parsing... */
  
          document      = new Document();
          rootElement   = new Element(ROOT_EL_NAME);
          autocommitAtt = new Attribute(AUTOCOMMIT_ATT, "false");
  
          rootElement.setAttribute(autocommitAtt);
          document.setRootElement(rootElement);
          statementNumber = 0;
      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
      case K_AUTOCOMMIT:
        autocommit();
        break;
      default:
        jj_la1[0] = jj_gen;
        ;
      }
      label_1:
      while (true) {
        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
        case K_SELECT:
        case K_EXECUTE:
        case K_UPDATE:
        case K_TABLE:
        case K_TERMINATOR:
        case K_IFNULL:
        case K_TRUE:
        case K_FALSE:
        case K_ONERROR:
        case K_ONWARNING:
        case S_NUMBER:
        case S_IDENTIFIER:
        case S_CHAR_LITERAL:
        case S_QUOTED_IDENTIFIER:
        case S_SUBSTITUTE_STRING:
        case S_PUNCT:
        case S_SEMICOLON:
        case S_OPENBRACKET:
        case S_CLOSEBRACKET:
        case S_OPENBRACE:
        case S_CLOSEBRACE:
        case S_COMMA:
        case S_EQUALS:
        case S_XMLIDENTIFIER:
          ;
          break;
        default:
          jj_la1[1] = jj_gen;
          break label_1;
        }
        if (jj_2_1(3)) {
          singletonSelect();
        } else {
          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
          case K_EXECUTE:
            executeProcedure();
            break;
          case K_UPDATE:
            tableUpdate();
            break;
          default:
            jj_la1[2] = jj_gen;
            if (jj_2_2(3)) {
              literalSQL();
            } else {
              switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
              case K_ONERROR:
              case K_ONWARNING:
                onErrorOrWarning();
                break;
              default:
                jj_la1[3] = jj_gen;
                jj_consume_token(-1);
                throw new ParseException();
              }
            }
          }
        }
      }
    }
  
    final public void autocommit() throws ParseException {
   Token tok;
      jj_consume_token(K_AUTOCOMMIT);
      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
      case K_ON:
        jj_consume_token(K_ON);
                             autocommitAtt.setValue("true");
        break;
      case K_OFF:
        jj_consume_token(K_OFF);
                                                                        autocommitAtt.setValue("false");
        break;
      default:
        jj_la1[4] = jj_gen;
        jj_consume_token(-1);
        throw new ParseException();
      }
      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
      case S_SEMICOLON:
        jj_consume_token(S_SEMICOLON);
        break;
      default:
        jj_la1[5] = jj_gen;
        ;
      }
      jj_consume_token(K_TERMINATOR);
    }
  
    final public void singletonSelect() throws ParseException {
          Token tok;
          statement = new Element(STATEMENT_EL_NAME);
          statement.setAttribute(STATEMENT_NUM_ATT, new Integer(++statementNumber).toString());
          statement.setAttribute(SELECT_FLAG_ATT,   "true");
          rootElement.addContent(statement);
          selectStatement = new StringBuffer();
          selectStatement.append("select ");
      jj_consume_token(K_SELECT);
      label_2:
      while (true) {
        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
        case K_SELECT:
        case K_TABLE:
        case K_IFNULL:
        case K_TRUE:
        case K_FALSE:
        case S_NUMBER:
        case S_IDENTIFIER:
        case S_CHAR_LITERAL:
        case S_QUOTED_IDENTIFIER:
        case S_SUBSTITUTE_STRING:
        case S_PUNCT:
        case S_OPENBRACKET:
        case S_CLOSEBRACKET:
        case S_OPENBRACE:
        case S_CLOSEBRACE:
        case S_COMMA:
        case S_EQUALS:
        case S_XMLIDENTIFIER:
          ;
          break;
        default:
          jj_la1[6] = jj_gen;
          break label_2;
        }
        other();
      }
      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
      case S_SEMICOLON:
        jj_consume_token(S_SEMICOLON);
        break;
      default:
        jj_la1[7] = jj_gen;
        ;
      }
      jj_consume_token(K_TERMINATOR);
       Element singletonSelect = new Element(SINGLETON_SELECT_EL);
       singletonSelect.setText(selectStatement.toString());
       statement.addContent(singletonSelect);
    }
  
    final public void executeProcedure() throws ParseException {
          Token tok;
          statement = new Element(STATEMENT_EL_NAME);
          statement.setAttribute(STATEMENT_NUM_ATT,  new Integer(++statementNumber).toString());
          statement.setAttribute(PROCEDURE_FLAG_ATT, "true");
          rootElement.addContent(statement);
      jj_consume_token(K_EXECUTE);
      jj_consume_token(K_PROCEDURE);
      tok = jj_consume_token(S_IDENTIFIER);
          Element target = new Element(TARGET_NAME_EL);
          target.setText(tok.image);
          statement.addContent(target);
      jj_consume_token(S_OPENBRACKET);
      param();
      label_3:
      while (true) {
        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
        case S_COMMA:
          ;
          break;
        default:
          jj_la1[8] = jj_gen;
          break label_3;
        }
        jj_consume_token(S_COMMA);
        param();
      }
      jj_consume_token(S_CLOSEBRACKET);
      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
      case S_SEMICOLON:
        jj_consume_token(S_SEMICOLON);
        break;
      default:
        jj_la1[9] = jj_gen;
        ;
      }
      jj_consume_token(K_TERMINATOR);
    }
  
    final public void tableUpdate() throws ParseException {
          Token tok;
          statement = new Element(STATEMENT_EL_NAME);
          statement.setAttribute(STATEMENT_NUM_ATT, new Integer(++statementNumber).toString());
          rootElement.addContent(statement);
      jj_consume_token(K_UPDATE);
      jj_consume_token(K_TABLE);
      tok = jj_consume_token(S_IDENTIFIER);
          Element target = new Element(TARGET_NAME_EL);
          target.setText(tok.image);
          statement.addContent(target);
      jj_consume_token(K_USING);
      jj_consume_token(S_OPENBRACKET);
      label_4:
      while (true) {
        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
        case K_UPDATE:
        case K_INSERT:
        case K_DELETE:
        case S_COMMA:
          ;
          break;
        default:
          jj_la1[10] = jj_gen;
          break label_4;
        }
        if (jj_2_3(2)) {
          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
          case S_COMMA:
            jj_consume_token(S_COMMA);
            break;
          default:
            jj_la1[11] = jj_gen;
            ;
          }
          jj_consume_token(K_INSERT);
                  statement.setAttribute(INSERT_FLAG_ATT, "true");
        } else if (jj_2_4(2)) {
          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
          case S_COMMA:
            jj_consume_token(S_COMMA);
            break;
          default:
            jj_la1[12] = jj_gen;
            ;
          }
          jj_consume_token(K_UPDATE);
                  statement.setAttribute(UPDATE_FLAG_ATT, "true");
        } else if (jj_2_5(2)) {
          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
          case S_COMMA:
            jj_consume_token(S_COMMA);
            break;
          default:
            jj_la1[13] = jj_gen;
            ;
          }
          jj_consume_token(K_DELETE);
                  statement.setAttribute(DELETE_FLAG_ATT, "true");
        } else {
          jj_consume_token(-1);
          throw new ParseException();
        }
      }
      jj_consume_token(S_CLOSEBRACKET);
      jj_consume_token(K_SET);
      param();
      label_5:
      while (true) {
        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
        case S_COMMA:
          ;
          break;
        default:
          jj_la1[14] = jj_gen;
          break label_5;
        }
        jj_consume_token(S_COMMA);
        param();
      }
      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
      case S_SEMICOLON:
        jj_consume_token(S_SEMICOLON);
        break;
      default:
        jj_la1[15] = jj_gen;
        ;
      }
      jj_consume_token(K_TERMINATOR);
    }
  
    final public void literalSQL() throws ParseException {
          Token tok;
          statement = new Element(STATEMENT_EL_NAME);
          statement.setAttribute(STATEMENT_NUM_ATT, new Integer(++statementNumber).toString());
          statement.setAttribute(LITERAL_FLAG_ATT,   "true");
          rootElement.addContent(statement);
          selectStatement = new StringBuffer();
      if (jj_2_6(2)) {
        tok = jj_consume_token(K_SELECT);
                                  selectStatement.append(tok.image + " " );
      } else {
        ;
      }
      label_6:
      while (true) {
        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
        case K_SELECT:
        case K_TABLE:
        case K_IFNULL:
        case K_TRUE:
        case K_FALSE:
        case S_NUMBER:
        case S_IDENTIFIER:
        case S_CHAR_LITERAL:
        case S_QUOTED_IDENTIFIER:
        case S_SUBSTITUTE_STRING:
        case S_PUNCT:
        case S_OPENBRACKET:
        case S_CLOSEBRACKET:
        case S_OPENBRACE:
        case S_CLOSEBRACE:
        case S_COMMA:
        case S_EQUALS:
        case S_XMLIDENTIFIER:
          ;
          break;
        default:
          jj_la1[16] = jj_gen;
          break label_6;
        }
        other();
      }
      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
      case S_SEMICOLON:
        jj_consume_token(S_SEMICOLON);
        break;
      default:
        jj_la1[17] = jj_gen;
        ;
      }
      jj_consume_token(K_TERMINATOR);
       Element literalSQL = new Element(LITERALSQL_EL);
       literalSQL.setText(selectStatement.toString());
       statement.addContent(literalSQL);
    }
  
    final public void onErrorOrWarning() throws ParseException {
          Token   tok;
          Element onElement = null;
      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
      case K_ONERROR:
        jj_consume_token(K_ONERROR);
                   onElement = new Element(ONERROR_EL);
        break;
      case K_ONWARNING:
        jj_consume_token(K_ONWARNING);
                                                                         onElement = new Element(ONWARNING_EL);
        break;
      default:
        jj_la1[18] = jj_gen;
        jj_consume_token(-1);
        throw new ParseException();
      }
      jj_consume_token(S_OPENBRACKET);
      tok = jj_consume_token(S_CHAR_LITERAL);
                           onElement.setText(stripQuotes(tok.image));
      label_7:
      while (true) {
        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
        case K_ABORT:
        case K_ROLLBACK:
        case S_COMMA:
          ;
          break;
        default:
          jj_la1[19] = jj_gen;
          break label_7;
        }
        if (jj_2_7(2)) {
          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
          case S_COMMA:
            jj_consume_token(S_COMMA);
            break;
          default:
            jj_la1[20] = jj_gen;
            ;
          }
          jj_consume_token(K_ABORT);
                                 onElement.setAttribute(ABORT_ATT, "true");
        } else if (jj_2_8(2)) {
          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
          case S_COMMA:
            jj_consume_token(S_COMMA);
            break;
          default:
            jj_la1[21] = jj_gen;
            ;
          }
          jj_consume_token(K_ROLLBACK);
                                    onElement.setAttribute(TRANSACTION_ATT, "rollback");
        } else {
          jj_consume_token(-1);
          throw new ParseException();
        }
      }
      jj_consume_token(S_CLOSEBRACKET);
      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
      case S_SEMICOLON:
        jj_consume_token(S_SEMICOLON);
        break;
      default:
        jj_la1[22] = jj_gen;
        ;
      }
      jj_consume_token(K_TERMINATOR);
          statement.addContent(onElement);
    }
  
    final public void other() throws ParseException {
          Token tok;
      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
      case S_IDENTIFIER:
        tok = jj_consume_token(S_IDENTIFIER);
        break;
      case S_QUOTED_IDENTIFIER:
        tok = jj_consume_token(S_QUOTED_IDENTIFIER);
        break;
      case S_CHAR_LITERAL:
        tok = jj_consume_token(S_CHAR_LITERAL);
        break;
      case S_NUMBER:
        tok = jj_consume_token(S_NUMBER);
        break;
      case S_PUNCT:
        tok = jj_consume_token(S_PUNCT);
        break;
      case S_OPENBRACKET:
        tok = jj_consume_token(S_OPENBRACKET);
        break;
      case S_CLOSEBRACKET:
        tok = jj_consume_token(S_CLOSEBRACKET);
        break;
      case S_OPENBRACE:
        tok = jj_consume_token(S_OPENBRACE);
        break;
      case S_CLOSEBRACE:
        tok = jj_consume_token(S_CLOSEBRACE);
        break;
      case S_COMMA:
        tok = jj_consume_token(S_COMMA);
        break;
      case S_EQUALS:
        tok = jj_consume_token(S_EQUALS);
        break;
      case K_TRUE:
        tok = jj_consume_token(K_TRUE);
        break;
      case K_FALSE:
        tok = jj_consume_token(K_FALSE);
        break;
      case K_TABLE:
        tok = jj_consume_token(K_TABLE);
        break;
      case S_SUBSTITUTE_STRING:
        tok = jj_consume_token(S_SUBSTITUTE_STRING);
        break;
      case S_XMLIDENTIFIER:
        tok = jj_consume_token(S_XMLIDENTIFIER);
        break;
      case K_IFNULL:
        tok = jj_consume_token(K_IFNULL);
        break;
      case K_SELECT:
        tok = jj_consume_token(K_SELECT);
        break;
      default:
        jj_la1[23] = jj_gen;
        jj_consume_token(-1);
        throw new ParseException();
      }
          if (selectStatement != null) {
                  char c = tok.image.charAt(0);
                  /* this is a fucked up workaround for MySQL... */
                  /* "trim(x)" is different to "trim (x)"...     */
              if (Character.isLetterOrDigit(c)) {
                      selectStatement.append(" ");
                  }
                  selectStatement.append(tok.image);
          }
    }
  
    final public void param() throws ParseException {
          Token tok;
          mapping    = new Element(MAPPING_EL);
          xmlElement = new Element(XMLELEMENT_EL);
          sqlName    = new Element(SQLNAME_EL);
          mapping.addContent(xmlElement);
          mapping.addContent(sqlName);
          statement.addContent(mapping);
      tok = jj_consume_token(S_IDENTIFIER);
                          sqlName.setText(tok.image);
      jj_consume_token(S_EQUALS);
      paramConfig();
    }
  
    final public void paramConfig() throws ParseException {
   Token tok;
      jj_consume_token(S_OPENBRACE);
      label_8:
      while (true) {
        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
        case K_LITERAL:
        case K_XPATH:
        case K_UID:
        case K_AUTOINCREMENT:
        case K_KEY:
        case K_TYPE:
        case K_FUNCTION:
        case K_SQLFUNCTION:
        case K_VOLATILE:
        case K_IFNULL:
        case S_CHAR_LITERAL:
        case S_COMMA:
        case S_XMLIDENTIFIER:
          ;
          break;
        default:
          jj_la1[24] = jj_gen;
          break label_8;
        }
        if (jj_2_9(2)) {
          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
          case S_COMMA:
            jj_consume_token(S_COMMA);
            break;
          default:
            jj_la1[25] = jj_gen;
            ;
          }
          tok = jj_consume_token(S_CHAR_LITERAL);
                  xmlElement.setAttribute(XPATH_ATT, "false");
                  xmlElement.setText(stripQuotes(tok.image));
        } else if (jj_2_10(2)) {
          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
          case S_COMMA:
            jj_consume_token(S_COMMA);
            break;
          default:
            jj_la1[26] = jj_gen;
            ;
          }
          jj_consume_token(K_LITERAL);
          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
          case S_COLON:
            jj_consume_token(S_COLON);
            break;
          case S_EQUALS:
            jj_consume_token(S_EQUALS);
            break;
          default:
            jj_la1[27] = jj_gen;
            jj_consume_token(-1);
            throw new ParseException();
          }
          tok = jj_consume_token(S_CHAR_LITERAL);
                  xmlElement.setAttribute(XPATH_ATT, "false");
                  xmlElement.setText(stripQuotes(tok.image));
        } else if (jj_2_11(2)) {
          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
          case S_COMMA:
            jj_consume_token(S_COMMA);
            break;
          default:
            jj_la1[28] = jj_gen;
            ;
          }
          tok = jj_consume_token(S_XMLIDENTIFIER);
                  xmlElement.setAttribute(XPATH_ATT, "true");
                  /* Replace "." with "/" and add starting "/" if necessary... */
                  tok.image = tok.image.replaceAll("\\.", "/");
                  if (tok.image.startsWith("/") == false) {
                          tok.image = "/" + tok.image;
                  }
                  xmlElement.setText(stripQuotes(tok.image));
        } else if (jj_2_12(2)) {
          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
          case S_COMMA:
            jj_consume_token(S_COMMA);
            break;
          default:
            jj_la1[29] = jj_gen;
            ;
          }
          jj_consume_token(K_XPATH);
          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
          case S_COLON:
            jj_consume_token(S_COLON);
            break;
          case S_EQUALS:
            jj_consume_token(S_EQUALS);
            break;
          default:
            jj_la1[30] = jj_gen;
            jj_consume_token(-1);
            throw new ParseException();
          }
          tok = jj_consume_token(S_CHAR_LITERAL);
                  xmlElement.setAttribute(XPATH_ATT, "true");
                  xmlElement.setText(stripQuotes(tok.image));
        } else if (jj_2_13(2)) {
          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
          case S_COMMA:
            jj_consume_token(S_COMMA);
            break;
          default:
            jj_la1[31] = jj_gen;
            ;
          }
          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
          case K_UID:
            jj_consume_token(K_UID);
            break;
          case K_AUTOINCREMENT:
            jj_consume_token(K_AUTOINCREMENT);
            break;
          default:
            jj_la1[32] = jj_gen;
            jj_consume_token(-1);
            throw new ParseException();
          }
          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
          case S_COLON:
            jj_consume_token(S_COLON);
            break;
          case S_EQUALS:
            jj_consume_token(S_EQUALS);
            break;
          default:
            jj_la1[33] = jj_gen;
            jj_consume_token(-1);
            throw new ParseException();
          }
          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
          case K_TRUE:
            tok = jj_consume_token(K_TRUE);
            break;
          case K_FALSE:
            tok = jj_consume_token(K_FALSE);
            break;
          default:
            jj_la1[34] = jj_gen;
            jj_consume_token(-1);
            throw new ParseException();
          }
                          xmlElement.setAttribute(UID_ATT, tok.image);
        } else if (jj_2_14(2)) {
          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
          case S_COMMA:
            jj_consume_token(S_COMMA);
            break;
          default:
            jj_la1[35] = jj_gen;
            ;
          }
          jj_consume_token(K_VOLATILE);
          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
          case S_COLON:
            jj_consume_token(S_COLON);
            break;
          case S_EQUALS:
            jj_consume_token(S_EQUALS);
            break;
          default:
            jj_la1[36] = jj_gen;
            jj_consume_token(-1);
            throw new ParseException();
          }
          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
          case K_TRUE:
            tok = jj_consume_token(K_TRUE);
            break;
          case K_FALSE:
            tok = jj_consume_token(K_FALSE);
            break;
          default:
  