http://git-wip-us.apache.org/repos/asf/airavata-sandbox/blob/4231ac35/datacat/parsers/src/main/java/org/apache/airavata/datacat/parsers/gridchem/mp2to5c/MP2to5cLexer.java
----------------------------------------------------------------------
diff --git 
a/datacat/parsers/src/main/java/org/apache/airavata/datacat/parsers/gridchem/mp2to5c/MP2to5cLexer.java
 
b/datacat/parsers/src/main/java/org/apache/airavata/datacat/parsers/gridchem/mp2to5c/MP2to5cLexer.java
new file mode 100644
index 0000000..6352651
--- /dev/null
+++ 
b/datacat/parsers/src/main/java/org/apache/airavata/datacat/parsers/gridchem/mp2to5c/MP2to5cLexer.java
@@ -0,0 +1,682 @@
+/*
+*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*
+*/
+package org.apache.airavata.datacat.parsers.gridchem.mp2to5c;/* The following 
code was generated by JFlex 1.4.3 on 9/14/14 12:10 PM */
+
+/* MP2 to MP5 Keywords
+   Last Update: 12/31/2000 
+   http://www.gaussian.com/00000456.htm
+*/
+
+import java_cup.runtime.Symbol;
+import org.apache.airavata.datacat.parsers.gridchem.Settings;
+
+
+/**
+ * This class is a scanner generated by 
+ * <a href="http://www.jflex.de/";>JFlex</a> 1.4.3
+ * on 9/14/14 12:10 PM from the specification file
+ * <tt>mp2to5c.flex</tt>
+ */
+public class MP2to5cLexer implements java_cup.runtime.Scanner {
+
+  /** This character denotes the end of file */
+  public static final int YYEOF = -1;
+
+  /** initial size of the lookahead buffer */
+  private static final int ZZ_BUFFERSIZE = 16384;
+
+  /** lexical states */
+  public static final int IGNOREALL = 4;
+  public static final int FLOATVAL = 2;
+  public static final int YYINITIAL = 0;
+
+  /**
+   * ZZ_LEXSTATE[l] is the state in the DFA for the lexical state l
+   * ZZ_LEXSTATE[l+1] is the state in the DFA for the lexical state l
+   *                  at the beginning of a line
+   * l is of the form l = 2*k, k a non negative integer
+   */
+  private static final int ZZ_LEXSTATE[] = { 
+     0,  0,  1,  1,  2, 2
+  };
+
+  /** 
+   * Translates characters to character classes
+   */
+  private static final char [] ZZ_CMAP = {
+     0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 
+     0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 
+     0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  2,  0,  2,  3,  0, 
+     1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  0,  0,  0,  0,  0,  0, 
+     0,  0,  0, 19,  9,  4,  6,  0,  0, 17,  0,  0,  0,  0,  0,  0, 
+     0,  0,  0, 15,  0,  0, 23,  0,  0,  0,  0,  0,  0,  0,  0,  0, 
+     0,  0,  0, 13,  4, 12,  0, 21,  0, 10,  0,  0,  8, 16, 18, 20, 
+     0,  0, 11,  0, 14,  7,  0,  0,  0, 22,  0,  0,  5,  0,  0,  0, 
+     0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 
+     0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 
+     0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 
+     0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 
+     0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 
+     0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 
+     0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 
+     0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0
+  };
+
+  /** 
+   * Translates DFA states to action switch labels.
+   */
+  private static final int [] ZZ_ACTION = zzUnpackAction();
+
+  private static final String ZZ_ACTION_PACKED_0 =
+    "\3\0\10\1\7\0\1\2\14\0\1\2\7\0\1\3"+
+    "\1\4\7\0\1\5\1\6";
+
+  private static int [] zzUnpackAction() {
+    int [] result = new int[50];
+    int offset = 0;
+    offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result);
+    return result;
+  }
+
+  private static int zzUnpackAction(String packed, int offset, int [] result) {
+    int i = 0;       /* index in packed string  */
+    int j = offset;  /* index in unpacked array */
+    int l = packed.length();
+    while (i < l) {
+      int count = packed.charAt(i++);
+      int value = packed.charAt(i++);
+      do result[j++] = value; while (--count > 0);
+    }
+    return j;
+  }
+
+
+  /** 
+   * Translates a state to a row index in the transition table
+   */
+  private static final int [] ZZ_ROWMAP = zzUnpackRowMap();
+
+  private static final String ZZ_ROWMAP_PACKED_0 =
+    "\0\0\0\30\0\60\0\110\0\140\0\170\0\220\0\250"+
+    "\0\300\0\330\0\360\0\u0108\0\u0120\0\u0138\0\u0150\0\u0168"+
+    "\0\u0180\0\330\0\u0198\0\u01b0\0\u01c8\0\u01e0\0\u01f8\0\u0210"+
+    "\0\u0228\0\u0240\0\u0258\0\u0270\0\u0288\0\u02a0\0\u02b8\0\u02d0"+
+    "\0\u02d0\0\u02e8\0\u0300\0\u0318\0\u0330\0\u0348\0\u0360\0\110"+
+    "\0\110\0\u0378\0\u0390\0\u03a8\0\u03c0\0\u03d8\0\u03f0\0\u0408"+
+    "\0\110\0\110";
+
+  private static int [] zzUnpackRowMap() {
+    int [] result = new int[50];
+    int offset = 0;
+    offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result);
+    return result;
+  }
+
+  private static int zzUnpackRowMap(String packed, int offset, int [] result) {
+    int i = 0;  /* index in packed string  */
+    int j = offset;  /* index in unpacked array */
+    int l = packed.length();
+    while (i < l) {
+      int high = packed.charAt(i++) << 16;
+      result[j++] = high | packed.charAt(i++);
+    }
+    return j;
+  }
+
+  /** 
+   * The transition table of the DFA
+   */
+  private static final int [] ZZ_TRANS = zzUnpackTrans();
+
+  private static final String ZZ_TRANS_PACKED_0 =
+    "\6\4\1\5\2\4\1\6\5\4\1\7\1\4\1\10"+
+    "\5\4\1\11\1\4\1\12\1\13\2\4\1\13\52\4"+
+    "\37\0\1\14\32\0\1\15\31\0\1\16\1\0\1\17"+
+    "\33\0\1\20\21\0\1\21\14\0\1\22\1\0\1\23"+
+    "\25\0\1\22\36\0\1\24\32\0\1\25\34\0\1\26"+
+    "\21\0\1\27\40\0\1\30\17\0\1\31\15\0\1\23"+
+    "\2\0\2\32\3\0\1\32\2\0\1\32\23\0\1\33"+
+    "\33\0\1\34\25\0\1\33\37\0\1\35\31\0\1\36"+
+    "\31\0\1\37\2\0\1\40\1\41\2\0\1\41\33\0"+
+    "\1\42\33\0\1\43\37\0\1\44\15\0\1\45\33\0"+
+    "\1\46\11\0\1\40\40\0\1\47\33\0\1\50\37\0"+
+    "\1\51\15\0\1\50\31\0\1\52\24\0\1\53\26\0"+
+    "\1\54\31\0\1\55\35\0\1\56\22\0\1\57\37\0"+
+    "\1\60\20\0\1\61\37\0\1\62\1\0";
+
+  private static int [] zzUnpackTrans() {
+    int [] result = new int[1056];
+    int offset = 0;
+    offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result);
+    return result;
+  }
+
+  private static int zzUnpackTrans(String packed, int offset, int [] result) {
+    int i = 0;       /* index in packed string  */
+    int j = offset;  /* index in unpacked array */
+    int l = packed.length();
+    while (i < l) {
+      int count = packed.charAt(i++);
+      int value = packed.charAt(i++);
+      value--;
+      do result[j++] = value; while (--count > 0);
+    }
+    return j;
+  }
+
+
+  /* error codes */
+  private static final int ZZ_UNKNOWN_ERROR = 0;
+  private static final int ZZ_NO_MATCH = 1;
+  private static final int ZZ_PUSHBACK_2BIG = 2;
+
+  /* error messages for the codes above */
+  private static final String ZZ_ERROR_MSG[] = {
+    "Unkown internal scanner error",
+    "Error: could not match input",
+    "Error: pushback value was too large"
+  };
+
+  /**
+   * ZZ_ATTRIBUTE[aState] contains the attributes of state <code>aState</code>
+   */
+  private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute();
+
+  private static final String ZZ_ATTRIBUTE_PACKED_0 =
+    "\3\0\1\11\7\1\7\0\1\1\14\0\1\1\7\0"+
+    "\2\11\7\0\2\11";
+
+  private static int [] zzUnpackAttribute() {
+    int [] result = new int[50];
+    int offset = 0;
+    offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result);
+    return result;
+  }
+
+  private static int zzUnpackAttribute(String packed, int offset, int [] 
result) {
+    int i = 0;       /* index in packed string  */
+    int j = offset;  /* index in unpacked array */
+    int l = packed.length();
+    while (i < l) {
+      int count = packed.charAt(i++);
+      int value = packed.charAt(i++);
+      do result[j++] = value; while (--count > 0);
+    }
+    return j;
+  }
+
+  /** the input device */
+  private java.io.Reader zzReader;
+
+  /** the current state of the DFA */
+  private int zzState;
+
+  /** the current lexical state */
+  private int zzLexicalState = YYINITIAL;
+
+  /** this buffer contains the current text to be matched and is
+      the source of the yytext() string */
+  private char zzBuffer[] = new char[ZZ_BUFFERSIZE];
+
+  /** the textposition at the last accepting state */
+  private int zzMarkedPos;
+
+  /** the current text position in the buffer */
+  private int zzCurrentPos;
+
+  /** startRead marks the beginning of the yytext() string in the buffer */
+  private int zzStartRead;
+
+  /** endRead marks the last character in the buffer, that has been read
+      from input */
+  private int zzEndRead;
+
+  /** number of newlines encountered up to the start of the matched text */
+  private int yyline;
+
+  /** the number of characters up to the start of the matched text */
+  private int yychar;
+
+  /**
+   * the number of characters from the last newline up to the start of the 
+   * matched text
+   */
+  private int yycolumn;
+
+  /** 
+   * zzAtBOL == true <=> the scanner is currently at the beginning of a line
+   */
+  private boolean zzAtBOL = true;
+
+  /** zzAtEOF == true <=> the scanner is at the EOF */
+  private boolean zzAtEOF;
+
+  /** denotes if the user-EOF-code has already been executed */
+  private boolean zzEOFDone;
+
+  /* user code: */
+  public static boolean DEBUG = false;
+
+
+  /**
+   * Creates a new scanner
+   * There is also a java.io.InputStream version of this constructor.
+   *
+   * @param   in  the java.io.Reader to read input from.
+   */
+  public MP2to5cLexer(java.io.Reader in) {
+    this.zzReader = in;
+  }
+
+  /**
+   * Creates a new scanner.
+   * There is also java.io.Reader version of this constructor.
+   *
+   * @param   in  the java.io.Inputstream to read input from.
+   */
+  public MP2to5cLexer(java.io.InputStream in) {
+    this(new java.io.InputStreamReader(in));
+  }
+
+
+  /**
+   * Refills the input buffer.
+   *
+   * @return      <code>false</code>, iff there was new input.
+   * 
+   * @exception   java.io.IOException  if any I/O-Error occurs
+   */
+  private boolean zzRefill() throws java.io.IOException {
+
+    /* first: make room (if you can) */
+    if (zzStartRead > 0) {
+      System.arraycopy(zzBuffer, zzStartRead,
+                       zzBuffer, 0,
+                       zzEndRead-zzStartRead);
+
+      /* translate stored positions */
+      zzEndRead-= zzStartRead;
+      zzCurrentPos-= zzStartRead;
+      zzMarkedPos-= zzStartRead;
+      zzStartRead = 0;
+    }
+
+    /* is the buffer big enough? */
+    if (zzCurrentPos >= zzBuffer.length) {
+      /* if not: blow it up */
+      char newBuffer[] = new char[zzCurrentPos*2];
+      System.arraycopy(zzBuffer, 0, newBuffer, 0, zzBuffer.length);
+      zzBuffer = newBuffer;
+    }
+
+    /* finally: fill the buffer with new input */
+    int numRead = zzReader.read(zzBuffer, zzEndRead,
+                                            zzBuffer.length-zzEndRead);
+
+    if (numRead > 0) {
+      zzEndRead+= numRead;
+      return false;
+    }
+    // unlikely but not impossible: read 0 characters, but not at end of 
stream    
+    if (numRead == 0) {
+      int c = zzReader.read();
+      if (c == -1) {
+        return true;
+      } else {
+        zzBuffer[zzEndRead++] = (char) c;
+        return false;
+      }     
+    }
+
+       // numRead < 0
+    return true;
+  }
+
+    
+  /**
+   * Closes the input stream.
+   */
+  public final void yyclose() throws java.io.IOException {
+    zzAtEOF = true;            /* indicate end of file */
+    zzEndRead = zzStartRead;  /* invalidate buffer    */
+
+    if (zzReader != null)
+      zzReader.close();
+  }
+
+
+  /**
+   * Resets the scanner to read from a new input stream.
+   * Does not close the old reader.
+   *
+   * All internal variables are reset, the old input stream 
+   * <b>cannot</b> be reused (internal buffer is discarded and lost).
+   * Lexical state is set to <tt>ZZ_INITIAL</tt>.
+   *
+   * @param reader   the new input stream 
+   */
+  public final void yyreset(java.io.Reader reader) {
+    zzReader = reader;
+    zzAtBOL  = true;
+    zzAtEOF  = false;
+    zzEOFDone = false;
+    zzEndRead = zzStartRead = 0;
+    zzCurrentPos = zzMarkedPos = 0;
+    yyline = yychar = yycolumn = 0;
+    zzLexicalState = YYINITIAL;
+  }
+
+
+  /**
+   * Returns the current lexical state.
+   */
+  public final int yystate() {
+    return zzLexicalState;
+  }
+
+
+  /**
+   * Enters a new lexical state
+   *
+   * @param newState the new lexical state
+   */
+  public final void yybegin(int newState) {
+    zzLexicalState = newState;
+  }
+
+
+  /**
+   * Returns the text matched by the current regular expression.
+   */
+  public final String yytext() {
+    return new String( zzBuffer, zzStartRead, zzMarkedPos-zzStartRead );
+  }
+
+
+  /**
+   * Returns the character at position <tt>pos</tt> from the 
+   * matched text. 
+   * 
+   * It is equivalent to yytext().charAt(pos), but faster
+   *
+   * @param pos the position of the character to fetch. 
+   *            A value from 0 to yylength()-1.
+   *
+   * @return the character at position pos
+   */
+  public final char yycharat(int pos) {
+    return zzBuffer[zzStartRead+pos];
+  }
+
+
+  /**
+   * Returns the length of the matched text region.
+   */
+  public final int yylength() {
+    return zzMarkedPos-zzStartRead;
+  }
+
+
+  /**
+   * Reports an error that occured while scanning.
+   *
+   * In a wellformed scanner (no or only correct usage of 
+   * yypushback(int) and a match-all fallback rule) this method 
+   * will only be called with things that "Can't Possibly Happen".
+   * If this method is called, something is seriously wrong
+   * (e.g. a JFlex bug producing a faulty scanner etc.).
+   *
+   * Usual syntax/scanner level error handling should be done
+   * in error fallback rules.
+   *
+   * @param   errorCode  the code of the errormessage to display
+   */
+  private void zzScanError(int errorCode) {
+    String message;
+    try {
+      message = ZZ_ERROR_MSG[errorCode];
+    }
+    catch (ArrayIndexOutOfBoundsException e) {
+      message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR];
+    }
+
+    throw new Error(message);
+  } 
+
+
+  /**
+   * Pushes the specified amount of characters back into the input stream.
+   *
+   * They will be read again by then next call of the scanning method
+   *
+   * @param number  the number of characters to be read again.
+   *                This number must not be greater than yylength()!
+   */
+  public void yypushback(int number)  {
+    if ( number > yylength() )
+      zzScanError(ZZ_PUSHBACK_2BIG);
+
+    zzMarkedPos -= number;
+  }
+
+
+  /**
+   * Contains user EOF-code, which will be executed exactly once,
+   * when the end of file is reached
+   */
+  private void zzDoEOF() throws java.io.IOException {
+    if (!zzEOFDone) {
+      zzEOFDone = true;
+      yyclose();
+    }
+  }
+
+
+  /**
+   * Resumes scanning until the next regular expression is matched,
+   * the end of input is encountered or an I/O-Error occurs.
+   *
+   * @return      the next token
+   * @exception   java.io.IOException  if any I/O-Error occurs
+   */
+  public java_cup.runtime.Symbol next_token() throws java.io.IOException {
+    int zzInput;
+    int zzAction;
+
+    // cached fields:
+    int zzCurrentPosL;
+    int zzMarkedPosL;
+    int zzEndReadL = zzEndRead;
+    char [] zzBufferL = zzBuffer;
+    char [] zzCMapL = ZZ_CMAP;
+
+    int [] zzTransL = ZZ_TRANS;
+    int [] zzRowMapL = ZZ_ROWMAP;
+    int [] zzAttrL = ZZ_ATTRIBUTE;
+
+    while (true) {
+      zzMarkedPosL = zzMarkedPos;
+
+      zzAction = -1;
+
+      zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL;
+  
+      zzState = ZZ_LEXSTATE[zzLexicalState];
+
+
+      zzForAction: {
+        while (true) {
+    
+          if (zzCurrentPosL < zzEndReadL)
+            zzInput = zzBufferL[zzCurrentPosL++];
+          else if (zzAtEOF) {
+            zzInput = YYEOF;
+            break zzForAction;
+          }
+          else {
+            // store back cached positions
+            zzCurrentPos  = zzCurrentPosL;
+            zzMarkedPos   = zzMarkedPosL;
+            boolean eof = zzRefill();
+            // get translated positions and possibly new buffer
+            zzCurrentPosL  = zzCurrentPos;
+            zzMarkedPosL   = zzMarkedPos;
+            zzBufferL      = zzBuffer;
+            zzEndReadL     = zzEndRead;
+            if (eof) {
+              zzInput = YYEOF;
+              break zzForAction;
+            }
+            else {
+              zzInput = zzBufferL[zzCurrentPosL++];
+            }
+          }
+          int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ];
+          if (zzNext == -1) break zzForAction;
+          zzState = zzNext;
+
+          int zzAttributes = zzAttrL[zzState];
+          if ( (zzAttributes & 1) == 1 ) {
+            zzAction = zzState;
+            zzMarkedPosL = zzCurrentPosL;
+            if ( (zzAttributes & 8) == 8 ) break zzForAction;
+          }
+
+        }
+      }
+
+      // store back cached position
+      zzMarkedPos = zzMarkedPosL;
+
+      switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) {
+        case 5: 
+          { if(Settings.DEBUG) System.out.println("JFlex:mp2to5:  "+yytext());
+               return new Symbol(MP2to5cSym.ALGOPT, yytext());
+          }
+        case 7: break;
+        case 3: 
+          { if(Settings.DEBUG) System.out.println("JFlex:mp2to5:  "+yytext());
+           return new Symbol(MP2to5cSym.ALGOPT, yytext());
+          }
+        case 8: break;
+        case 6: 
+          { if(Settings.DEBUG) System.out.println("JFlex:mp2to5:  "+yytext());
+               return new Symbol(MP2to5cSym.MP2OPT, yytext());
+          }
+        case 9: break;
+        case 4: 
+          { if(Settings.DEBUG) System.out.println("JFlex:mp2to5:  "+yytext());
+           return new Symbol(MP2to5cSym.MP2OPT, yytext());
+          }
+        case 10: break;
+        case 2: 
+          { if(Settings.DEBUG) System.out.println("JFlex:mp2to5:  "+yytext());
+          yybegin(YYINITIAL);
+          return new Symbol(MP2to5cSym.FLOAT, yytext());
+          }
+        case 11: break;
+        case 1: 
+          { 
+          }
+        case 12: break;
+        default: 
+          if (zzInput == YYEOF && zzStartRead == zzCurrentPos) {
+            zzAtEOF = true;
+            zzDoEOF();
+              { return new java_cup.runtime.Symbol(MP2to5cSym.EOF); }
+          } 
+          else {
+            zzScanError(ZZ_NO_MATCH);
+          }
+      }
+    }
+  }
+
+  /**
+   * Converts an int token code into the name of the
+   * token by reflection on the cup symbol class/interface sym
+   *
+   * This code was contributed by Karl Meissner <[email protected]>
+   */
+  private String getTokenName(int token) {
+    try {
+      java.lang.reflect.Field [] classFields = MP2to5cSym.class.getFields();
+      for (int i = 0; i < classFields.length; i++) {
+        if (classFields[i].getInt(null) == token) {
+          return classFields[i].getName();
+        }
+      }
+    } catch (Exception e) {
+      e.printStackTrace(System.err);
+    }
+
+    return "UNKNOWN TOKEN";
+  }
+
+  /**
+   * Same as next_token but also prints the token to standard out
+   * for debugging.
+   *
+   * This code was contributed by Karl Meissner <[email protected]>
+   */
+  public java_cup.runtime.Symbol debug_next_token() throws java.io.IOException 
{
+    java_cup.runtime.Symbol s = next_token();
+    System.out.println( " --"+ yytext() + "--" + getTokenName(s.sym) + "--");
+    return s;
+  }
+
+  /**
+   * Runs the scanner on input files.
+   *
+   * This is a standalone scanner, it will print any unmatched
+   * text to System.out unchanged.
+   *
+   * @param argv   the command line, contains the filenames to run
+   *               the scanner on.
+   */
+  public static void main(String argv[]) {
+    if (argv.length == 0) {
+      System.out.println("Usage : java MP2to5cLexer <inputfile>");
+    }
+    else {
+      for (int i = 0; i < argv.length; i++) {
+        MP2to5cLexer scanner = null;
+        try {
+          scanner = new MP2to5cLexer( new java.io.FileReader(argv[i]) );
+          while ( !scanner.zzAtEOF ) scanner.next_token();
+        }
+        catch (java.io.FileNotFoundException e) {
+          System.out.println("File not found : \""+argv[i]+"\"");
+        }
+        catch (java.io.IOException e) {
+          System.out.println("IO error scanning file \""+argv[i]+"\"");
+          System.out.println(e);
+        }
+        catch (Exception e) {
+          System.out.println("Unexpected exception:");
+          e.printStackTrace();
+        }
+      }
+    }
+  }
+
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-sandbox/blob/4231ac35/datacat/parsers/src/main/java/org/apache/airavata/datacat/parsers/gridchem/mp2to5c/MP2to5cParser.java
----------------------------------------------------------------------
diff --git 
a/datacat/parsers/src/main/java/org/apache/airavata/datacat/parsers/gridchem/mp2to5c/MP2to5cParser.java
 
b/datacat/parsers/src/main/java/org/apache/airavata/datacat/parsers/gridchem/mp2to5c/MP2to5cParser.java
new file mode 100644
index 0000000..d600983
--- /dev/null
+++ 
b/datacat/parsers/src/main/java/org/apache/airavata/datacat/parsers/gridchem/mp2to5c/MP2to5cParser.java
@@ -0,0 +1,263 @@
+/*
+*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*
+*/
+package org.apache.airavata.datacat.parsers.gridchem.mp2to5c;
+
+
+import java_cup.runtime.lr_parser;
+import org.apache.airavata.datacat.parsers.gridchem.GridChemQueueParser;
+import org.apache.airavata.datacat.parsers.gridchem.Settings;
+
+import java.io.FileReader;
+import java.util.ArrayList;
+import java.util.HashMap;
+
+
+public class MP2to5cParser extends java_cup.runtime.lr_parser implements 
GridChemQueueParser {
+
+  /** Default constructor. */
+  public MP2to5cParser() {super();}
+
+  /** Constructor which sets the default scanner. */
+  public MP2to5cParser(java_cup.runtime.Scanner s) {super(s);}
+
+    /**
+     * Constructor which uses a file reader.
+     */
+    public MP2to5cParser(final FileReader fileReader) {
+        super(new MP2to5cLexer(fileReader));
+    }
+
+  /** Production table. */
+  protected static final short _production_table[][] = 
+    lr_parser.unpackFromStrings(new String[]{
+            "\000\005\000\002\003\004\000\002\002\004\000\002\003" +
+                    "\003\000\002\004\003\000\002\004\003"});
+
+  /** Access to production table. */
+  public short[][] production_table() {return _production_table;}
+
+  /** Parse-action table. */
+  protected static final short[][] _action_table = 
+    lr_parser.unpackFromStrings(new String[]{
+            "\000\007\000\006\021\004\022\005\001\002\000\010\002" +
+                    
"\ufffe\021\ufffe\022\ufffe\001\002\000\010\002\ufffd\021\ufffd" +
+                    
"\022\ufffd\001\002\000\010\002\uffff\021\uffff\022\uffff\001" +
+                    "\002\000\010\002\011\021\004\022\005\001\002\000\010" +
+                    "\002\001\021\001\022\001\001\002\000\004\002\000\001" +
+                    "\002"});
+
+  /** Access to parse-action table. */
+  public short[][] action_table() {return _action_table;}
+
+  /** <code>reduce_goto</code> table. */
+  protected static final short[][] _reduce_table = 
+    lr_parser.unpackFromStrings(new String[]{
+            "\000\007\000\006\003\006\004\005\001\001\000\002\001" +
+                    "\001\000\002\001\001\000\002\001\001\000\004\004\007" +
+                    "\001\001\000\002\001\001\000\002\001\001"});
+
+  /** Access to <code>reduce_goto</code> table. */
+  public short[][] reduce_table() {return _reduce_table;}
+
+  /** Instance of action encapsulation class. */
+  protected CUP$parser$actions action_obj;
+
+    //Each string is of the format
+    //mp2SpecificOption and algorithmOption
+    private ArrayList<String> result = new ArrayList<String>();
+    private String tempStr = "";
+
+
+    public ArrayList<String> getResult() {
+        return result;
+    }
+
+    public void addToResult(String value) {
+        result.add(value);
+    }
+
+    public String getTempStr() {
+        return tempStr;
+    }
+
+    public void setTempStr(String s) {
+        this.tempStr = s;
+    }
+
+    /*Adding the parsed data to the hash map */
+    @Override
+    public HashMap<String, String> getParsedData() throws Exception {
+        parse();
+        HashMap<String,String> results= new HashMap<String,String>();
+        int specificOptionCount=0;
+        int algorithmOPtionCount=0;
+        for(int i=0;i<result.size();i++){
+            String singleString= result.get(i);
+            String[] temp= singleString.split(" ");
+            if(temp.length>1){
+                String keyString= temp[0];
+                String dataString=temp[1];
+                if(keyString.equalsIgnoreCase("SpecificOption")){
+                    
results.put("MP2to5cParser_MP2_Specific_Option_"+specificOptionCount,dataString);
+                    specificOptionCount++;
+                }else if(keyString.equalsIgnoreCase("AlgorithmOption")){
+                    
results.put("MP2to5cParser_MP2_Algorithm_Option_"+algorithmOPtionCount,dataString);
+                    algorithmOPtionCount++;
+                }
+            }
+
+        }
+        return results;
+    }
+
+  /** Action encapsulation object initializer. */
+  protected void init_actions()
+    {
+      action_obj = new CUP$parser$actions(this);
+    }
+
+  /** Invoke a user supplied parse action. */
+  public java_cup.runtime.Symbol do_action(
+    int                        act_num,
+    java_cup.runtime.lr_parser parser,
+    java.util.Stack            stack,
+    int                        top)
+    throws java.lang.Exception
+  {
+    /* call code in generated class */
+    return action_obj.CUP$parser$do_action(act_num, parser, stack, top);
+  }
+
+  /** Indicates start state. */
+  public int start_state() {return 0;}
+  /** Indicates start production. */
+  public int start_production() {return 1;}
+
+  /** <code>EOF</code> Symbol index. */
+  public int EOF_sym() {return 0;}
+
+  /** <code>error</code> Symbol index. */
+  public int error_sym() {return 1;}
+
+
+  /** User initialization code. */
+  public void user_init() throws java.lang.Exception
+    {
+ if(Settings.DEBUG) System.out.println("CUP:mp2to5c:  entry");
+    }
+
+
+
+    ///public static boolean DEBUG = false;
+}
+
+/** Cup generated class to encapsulate user supplied action code.*/
+class CUP$parser$actions {
+  private final MP2to5cParser MP2to5cParser;
+
+  /** Constructor */
+  CUP$parser$actions(MP2to5cParser MP2to5cParser) {
+    this.MP2to5cParser = MP2to5cParser;
+  }
+
+  /** Method with the actual generated action code. */
+  public final java_cup.runtime.Symbol CUP$parser$do_action(
+    int                        CUP$parser$act_num,
+    java_cup.runtime.lr_parser CUP$parser$parser,
+    java.util.Stack            CUP$parser$stack,
+    int                        CUP$parser$top)
+    throws java.lang.Exception
+    {
+      /* Symbol object for return from actions */
+      java_cup.runtime.Symbol CUP$parser$result;
+
+      /* select the action based on the action number */
+      switch (CUP$parser$act_num)
+        {
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 4: // element ::= MP2OPT 
+            {
+              Object RESULT = null;
+               int sleft = 
((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left;
+               int sright = 
((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right;
+               String s = (String)((java_cup.runtime.Symbol) 
CUP$parser$stack.elementAt(CUP$parser$top-0)).value;
+                if(Settings.DEBUG) System.out.println("CUP:mp2to5c:  
MP2-Specific Option: "+s);
+         MP2to5cParser.addToResult("SpecificOption "+s);
+          //ParseMP2to5.put("MP2-Specific Option: ", s);
+              CUP$parser$result = new java_cup.runtime.Symbol(2/*element*/, 
((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left, 
((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, 
RESULT);
+            }
+          return CUP$parser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 3: // element ::= ALGOPT 
+            {
+              Object RESULT = null;
+               int sleft = 
((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left;
+               int sright = 
((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right;
+               String s = (String)((java_cup.runtime.Symbol) 
CUP$parser$stack.elementAt(CUP$parser$top-0)).value;
+                if(Settings.DEBUG) System.out.println("CUP:mp2to5c:  Algorithm 
Option:  "+s);
+         MP2to5cParser.addToResult("AlgorithmOption "+s);
+          //ParseMP2to5.put("Algorithm Option:  ", s);
+              CUP$parser$result = new java_cup.runtime.Symbol(2/*element*/, 
((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left, 
((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, 
RESULT);
+            }
+          return CUP$parser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 2: // startpt ::= element 
+            {
+              Object RESULT = null;
+
+              CUP$parser$result = new java_cup.runtime.Symbol(1/*startpt*/, 
((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left, 
((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, 
RESULT);
+            }
+          return CUP$parser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 1: // $START ::= startpt EOF 
+            {
+              Object RESULT = null;
+               int start_valleft = 
((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-1)).left;
+               int start_valright = 
((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-1)).right;
+               Object start_val = (Object)((java_cup.runtime.Symbol) 
CUP$parser$stack.elementAt(CUP$parser$top-1)).value;
+               RESULT = start_val;
+              CUP$parser$result = new java_cup.runtime.Symbol(0/*$START*/, 
((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-1)).left, 
((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, 
RESULT);
+            }
+          /* ACCEPT */
+          CUP$parser$parser.done_parsing();
+          return CUP$parser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 0: // startpt ::= startpt element 
+            {
+              Object RESULT = null;
+
+              CUP$parser$result = new java_cup.runtime.Symbol(1/*startpt*/, 
((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-1)).left, 
((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, 
RESULT);
+            }
+          return CUP$parser$result;
+
+          /* . . . . . .*/
+          default:
+            throw new Exception(
+               "Invalid action number found in internal parse table");
+
+        }
+    }
+}
+

http://git-wip-us.apache.org/repos/asf/airavata-sandbox/blob/4231ac35/datacat/parsers/src/main/java/org/apache/airavata/datacat/parsers/gridchem/mp2to5c/MP2to5cSym.java
----------------------------------------------------------------------
diff --git 
a/datacat/parsers/src/main/java/org/apache/airavata/datacat/parsers/gridchem/mp2to5c/MP2to5cSym.java
 
b/datacat/parsers/src/main/java/org/apache/airavata/datacat/parsers/gridchem/mp2to5c/MP2to5cSym.java
new file mode 100644
index 0000000..8f947ef
--- /dev/null
+++ 
b/datacat/parsers/src/main/java/org/apache/airavata/datacat/parsers/gridchem/mp2to5c/MP2to5cSym.java
@@ -0,0 +1,51 @@
+/*
+*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*
+*/
+package org.apache.airavata.datacat.parsers.gridchem.mp2to5c;
+//----------------------------------------------------
+// The following code was generated by CUP v0.10k
+// Sun Sep 14 12:10:10 IST 2014
+//----------------------------------------------------
+
+/** CUP generated class containing symbol constants. */
+public class MP2to5cSym {
+  /* terminals */
+  public static final int E4_SDTQ = 8;
+  public static final int MP2OPT = 16;
+  public static final int LIM = 18;
+  public static final int UMP4_SDQ = 11;
+  public static final int UMP4_SDTQ = 12;
+  public static final int E4_DQ = 6;
+  public static final int FCOPT = 13;
+  public static final int UMP4_DQ = 10;
+  public static final int E4_SDQ = 7;
+  public static final int E3 = 5;
+  public static final int E2 = 2;
+  public static final int FLOAT = 19;
+  public static final int EOF = 0;
+  public static final int error = 1;
+  public static final int MP4_T = 4;
+  public static final int FCOPT2 = 14;
+  public static final int ALGOPT = 15;
+  public static final int VAR = 17;
+  public static final int EUMP3 = 9;
+  public static final int EUMP2 = 3;
+}
+

http://git-wip-us.apache.org/repos/asf/airavata-sandbox/blob/4231ac35/datacat/parsers/src/main/java/org/apache/airavata/datacat/parsers/gridchem/mp2to5d/MP2to5dLexer.java
----------------------------------------------------------------------
diff --git 
a/datacat/parsers/src/main/java/org/apache/airavata/datacat/parsers/gridchem/mp2to5d/MP2to5dLexer.java
 
b/datacat/parsers/src/main/java/org/apache/airavata/datacat/parsers/gridchem/mp2to5d/MP2to5dLexer.java
new file mode 100644
index 0000000..cf9d2f6
--- /dev/null
+++ 
b/datacat/parsers/src/main/java/org/apache/airavata/datacat/parsers/gridchem/mp2to5d/MP2to5dLexer.java
@@ -0,0 +1,737 @@
+/*
+*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*
+*/
+package org.apache.airavata.datacat.parsers.gridchem.mp2to5d;/* The following 
code was generated by JFlex 1.4.3 on 9/14/14 12:22 PM */
+
+/* MP2 to MP5 Keywords
+   Last Update: 12/31/2000 
+   http://www.gaussian.com/00000456.htm
+*/
+
+import java_cup.runtime.Symbol;
+import org.apache.airavata.datacat.parsers.gridchem.Settings;
+
+
+/**
+ * This class is a scanner generated by 
+ * <a href="http://www.jflex.de/";>JFlex</a> 1.4.3
+ * on 9/14/14 12:22 PM from the specification file
+ * <tt>mp2to5d.flex</tt>
+ */
+public class MP2to5dLexer implements java_cup.runtime.Scanner {
+
+  /** This character denotes the end of file */
+  public static final int YYEOF = -1;
+
+  /** initial size of the lookahead buffer */
+  private static final int ZZ_BUFFERSIZE = 16384;
+
+  /** lexical states */
+  public static final int IGNOREALL = 4;
+  public static final int FLOATVAL = 2;
+  public static final int YYINITIAL = 0;
+
+  /**
+   * ZZ_LEXSTATE[l] is the state in the DFA for the lexical state l
+   * ZZ_LEXSTATE[l+1] is the state in the DFA for the lexical state l
+   *                  at the beginning of a line
+   * l is of the form l = 2*k, k a non negative integer
+   */
+  private static final int ZZ_LEXSTATE[] = { 
+     0,  0,  1,  1,  2, 2
+  };
+
+  /** 
+   * Translates characters to character classes
+   */
+  private static final char [] ZZ_CMAP = {
+     0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 
+     0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 
+     0,  0,  0,  0,  0,  0,  0,  0,  6,  7,  0,  2,  0,  2,  3,  0, 
+     1,  1,  9, 14, 15,  1,  1,  1,  1,  1,  0,  0,  0, 10,  0,  0, 
+     0,  0,  0,  0, 17,  8,  0,  0,  0,  0,  0,  0,  0, 12,  0,  0, 
+    13, 18,  0, 19, 16, 11,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 
+     0,  0,  0,  0,  4,  4,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 
+     0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  5,  0,  0,  0, 
+     0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 
+     0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 
+     0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 
+     0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 
+     0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 
+     0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 
+     0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 
+     0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0
+  };
+
+  /** 
+   * Translates DFA states to action switch labels.
+   */
+  private static final int [] ZZ_ACTION = zzUnpackAction();
+
+  private static final String ZZ_ACTION_PACKED_0 =
+    "\3\0\6\1\7\0\1\2\1\3\1\0\1\4\11\0"+
+    "\1\2\7\0\1\5\1\6\6\0\1\7\4\0\1\10"+
+    "\1\0\1\11\3\0\1\12\1\13\3\0\1\14\1\15";
+
+  private static int [] zzUnpackAction() {
+    int [] result = new int[63];
+    int offset = 0;
+    offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result);
+    return result;
+  }
+
+  private static int zzUnpackAction(String packed, int offset, int [] result) {
+    int i = 0;       /* index in packed string  */
+    int j = offset;  /* index in unpacked array */
+    int l = packed.length();
+    while (i < l) {
+      int count = packed.charAt(i++);
+      int value = packed.charAt(i++);
+      do result[j++] = value; while (--count > 0);
+    }
+    return j;
+  }
+
+
+  /** 
+   * Translates a state to a row index in the transition table
+   */
+  private static final int [] ZZ_ROWMAP = zzUnpackRowMap();
+
+  private static final String ZZ_ROWMAP_PACKED_0 =
+    "\0\0\0\24\0\50\0\74\0\120\0\144\0\170\0\214"+
+    "\0\240\0\264\0\310\0\334\0\360\0\u0104\0\u0118\0\214"+
+    "\0\u012c\0\74\0\u0140\0\74\0\u0154\0\u0168\0\u017c\0\u0190"+
+    "\0\u01a4\0\u01b8\0\u01cc\0\u01e0\0\u01f4\0\u0208\0\u0208\0\u021c"+
+    "\0\u0230\0\u0244\0\u0258\0\u026c\0\u0280\0\74\0\74\0\u0294"+
+    "\0\u02a8\0\u02bc\0\u02d0\0\u02e4\0\u02f8\0\74\0\u030c\0\u0320"+
+    "\0\u0334\0\u0348\0\74\0\u035c\0\74\0\u0370\0\u0384\0\u0398"+
+    "\0\74\0\74\0\u03ac\0\u03c0\0\u03d4\0\74\0\74";
+
+  private static int [] zzUnpackRowMap() {
+    int [] result = new int[63];
+    int offset = 0;
+    offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result);
+    return result;
+  }
+
+  private static int zzUnpackRowMap(String packed, int offset, int [] result) {
+    int i = 0;  /* index in packed string  */
+    int j = offset;  /* index in unpacked array */
+    int l = packed.length();
+    while (i < l) {
+      int high = packed.charAt(i++) << 16;
+      result[j++] = high | packed.charAt(i++);
+    }
+    return j;
+  }
+
+  /** 
+   * The transition table of the DFA
+   */
+  private static final int [] ZZ_TRANS = zzUnpackTrans();
+
+  private static final String ZZ_TRANS_PACKED_0 =
+    "\10\4\1\5\2\4\1\6\1\7\10\4\1\10\1\11"+
+    "\2\4\1\11\3\4\1\10\4\4\2\10\30\4\35\0"+
+    "\1\12\1\0\1\13\2\0\1\14\1\15\20\0\1\16"+
+    "\24\0\1\17\7\0\1\20\1\0\1\21\5\0\1\20"+
+    "\4\0\2\20\5\0\1\20\7\0\1\20\4\0\2\20"+
+    "\16\0\1\22\25\0\1\23\21\0\1\24\17\0\1\25"+
+    "\32\0\1\26\25\0\1\27\5\0\1\21\2\0\2\30"+
+    "\2\0\1\30\1\21\4\0\2\21\1\0\1\30\17\0"+
+    "\1\31\27\0\1\32\1\0\1\33\17\0\1\34\12\0"+
+    "\1\35\16\0\1\36\1\37\2\0\1\37\3\0\1\36"+
+    "\4\0\2\36\15\0\1\40\4\0\1\41\27\0\1\42"+
+    "\22\0\1\43\10\0\1\44\35\0\1\45\4\0\1\36"+
+    "\7\0\1\36\4\0\2\36\16\0\1\46\23\0\1\47"+
+    "\20\0\1\50\34\0\1\51\1\0\1\52\22\0\1\53"+
+    "\1\0\1\54\7\0\1\55\26\0\1\56\33\0\1\57"+
+    "\10\0\1\60\36\0\1\61\22\0\1\62\14\0\1\63"+
+    "\20\0\1\64\26\0\1\65\20\0\1\66\34\0\1\67"+
+    "\1\0\1\70\13\0\1\71\23\0\1\72\33\0\1\73"+
+    "\10\0\1\74\23\0\1\75\26\0\1\76\23\0\1\77"+
+    "\11\0";
+
+  private static int [] zzUnpackTrans() {
+    int [] result = new int[1000];
+    int offset = 0;
+    offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result);
+    return result;
+  }
+
+  private static int zzUnpackTrans(String packed, int offset, int [] result) {
+    int i = 0;       /* index in packed string  */
+    int j = offset;  /* index in unpacked array */
+    int l = packed.length();
+    while (i < l) {
+      int count = packed.charAt(i++);
+      int value = packed.charAt(i++);
+      value--;
+      do result[j++] = value; while (--count > 0);
+    }
+    return j;
+  }
+
+
+  /* error codes */
+  private static final int ZZ_UNKNOWN_ERROR = 0;
+  private static final int ZZ_NO_MATCH = 1;
+  private static final int ZZ_PUSHBACK_2BIG = 2;
+
+  /* error messages for the codes above */
+  private static final String ZZ_ERROR_MSG[] = {
+    "Unkown internal scanner error",
+    "Error: could not match input",
+    "Error: pushback value was too large"
+  };
+
+  /**
+   * ZZ_ATTRIBUTE[aState] contains the attributes of state <code>aState</code>
+   */
+  private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute();
+
+  private static final String ZZ_ATTRIBUTE_PACKED_0 =
+    "\3\0\1\11\5\1\7\0\1\1\1\11\1\0\1\11"+
+    "\11\0\1\1\7\0\2\11\6\0\1\11\4\0\1\11"+
+    "\1\0\1\11\3\0\2\11\3\0\2\11";
+
+  private static int [] zzUnpackAttribute() {
+    int [] result = new int[63];
+    int offset = 0;
+    offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result);
+    return result;
+  }
+
+  private static int zzUnpackAttribute(String packed, int offset, int [] 
result) {
+    int i = 0;       /* index in packed string  */
+    int j = offset;  /* index in unpacked array */
+    int l = packed.length();
+    while (i < l) {
+      int count = packed.charAt(i++);
+      int value = packed.charAt(i++);
+      do result[j++] = value; while (--count > 0);
+    }
+    return j;
+  }
+
+  /** the input device */
+  private java.io.Reader zzReader;
+
+  /** the current state of the DFA */
+  private int zzState;
+
+  /** the current lexical state */
+  private int zzLexicalState = YYINITIAL;
+
+  /** this buffer contains the current text to be matched and is
+      the source of the yytext() string */
+  private char zzBuffer[] = new char[ZZ_BUFFERSIZE];
+
+  /** the textposition at the last accepting state */
+  private int zzMarkedPos;
+
+  /** the current text position in the buffer */
+  private int zzCurrentPos;
+
+  /** startRead marks the beginning of the yytext() string in the buffer */
+  private int zzStartRead;
+
+  /** endRead marks the last character in the buffer, that has been read
+      from input */
+  private int zzEndRead;
+
+  /** number of newlines encountered up to the start of the matched text */
+  private int yyline;
+
+  /** the number of characters up to the start of the matched text */
+  private int yychar;
+
+  /**
+   * the number of characters from the last newline up to the start of the 
+   * matched text
+   */
+  private int yycolumn;
+
+  /** 
+   * zzAtBOL == true <=> the scanner is currently at the beginning of a line
+   */
+  private boolean zzAtBOL = true;
+
+  /** zzAtEOF == true <=> the scanner is at the EOF */
+  private boolean zzAtEOF;
+
+  /** denotes if the user-EOF-code has already been executed */
+  private boolean zzEOFDone;
+
+  /* user code: */
+  public static boolean DEBUG = false;
+
+
+  /**
+   * Creates a new scanner
+   * There is also a java.io.InputStream version of this constructor.
+   *
+   * @param   in  the java.io.Reader to read input from.
+   */
+  public MP2to5dLexer(java.io.Reader in) {
+    this.zzReader = in;
+  }
+
+  /**
+   * Creates a new scanner.
+   * There is also java.io.Reader version of this constructor.
+   *
+   * @param   in  the java.io.Inputstream to read input from.
+   */
+  public MP2to5dLexer(java.io.InputStream in) {
+    this(new java.io.InputStreamReader(in));
+  }
+
+
+  /**
+   * Refills the input buffer.
+   *
+   * @return      <code>false</code>, iff there was new input.
+   * 
+   * @exception   java.io.IOException  if any I/O-Error occurs
+   */
+  private boolean zzRefill() throws java.io.IOException {
+
+    /* first: make room (if you can) */
+    if (zzStartRead > 0) {
+      System.arraycopy(zzBuffer, zzStartRead,
+                       zzBuffer, 0,
+                       zzEndRead-zzStartRead);
+
+      /* translate stored positions */
+      zzEndRead-= zzStartRead;
+      zzCurrentPos-= zzStartRead;
+      zzMarkedPos-= zzStartRead;
+      zzStartRead = 0;
+    }
+
+    /* is the buffer big enough? */
+    if (zzCurrentPos >= zzBuffer.length) {
+      /* if not: blow it up */
+      char newBuffer[] = new char[zzCurrentPos*2];
+      System.arraycopy(zzBuffer, 0, newBuffer, 0, zzBuffer.length);
+      zzBuffer = newBuffer;
+    }
+
+    /* finally: fill the buffer with new input */
+    int numRead = zzReader.read(zzBuffer, zzEndRead,
+                                            zzBuffer.length-zzEndRead);
+
+    if (numRead > 0) {
+      zzEndRead+= numRead;
+      return false;
+    }
+    // unlikely but not impossible: read 0 characters, but not at end of 
stream    
+    if (numRead == 0) {
+      int c = zzReader.read();
+      if (c == -1) {
+        return true;
+      } else {
+        zzBuffer[zzEndRead++] = (char) c;
+        return false;
+      }     
+    }
+
+       // numRead < 0
+    return true;
+  }
+
+    
+  /**
+   * Closes the input stream.
+   */
+  public final void yyclose() throws java.io.IOException {
+    zzAtEOF = true;            /* indicate end of file */
+    zzEndRead = zzStartRead;  /* invalidate buffer    */
+
+    if (zzReader != null)
+      zzReader.close();
+  }
+
+
+  /**
+   * Resets the scanner to read from a new input stream.
+   * Does not close the old reader.
+   *
+   * All internal variables are reset, the old input stream 
+   * <b>cannot</b> be reused (internal buffer is discarded and lost).
+   * Lexical state is set to <tt>ZZ_INITIAL</tt>.
+   *
+   * @param reader   the new input stream 
+   */
+  public final void yyreset(java.io.Reader reader) {
+    zzReader = reader;
+    zzAtBOL  = true;
+    zzAtEOF  = false;
+    zzEOFDone = false;
+    zzEndRead = zzStartRead = 0;
+    zzCurrentPos = zzMarkedPos = 0;
+    yyline = yychar = yycolumn = 0;
+    zzLexicalState = YYINITIAL;
+  }
+
+
+  /**
+   * Returns the current lexical state.
+   */
+  public final int yystate() {
+    return zzLexicalState;
+  }
+
+
+  /**
+   * Enters a new lexical state
+   *
+   * @param newState the new lexical state
+   */
+  public final void yybegin(int newState) {
+    zzLexicalState = newState;
+  }
+
+
+  /**
+   * Returns the text matched by the current regular expression.
+   */
+  public final String yytext() {
+    return new String( zzBuffer, zzStartRead, zzMarkedPos-zzStartRead );
+  }
+
+
+  /**
+   * Returns the character at position <tt>pos</tt> from the 
+   * matched text. 
+   * 
+   * It is equivalent to yytext().charAt(pos), but faster
+   *
+   * @param pos the position of the character to fetch. 
+   *            A value from 0 to yylength()-1.
+   *
+   * @return the character at position pos
+   */
+  public final char yycharat(int pos) {
+    return zzBuffer[zzStartRead+pos];
+  }
+
+
+  /**
+   * Returns the length of the matched text region.
+   */
+  public final int yylength() {
+    return zzMarkedPos-zzStartRead;
+  }
+
+
+  /**
+   * Reports an error that occured while scanning.
+   *
+   * In a wellformed scanner (no or only correct usage of 
+   * yypushback(int) and a match-all fallback rule) this method 
+   * will only be called with things that "Can't Possibly Happen".
+   * If this method is called, something is seriously wrong
+   * (e.g. a JFlex bug producing a faulty scanner etc.).
+   *
+   * Usual syntax/scanner level error handling should be done
+   * in error fallback rules.
+   *
+   * @param   errorCode  the code of the errormessage to display
+   */
+  private void zzScanError(int errorCode) {
+    String message;
+    try {
+      message = ZZ_ERROR_MSG[errorCode];
+    }
+    catch (ArrayIndexOutOfBoundsException e) {
+      message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR];
+    }
+
+    throw new Error(message);
+  } 
+
+
+  /**
+   * Pushes the specified amount of characters back into the input stream.
+   *
+   * They will be read again by then next call of the scanning method
+   *
+   * @param number  the number of characters to be read again.
+   *                This number must not be greater than yylength()!
+   */
+  public void yypushback(int number)  {
+    if ( number > yylength() )
+      zzScanError(ZZ_PUSHBACK_2BIG);
+
+    zzMarkedPos -= number;
+  }
+
+
+  /**
+   * Contains user EOF-code, which will be executed exactly once,
+   * when the end of file is reached
+   */
+  private void zzDoEOF() throws java.io.IOException {
+    if (!zzEOFDone) {
+      zzEOFDone = true;
+      yyclose();
+    }
+  }
+
+
+  /**
+   * Resumes scanning until the next regular expression is matched,
+   * the end of input is encountered or an I/O-Error occurs.
+   *
+   * @return      the next token
+   * @exception   java.io.IOException  if any I/O-Error occurs
+   */
+  public java_cup.runtime.Symbol next_token() throws java.io.IOException {
+    int zzInput;
+    int zzAction;
+
+    // cached fields:
+    int zzCurrentPosL;
+    int zzMarkedPosL;
+    int zzEndReadL = zzEndRead;
+    char [] zzBufferL = zzBuffer;
+    char [] zzCMapL = ZZ_CMAP;
+
+    int [] zzTransL = ZZ_TRANS;
+    int [] zzRowMapL = ZZ_ROWMAP;
+    int [] zzAttrL = ZZ_ATTRIBUTE;
+
+    while (true) {
+      zzMarkedPosL = zzMarkedPos;
+
+      zzAction = -1;
+
+      zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL;
+  
+      zzState = ZZ_LEXSTATE[zzLexicalState];
+
+
+      zzForAction: {
+        while (true) {
+    
+          if (zzCurrentPosL < zzEndReadL)
+            zzInput = zzBufferL[zzCurrentPosL++];
+          else if (zzAtEOF) {
+            zzInput = YYEOF;
+            break zzForAction;
+          }
+          else {
+            // store back cached positions
+            zzCurrentPos  = zzCurrentPosL;
+            zzMarkedPos   = zzMarkedPosL;
+            boolean eof = zzRefill();
+            // get translated positions and possibly new buffer
+            zzCurrentPosL  = zzCurrentPos;
+            zzMarkedPosL   = zzMarkedPos;
+            zzBufferL      = zzBuffer;
+            zzEndReadL     = zzEndRead;
+            if (eof) {
+              zzInput = YYEOF;
+              break zzForAction;
+            }
+            else {
+              zzInput = zzBufferL[zzCurrentPosL++];
+            }
+          }
+          int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ];
+          if (zzNext == -1) break zzForAction;
+          zzState = zzNext;
+
+          int zzAttributes = zzAttrL[zzState];
+          if ( (zzAttributes & 1) == 1 ) {
+            zzAction = zzState;
+            zzMarkedPosL = zzCurrentPosL;
+            if ( (zzAttributes & 8) == 8 ) break zzForAction;
+          }
+
+        }
+      }
+
+      // store back cached position
+      zzMarkedPos = zzMarkedPosL;
+
+      switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) {
+        case 7: 
+          { if(Settings.DEBUG) System.out.println("JFlex:mp2to5:  "+yytext());
+            yybegin(FLOATVAL); 
+            return new Symbol(MP2to5dSym.E4_DQ);
+          }
+        case 14: break;
+        case 13: 
+          { if(Settings.DEBUG) System.out.println("JFlex:mp2to5:  "+yytext());
+                yybegin(FLOATVAL); 
+                return new Symbol(MP2to5dSym.UMP4_SDTQ);
+          }
+        case 15: break;
+        case 3: 
+          { if(Settings.DEBUG) System.out.println("JFlex:mp2to5:  "+yytext());
+        yybegin(FLOATVAL); 
+        return new Symbol(MP2to5dSym.E2);
+          }
+        case 16: break;
+        case 10: 
+          { if(Settings.DEBUG) System.out.println("JFlex:mp2to5:  "+yytext());
+              yybegin(FLOATVAL); 
+              return new Symbol(MP2to5dSym.E4_SDTQ);
+          }
+        case 17: break;
+        case 5: 
+          { if(Settings.DEBUG) System.out.println("JFlex:mp2to5:  "+yytext());
+           yybegin(FLOATVAL); 
+           return new Symbol(MP2to5dSym.EUMP2);
+          }
+        case 18: break;
+        case 12: 
+          { if(Settings.DEBUG) System.out.println("JFlex:mp2to5:  "+yytext());
+               yybegin(FLOATVAL); 
+               return new Symbol(MP2to5dSym.UMP4_SDQ);
+          }
+        case 19: break;
+        case 8: 
+          { if(Settings.DEBUG) System.out.println("JFlex:mp2to5:  "+yytext());
+            yybegin(FLOATVAL); 
+            return new Symbol(MP2to5dSym.MP4_T);
+          }
+        case 20: break;
+        case 4: 
+          { if(Settings.DEBUG) System.out.println("JFlex:mp2to5:  "+yytext());
+        yybegin(FLOATVAL); 
+        return new Symbol(MP2to5dSym.E3);
+          }
+        case 21: break;
+        case 2: 
+          { if(Settings.DEBUG) System.out.println("JFlex:mp2to5:  "+yytext());
+          yybegin(YYINITIAL);
+          return new Symbol(MP2to5dSym.FLOAT, yytext());
+          }
+        case 22: break;
+        case 9: 
+          { if(Settings.DEBUG) System.out.println("JFlex:mp2to5:  "+yytext());
+             yybegin(FLOATVAL); 
+             return new Symbol(MP2to5dSym.E4_SDQ);
+          }
+        case 23: break;
+        case 6: 
+          { if(Settings.DEBUG) System.out.println("JFlex:mp2to5:  "+yytext());
+           yybegin(FLOATVAL); 
+           return new Symbol(MP2to5dSym.EUMP3);
+          }
+        case 24: break;
+        case 11: 
+          { if(Settings.DEBUG) System.out.println("JFlex:mp2to5:  "+yytext());
+              yybegin(FLOATVAL); 
+              return new Symbol(MP2to5dSym.UMP4_DQ);
+          }
+        case 25: break;
+        case 1: 
+          { 
+          }
+        case 26: break;
+        default: 
+          if (zzInput == YYEOF && zzStartRead == zzCurrentPos) {
+            zzAtEOF = true;
+            zzDoEOF();
+              { return new java_cup.runtime.Symbol(MP2to5dSym.EOF); }
+          } 
+          else {
+            zzScanError(ZZ_NO_MATCH);
+          }
+      }
+    }
+  }
+
+  /**
+   * Converts an int token code into the name of the
+   * token by reflection on the cup symbol class/interface sym
+   *
+   * This code was contributed by Karl Meissner <[email protected]>
+   */
+  private String getTokenName(int token) {
+    try {
+      java.lang.reflect.Field [] classFields = MP2to5dSym.class.getFields();
+      for (int i = 0; i < classFields.length; i++) {
+        if (classFields[i].getInt(null) == token) {
+          return classFields[i].getName();
+        }
+      }
+    } catch (Exception e) {
+      e.printStackTrace(System.err);
+    }
+
+    return "UNKNOWN TOKEN";
+  }
+
+  /**
+   * Same as next_token but also prints the token to standard out
+   * for debugging.
+   *
+   * This code was contributed by Karl Meissner <[email protected]>
+   */
+  public java_cup.runtime.Symbol debug_next_token() throws java.io.IOException 
{
+    java_cup.runtime.Symbol s = next_token();
+    System.out.println( " --"+ yytext() + "--" + getTokenName(s.sym) + "--");
+    return s;
+  }
+
+  /**
+   * Runs the scanner on input files.
+   *
+   * This is a standalone scanner, it will print any unmatched
+   * text to System.out unchanged.
+   *
+   * @param argv   the command line, contains the filenames to run
+   *               the scanner on.
+   */
+  public static void main(String argv[]) {
+    if (argv.length == 0) {
+      System.out.println("Usage : java MP2to5dLexer <inputfile>");
+    }
+    else {
+      for (int i = 0; i < argv.length; i++) {
+        MP2to5dLexer scanner = null;
+        try {
+          scanner = new MP2to5dLexer( new java.io.FileReader(argv[i]) );
+          while ( !scanner.zzAtEOF ) scanner.next_token();
+        }
+        catch (java.io.FileNotFoundException e) {
+          System.out.println("File not found : \""+argv[i]+"\"");
+        }
+        catch (java.io.IOException e) {
+          System.out.println("IO error scanning file \""+argv[i]+"\"");
+          System.out.println(e);
+        }
+        catch (Exception e) {
+          System.out.println("Unexpected exception:");
+          e.printStackTrace();
+        }
+      }
+    }
+  }
+
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-sandbox/blob/4231ac35/datacat/parsers/src/main/java/org/apache/airavata/datacat/parsers/gridchem/mp2to5d/MP2to5dParser.java
----------------------------------------------------------------------
diff --git 
a/datacat/parsers/src/main/java/org/apache/airavata/datacat/parsers/gridchem/mp2to5d/MP2to5dParser.java
 
b/datacat/parsers/src/main/java/org/apache/airavata/datacat/parsers/gridchem/mp2to5d/MP2to5dParser.java
new file mode 100644
index 0000000..36bc9fa
--- /dev/null
+++ 
b/datacat/parsers/src/main/java/org/apache/airavata/datacat/parsers/gridchem/mp2to5d/MP2to5dParser.java
@@ -0,0 +1,460 @@
+/*
+*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*
+*/
+package org.apache.airavata.datacat.parsers.gridchem.mp2to5d;
+
+
+import java_cup.runtime.lr_parser;
+import org.apache.airavata.datacat.parsers.gridchem.GridChemQueueParser;
+import org.apache.airavata.datacat.parsers.gridchem.Settings;
+
+import java.io.FileReader;
+import java.util.ArrayList;
+import java.util.HashMap;
+
+
+public class MP2to5dParser extends java_cup.runtime.lr_parser implements 
GridChemQueueParser{
+
+  /** Default constructor. */
+  public MP2to5dParser() {super();}
+
+  /** Constructor which sets the default scanner. */
+  public MP2to5dParser(java_cup.runtime.Scanner s) {super(s);}
+
+  /** Constructor which uses the file reader */
+    public MP2to5dParser(final FileReader fileReader){super(new 
MP2to5dLexer(fileReader));}
+
+  /** Production table. */
+  protected static final short _production_table[][] = 
+    lr_parser.unpackFromStrings(new String[]{
+            "\000\016\000\002\003\004\000\002\002\004\000\002\003" +
+                    "\003\000\002\004\004\000\002\004\004\000\002\004\004" +
+                    "\000\002\004\004\000\002\004\004\000\002\004\004\000" +
+                    "\002\004\004\000\002\004\004\000\002\004\004\000\002" +
+                    "\004\004\000\002\004\004"});
+
+  /** Access to production table. */
+  public short[][] production_table() {return _production_table;}
+
+  /** Parse-action table. */
+  protected static final short[][] _action_table = 
+    lr_parser.unpackFromStrings(new String[]{
+            "\000\033\000\030\004\017\005\014\006\004\007\016\010" +
+                    "\020\011\013\012\011\013\012\014\015\015\010\016\006" +
+                    "\001\002\000\004\025\035\001\002\000\032\002\034\004" +
+                    "\017\005\014\006\004\007\016\010\020\011\013\012\011" +
+                    "\013\012\014\015\015\010\016\006\001\002\000\004\025" +
+                    
"\032\001\002\000\032\002\uffff\004\uffff\005\uffff\006\uffff" +
+                    
"\007\uffff\010\uffff\011\uffff\012\uffff\013\uffff\014\uffff\015" +
+                    "\uffff\016\uffff\001\002\000\004\025\031\001\002\000\004" 
+
+                    "\025\030\001\002\000\004\025\027\001\002\000\004\025" +
+                    "\026\001\002\000\004\025\025\001\002\000\004\025\024" +
+                    "\001\002\000\004\025\023\001\002\000\004\025\022\001" +
+                    "\002\000\004\025\021\001\002\000\032\002\ufffa\004\ufffa" 
+
+                    
"\005\ufffa\006\ufffa\007\ufffa\010\ufffa\011\ufffa\012\ufffa\013" +
+                    
"\ufffa\014\ufffa\015\ufffa\016\ufffa\001\002\000\032\002\ufffe" +
+                    
"\004\ufffe\005\ufffe\006\ufffe\007\ufffe\010\ufffe\011\ufffe\012" +
+                    
"\ufffe\013\ufffe\014\ufffe\015\ufffe\016\ufffe\001\002\000\032" +
+                    
"\002\ufffb\004\ufffb\005\ufffb\006\ufffb\007\ufffb\010\ufffb\011" +
+                    
"\ufffb\012\ufffb\013\ufffb\014\ufffb\015\ufffb\016\ufffb\001\002" +
+                    
"\000\032\002\ufff6\004\ufff6\005\ufff6\006\ufff6\007\ufff6\010" +
+                    
"\ufff6\011\ufff6\012\ufff6\013\ufff6\014\ufff6\015\ufff6\016\ufff6" +
+                    
"\001\002\000\032\002\ufffd\004\ufffd\005\ufffd\006\ufffd\007" +
+                    
"\ufffd\010\ufffd\011\ufffd\012\ufffd\013\ufffd\014\ufffd\015\ufffd" +
+                    
"\016\ufffd\001\002\000\032\002\ufff9\004\ufff9\005\ufff9\006" +
+                    
"\ufff9\007\ufff9\010\ufff9\011\ufff9\012\ufff9\013\ufff9\014\ufff9" +
+                    
"\015\ufff9\016\ufff9\001\002\000\032\002\ufff7\004\ufff7\005" +
+                    
"\ufff7\006\ufff7\007\ufff7\010\ufff7\011\ufff7\012\ufff7\013\ufff7" +
+                    
"\014\ufff7\015\ufff7\016\ufff7\001\002\000\032\002\ufff8\004" +
+                    
"\ufff8\005\ufff8\006\ufff8\007\ufff8\010\ufff8\011\ufff8\012\ufff8" +
+                    
"\013\ufff8\014\ufff8\015\ufff8\016\ufff8\001\002\000\032\002" +
+                    
"\ufff5\004\ufff5\005\ufff5\006\ufff5\007\ufff5\010\ufff5\011\ufff5" +
+                    
"\012\ufff5\013\ufff5\014\ufff5\015\ufff5\016\ufff5\001\002\000" +
+                    
"\032\002\ufff4\004\ufff4\005\ufff4\006\ufff4\007\ufff4\010\ufff4" +
+                    
"\011\ufff4\012\ufff4\013\ufff4\014\ufff4\015\ufff4\016\ufff4\001" +
+                    "\002\000\032\002\001\004\001\005\001\006\001\007\001" +
+                    "\010\001\011\001\012\001\013\001\014\001\015\001\016" +
+                    "\001\001\002\000\004\002\000\001\002\000\032\002\ufffc" +
+                    
"\004\ufffc\005\ufffc\006\ufffc\007\ufffc\010\ufffc\011\ufffc\012" +
+                    "\ufffc\013\ufffc\014\ufffc\015\ufffc\016\ufffc\001\002"});
+
+  /** Access to parse-action table. */
+  public short[][] action_table() {return _action_table;}
+
+  /** <code>reduce_goto</code> table. */
+  protected static final short[][] _reduce_table = 
+    lr_parser.unpackFromStrings(new String[]{
+            "\000\033\000\006\003\004\004\006\001\001\000\002\001" +
+                    "\001\000\004\004\032\001\001\000\002\001\001\000\002" +
+                    "\001\001\000\002\001\001\000\002\001\001\000\002\001" +
+                    "\001\000\002\001\001\000\002\001\001\000\002\001\001" +
+                    "\000\002\001\001\000\002\001\001\000\002\001\001\000" +
+                    "\002\001\001\000\002\001\001\000\002\001\001\000\002" +
+                    "\001\001\000\002\001\001\000\002\001\001\000\002\001" +
+                    "\001\000\002\001\001\000\002\001\001\000\002\001\001" +
+                    "\000\002\001\001\000\002\001\001\000\002\001\001"});
+
+  /** Access to <code>reduce_goto</code> table. */
+  public short[][] reduce_table() {return _reduce_table;}
+
+  /** Instance of action encapsulation class. */
+  protected CUP$parser$actions action_obj;
+
+
+
+    private ArrayList<String> result = new ArrayList<String>();
+    private String tempStr = "";
+
+
+    public ArrayList<String> getResult() {
+        return result;
+    }
+
+    public void addToResult(String value) {
+        result.add(value);
+    }
+
+    public String getTempStr() {
+        return tempStr;
+    }
+
+    public void setTempStr(String s) {
+        this.tempStr = s;
+    }
+
+
+    /*Adding the parsed data to the hash map */
+    @Override
+    public HashMap<String, String> getParsedData() throws Exception {
+        HashMap<String, String> results= new HashMap<String,String>();
+        parse();
+        int j=0,k=0,a=0,b=0,c=0,d=0,f=0, m=0, n=0 , p=0, q=0;
+        for(int i=0;i<result.size();i++){
+            String singleResult=result.get(i);
+            String[] temp = singleResult.split(" ");
+            String secondElement=temp[2];
+            if(temp.length>6){
+                String fourthElement=temp [4];
+                if (fourthElement.equalsIgnoreCase("UMP4(SDTQ)")) {
+                    results.put("MP2to5d_UMP4(SDTQ)_" + k, temp[5]);
+                    k++;
+                }else if (fourthElement.equalsIgnoreCase("UMP4(SDQ)")) {
+                    results.put("MP2to5d_UMP4(SDQ)_" + a, temp[5]);
+                    a++;
+                }else if(fourthElement.equalsIgnoreCase("UMP4(DQ)")) {
+                    results.put("MP2to5d_UMP4(DQ)_" + b, temp[5]);
+                    b++;
+                }else if(fourthElement.equalsIgnoreCase("EUMP3")) {
+                    results.put("MP2to5d_EUMP3_" + c, temp[5]);
+                    c++;
+                }else if (fourthElement.equalsIgnoreCase("EUMP2")) {
+                    results.put("MP2to5d_EUMP2_" + q, temp[5]);
+                    q++;
+                }
+
+            }
+
+            if(secondElement.equalsIgnoreCase("E2")) {
+                results.put("MP2to5d_E2_" + j, temp[3]);
+                j++;
+            }else  if(secondElement.equalsIgnoreCase("E4(SDTQ)")) {
+                results.put("MP2to5d_E4(SDTQ)_" + d, temp[3]);
+                d++;
+            }else if (secondElement.equalsIgnoreCase("E4(SDQ)")) {
+                results.put("MP2to5d_E4(SDQ)_" + f, temp[3]);
+                f++;
+            }else if (secondElement.equalsIgnoreCase("E4(DQ)")) {
+                results.put("MP2to5d_E4(DQ)_" + m, temp[3]);
+                m++;
+            }else if (secondElement.equalsIgnoreCase("E3")) {
+                results.put("MP2to5d_E3_" + n, temp[3]);
+                n++;
+            }else if (secondElement.equalsIgnoreCase("MP4(T)")) {
+                results.put("MP2to5d_MP4(T)_" + p, temp[3]);
+                p++;
+
+            }else{
+                continue;
+            }
+        }
+
+        return results;
+    }
+
+
+  /** Action encapsulation object initializer. */
+  protected void init_actions()
+    {
+      action_obj = new CUP$parser$actions(this);
+    }
+
+  /** Invoke a user supplied parse action. */
+  public java_cup.runtime.Symbol do_action(
+    int                        act_num,
+    java_cup.runtime.lr_parser parser,
+    java.util.Stack            stack,
+    int                        top)
+    throws java.lang.Exception
+  {
+    /* call code in generated class */
+    return action_obj.CUP$parser$do_action(act_num, parser, stack, top);
+  }
+
+  /** Indicates start state. */
+  public int start_state() {return 0;}
+  /** Indicates start production. */
+  public int start_production() {return 1;}
+
+  /** <code>EOF</code> Symbol index. */
+  public int EOF_sym() {return 0;}
+
+  /** <code>error</code> Symbol index. */
+  public int error_sym() {return 1;}
+
+
+  /** User initialization code. */
+  public void user_init() throws java.lang.Exception
+    {
+ if(Settings.DEBUG) System.out.println("CUP:mp2to5d:  entry");
+    }
+
+
+
+    ///public static boolean DEBUG = false;
+}
+
+/** Cup generated class to encapsulate user supplied action code.*/
+class CUP$parser$actions {
+  private final MP2to5dParser MP2to5dParser;
+
+  /** Constructor */
+  CUP$parser$actions(MP2to5dParser MP2to5dParser) {
+    this.MP2to5dParser = MP2to5dParser;
+  }
+
+  /** Method with the actual generated action code. */
+  public final java_cup.runtime.Symbol CUP$parser$do_action(
+    int                        CUP$parser$act_num,
+    java_cup.runtime.lr_parser CUP$parser$parser,
+    java.util.Stack            CUP$parser$stack,
+    int                        CUP$parser$top)
+    throws java.lang.Exception
+    {
+      /* Symbol object for return from actions */
+      java_cup.runtime.Symbol CUP$parser$result;
+
+      /* select the action based on the action number */
+      switch (CUP$parser$act_num)
+        {
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 13: // element ::= UMP4_SDTQ FLOAT 
+            {
+              Object RESULT = null;
+               int fleft = 
((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left;
+               int fright = 
((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right;
+               String f = (String)((java_cup.runtime.Symbol) 
CUP$parser$stack.elementAt(CUP$parser$top-0)).value;
+                if(Settings.DEBUG) System.out.println("CUP:mp2to5d:  MP4 
correction UMP4(SDTQ)"+f);
+         MP2to5dParser.addToResult("CUP:mp2to5d:  MP4 correction UMP4(SDTQ) 
"+f);
+           //ParseMP2to5.put("MP4 correction UMP4(SDTQ)", f);
+              CUP$parser$result = new java_cup.runtime.Symbol(2/*element*/, 
((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-1)).left, 
((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, 
RESULT);
+            }
+          return CUP$parser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 12: // element ::= UMP4_SDQ FLOAT 
+            {
+              Object RESULT = null;
+               int fleft = 
((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left;
+               int fright = 
((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right;
+               String f = (String)((java_cup.runtime.Symbol) 
CUP$parser$stack.elementAt(CUP$parser$top-0)).value;
+                if(Settings.DEBUG) System.out.println("CUP:mp2to5d:  MP4 
correction UMP4(SDQ)"+f);
+         MP2to5dParser.addToResult("CUP:mp2to5d:  MP4 correction UMP4(SDQ) 
"+f);
+           //ParseMP2to5.put("MP4 correction UMP4(SDQ)", f);
+              CUP$parser$result = new java_cup.runtime.Symbol(2/*element*/, 
((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-1)).left, 
((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, 
RESULT);
+            }
+          return CUP$parser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 11: // element ::= UMP4_DQ FLOAT 
+            {
+              Object RESULT = null;
+               int fleft = 
((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left;
+               int fright = 
((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right;
+               String f = (String)((java_cup.runtime.Symbol) 
CUP$parser$stack.elementAt(CUP$parser$top-0)).value;
+                if(Settings.DEBUG) System.out.println("CUP:mp2to5d:  MP4 
correction UMP4(DQ)"+f);
+         MP2to5dParser.addToResult("CUP:mp2to5d:  MP4 correction UMP4(DQ) "+f);
+         // ParseMP2to5.put("MP4 correction UMP4(DQ)", f);
+              CUP$parser$result = new java_cup.runtime.Symbol(2/*element*/, 
((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-1)).left, 
((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, 
RESULT);
+            }
+          return CUP$parser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 10: // element ::= EUMP3 FLOAT 
+            {
+              Object RESULT = null;
+               int fleft = 
((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left;
+               int fright = 
((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right;
+               String f = (String)((java_cup.runtime.Symbol) 
CUP$parser$stack.elementAt(CUP$parser$top-0)).value;
+                if(Settings.DEBUG) System.out.println("CUP:mp2to5d:  MP3 
correction EUMP3"+f);
+         MP2to5dParser.addToResult("CUP:mp2to5d:  MP3 correction EUMP3 "+f);
+          //ParseMP2to5.put("MP3 correction EUMP3", f);
+              CUP$parser$result = new java_cup.runtime.Symbol(2/*element*/, 
((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-1)).left, 
((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, 
RESULT);
+            }
+          return CUP$parser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 9: // element ::= E4_SDTQ FLOAT 
+            {
+              Object RESULT = null;
+               int fleft = 
((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left;
+               int fright = 
((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right;
+               String f = (String)((java_cup.runtime.Symbol) 
CUP$parser$stack.elementAt(CUP$parser$top-0)).value;
+                if(Settings.DEBUG) System.out.println("CUP:mp2to5d:  
E4(SDTQ)"+f);
+         MP2to5dParser.addToResult("CUP:mp2to5d:  E4(SDTQ) "+f);
+          //ParseMP2to5.put("E4(SDTQ)", f);
+              CUP$parser$result = new java_cup.runtime.Symbol(2/*element*/, 
((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-1)).left, 
((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, 
RESULT);
+            }
+          return CUP$parser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 8: // element ::= E4_SDQ FLOAT 
+            {
+              Object RESULT = null;
+               int fleft = 
((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left;
+               int fright = 
((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right;
+               String f = (String)((java_cup.runtime.Symbol) 
CUP$parser$stack.elementAt(CUP$parser$top-0)).value;
+                if(Settings.DEBUG) System.out.println("CUP:mp2to5d:  
E4(SDQ)"+f);
+         MP2to5dParser.addToResult("CUP:mp2to5d:  E4(SDQ) "+f);
+         // ParseMP2to5.put("E4(SDQ)", f);
+              CUP$parser$result = new java_cup.runtime.Symbol(2/*element*/, 
((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-1)).left, 
((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, 
RESULT);
+            }
+          return CUP$parser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 7: // element ::= E4_DQ FLOAT 
+            {
+              Object RESULT = null;
+               int fleft = 
((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left;
+               int fright = 
((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right;
+               String f = (String)((java_cup.runtime.Symbol) 
CUP$parser$stack.elementAt(CUP$parser$top-0)).value;
+                if(Settings.DEBUG) System.out.println("CUP:mp2to5d:  
E4(DQ)"+f);
+         MP2to5dParser.addToResult("CUP:mp2to5d:  E4(DQ) "+f);
+          //ParseMP2to5.put("E4(DQ)", f);
+              CUP$parser$result = new java_cup.runtime.Symbol(2/*element*/, 
((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-1)).left, 
((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, 
RESULT);
+            }
+          return CUP$parser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 6: // element ::= E3 FLOAT 
+            {
+              Object RESULT = null;
+               int fleft = 
((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left;
+               int fright = 
((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right;
+               String f = (String)((java_cup.runtime.Symbol) 
CUP$parser$stack.elementAt(CUP$parser$top-0)).value;
+                if(Settings.DEBUG) System.out.println("CUP:mp2to5d:  E3 "+f);
+         MP2to5dParser.addToResult("CUP:mp2to5d:  E3 "+f);
+          //ParseMP2to5.put("E3", f);
+              CUP$parser$result = new java_cup.runtime.Symbol(2/*element*/, 
((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-1)).left, 
((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, 
RESULT);
+            }
+          return CUP$parser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 5: // element ::= MP4_T FLOAT 
+            {
+              Object RESULT = null;
+               int fleft = 
((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left;
+               int fright = 
((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right;
+               String f = (String)((java_cup.runtime.Symbol) 
CUP$parser$stack.elementAt(CUP$parser$top-0)).value;
+                if(Settings.DEBUG) System.out.println("CUP:mp2to5d:  
MP4(T)"+f);
+         MP2to5dParser.addToResult("CUP:mp2to5d:  MP4(T) "+f);
+          //ParseMP2to5.put("MP4(T)", f);
+              CUP$parser$result = new java_cup.runtime.Symbol(2/*element*/, 
((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-1)).left, 
((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, 
RESULT);
+            }
+          return CUP$parser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 4: // element ::= EUMP2 FLOAT 
+            {
+              Object RESULT = null;
+               int fleft = 
((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left;
+               int fright = 
((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right;
+               String f = (String)((java_cup.runtime.Symbol) 
CUP$parser$stack.elementAt(CUP$parser$top-0)).value;
+                if(Settings.DEBUG) System.out.println("CUP:mp2to5d:  MP2 
energy EUMP2"+f);
+         MP2to5dParser.addToResult("CUP:mp2to5d:  MP2 energy EUMP2 "+f);
+          // ParseMP2to5.put("MP2 energy EUMP2", f);
+              CUP$parser$result = new java_cup.runtime.Symbol(2/*element*/, 
((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-1)).left, 
((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, 
RESULT);
+            }
+          return CUP$parser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 3: // element ::= E2 FLOAT 
+            {
+              Object RESULT = null;
+               int fleft = 
((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left;
+               int fright = 
((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right;
+               String f = (String)((java_cup.runtime.Symbol) 
CUP$parser$stack.elementAt(CUP$parser$top-0)).value;
+                if(Settings.DEBUG) System.out.println("CUP:mp2to5d:  E2"+f);
+         MP2to5dParser.addToResult("CUP:mp2to5d:  E2 "+f);
+          // ParseMP2to5.put("E2", f);
+              CUP$parser$result = new java_cup.runtime.Symbol(2/*element*/, 
((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-1)).left, 
((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, 
RESULT);
+            }
+          return CUP$parser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 2: // startpt ::= element 
+            {
+              Object RESULT = null;
+
+              CUP$parser$result = new java_cup.runtime.Symbol(1/*startpt*/, 
((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left, 
((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, 
RESULT);
+            }
+          return CUP$parser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 1: // $START ::= startpt EOF 
+            {
+              Object RESULT = null;
+               int start_valleft = 
((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-1)).left;
+               int start_valright = 
((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-1)).right;
+               Object start_val = (Object)((java_cup.runtime.Symbol) 
CUP$parser$stack.elementAt(CUP$parser$top-1)).value;
+               RESULT = start_val;
+              CUP$parser$result = new java_cup.runtime.Symbol(0/*$START*/, 
((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-1)).left, 
((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, 
RESULT);
+            }
+          /* ACCEPT */
+          CUP$parser$parser.done_parsing();
+          return CUP$parser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 0: // startpt ::= startpt element 
+            {
+              Object RESULT = null;
+
+              CUP$parser$result = new java_cup.runtime.Symbol(1/*startpt*/, 
((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-1)).left, 
((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, 
RESULT);
+            }
+          return CUP$parser$result;
+
+          /* . . . . . .*/
+          default:
+            throw new Exception(
+               "Invalid action number found in internal parse table");
+
+        }
+    }
+}
+

http://git-wip-us.apache.org/repos/asf/airavata-sandbox/blob/4231ac35/datacat/parsers/src/main/java/org/apache/airavata/datacat/parsers/gridchem/mp2to5d/MP2to5dSym.java
----------------------------------------------------------------------
diff --git 
a/datacat/parsers/src/main/java/org/apache/airavata/datacat/parsers/gridchem/mp2to5d/MP2to5dSym.java
 
b/datacat/parsers/src/main/java/org/apache/airavata/datacat/parsers/gridchem/mp2to5d/MP2to5dSym.java
new file mode 100644
index 0000000..6167ede
--- /dev/null
+++ 
b/datacat/parsers/src/main/java/org/apache/airavata/datacat/parsers/gridchem/mp2to5d/MP2to5dSym.java
@@ -0,0 +1,51 @@
+/*
+*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*
+*/
+package org.apache.airavata.datacat.parsers.gridchem.mp2to5d;
+//----------------------------------------------------
+// The following code was generated by CUP v0.10k
+// Sun Sep 14 12:22:07 IST 2014
+//----------------------------------------------------
+
+/** CUP generated class containing symbol constants. */
+public class MP2to5dSym {
+  /* terminals */
+  public static final int E4_SDTQ = 8;
+  public static final int MP2OPT = 16;
+  public static final int LIM = 18;
+  public static final int UMP4_SDQ = 11;
+  public static final int UMP4_SDTQ = 12;
+  public static final int E4_DQ = 6;
+  public static final int FCOPT = 13;
+  public static final int UMP4_DQ = 10;
+  public static final int E4_SDQ = 7;
+  public static final int E3 = 5;
+  public static final int E2 = 2;
+  public static final int FLOAT = 19;
+  public static final int EOF = 0;
+  public static final int error = 1;
+  public static final int MP4_T = 4;
+  public static final int FCOPT2 = 14;
+  public static final int ALGOPT = 15;
+  public static final int VAR = 17;
+  public static final int EUMP3 = 9;
+  public static final int EUMP2 = 3;
+}
+

Reply via email to