jboss-dmr/0001-Add-pre-generated-Java-classes.patch
2020-08-25 19:13:48 +08:00

2183 lines
74 KiB
Diff

From 8c60f8b062e64cf6bbe396923b4e42c02624bf6f Mon Sep 17 00:00:00 2001
From: gil <puntogil@libero.it>
Date: Fri, 27 May 2016 16:16:21 +0200
Subject: [PATCH] Add pre-generated Java classes
---
src/main/java/org/jboss/dmr/JSONParser.java | 1042 +++++++++++++++++++++++++
src/main/java/org/jboss/dmr/Parser.java | 1113 +++++++++++++++++++++++++++
2 files changed, 2155 insertions(+)
create mode 100644 src/main/java/org/jboss/dmr/JSONParser.java
create mode 100644 src/main/java/org/jboss/dmr/Parser.java
diff --git a/src/main/java/org/jboss/dmr/JSONParser.java b/src/main/java/org/jboss/dmr/JSONParser.java
new file mode 100644
index 0000000..a59782f
--- /dev/null
+++ b/src/main/java/org/jboss/dmr/JSONParser.java
@@ -0,0 +1,1042 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2011, Red Hat, Inc., and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.dmr;
+
+import java.io.IOException;
+import java.io.InputStream;
+
+import java.util.LinkedList;
+import java.util.Vector;
+import java.util.Stack;
+
+public abstract class JSONParser
+{
+ protected final static int OPEN_BRACE = 256;
+ protected final static int CLOSE_BRACE = 257;
+ protected final static int OPEN_BRACKET = 258;
+ protected final static int CLOSE_BRACKET = 259;
+ protected final static int COLON = 260;
+ protected final static int COMMA = 261;
+ protected final static int BIG = 262;
+ protected final static int INTEGER = 263;
+ protected final static int DECIMAL = 264;
+ protected final static int UNDEFINED = 265;
+ protected final static int TRUE = 266;
+ protected final static int FALSE = 267;
+ protected final static int ZERO_VAL = 268;
+ protected final static int OCTAL_INT_VAL = 269;
+ protected final static int HEX_INT_VAL = 270;
+ protected final static int SIGNED_HEX_INT_VAL = 271;
+ protected final static int DEC_INT_VAL = 272;
+ protected final static int NAN_VAL = 273;
+ protected final static int INF_VAL = 274;
+ protected final static int DEC_VAL = 275;
+ protected final static int STR_VAL = 276;
+
+ protected final static int INITIAL = 0;
+
+ // an internal class for lazy initiation
+ private final static class cc_lexer
+ {
+ private static char[] accept = ("\000\027\026\027\005\027\015\021\006\027\027\003\004\027\027\027\027\027\027\001\002\030\000\025\000\015\000\000\000\015\016\000\000\000\000\000\000\000\000\000\000\024\017\000\022\011\000\000\000\000\000\020\000\000\000\000\000\014\007\000\024\000\000\010\000\000\000\000\000\012\013\023").toCharArray ();
+ private static char[] ecs = ("\000\000\000\000\000\000\000\000\000\001\002\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\003\000\000\000\000\000\000\000\000\000\004\005\006\000\007\010\010\010\010\010\010\010\010\010\011\000\000\000\000\000\000\012\012\012\012\013\012\000\000\014\000\000\000\000\015\000\000\000\000\000\000\000\000\000\000\000\000\016\017\020\000\000\000\021\022\023\024\025\026\027\000\030\000\000\031\032\033\000\000\000\034\035\036\037\000\000\040\041\000\042\000\043\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\044").toCharArray ();
+ private static char[] base = ("\065\000\003\000\000\047\000\014\000\002\005\000\000\014\022\037\026\023\076\000\000\000\000\000\000\073\000\000\002\074\005\006\107\121\110\115\110\104\112\105\027\000\000\115\000\000\116\112\123\120\125\000\036\120\122\130\127\000\000\152\000\130\140\000\135\125\133\131\125\000\000\000\167\000\171").toCharArray ();
+ private static char[] next = ("\026\000\026\027\002\002\034\035\036\051\051\064\036\052\052\030\052\052\034\007\007\064\041\052\052\052\052\052\052\040\063\063\037\063\063\073\042\074\074\043\063\063\063\063\063\063\031\007\044\045\046\032\033\001\002\002\003\004\005\001\006\007\010\001\001\011\012\013\001\014\001\015\001\016\001\017\001\020\001\001\021\001\001\022\001\001\001\023\024\025\047\050\000\053\054\055\056\057\060\061\062\065\066\067\070\071\072\075\076\077\100\000\101\102\103\104\105\106\107\026\026\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000").toCharArray ();
+ private static char[] check = ("\111\112\111\003\002\002\006\006\006\034\034\051\036\037\037\003\037\037\007\007\007\051\012\037\037\037\037\037\037\011\050\050\006\050\050\064\015\064\064\016\050\050\050\050\050\050\005\005\017\020\021\005\005\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022\031\035\040\041\042\043\044\045\046\047\053\056\057\060\061\062\065\066\067\070\073\075\076\100\101\102\103\104\110\110\112\112\112\112\112\112\112\112\112\112\112\112\112\112\112\112\112\112\112\112\112\112").toCharArray ();
+ private static char[] defaults = ("\112\112\001\110\112\001\001\001\112\001\001\112\112\001\001\001\001\001\001\112\112\112\003\112\111\006\011\012\001\006\035\001\001\001\001\001\001\001\001\001\001\034\037\001\112\112\001\001\001\001\001\050\001\001\001\001\001\112\112\064\073\001\001\112\001\001\001\001\001\112\112\112\112\112\112").toCharArray ();
+ private static char[] meta = ("\000\000\001\002\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003").toCharArray ();
+ }
+
+ // an internal class for lazy initiation
+ private final static class cc_parser
+ {
+ private static char[] rule = ("\000\001\001\001\001\001\001\001\001\001\001\001\001\002\002\003\002\002\003\001\001\002\003\004\005").toCharArray ();
+ private static char[] ecs = ("\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\003\004\005\006\007\000\000\000\010\011\012\013\014\015\016\017\020\021\022\023").toCharArray ();
+ private static char[] base = ("\016\160\006\000\042\043\053\054\064\065\075\076\106\107\117\002\014\001\151\120\011\130\160\131\020\141\001\000\142\177\152\036\007\000\012\u0087\u0092\u009c\u0096\u009c\u009c\u009c\u009c\u009c\u009c\u009c\u009c\u009c\u009c\u009c\u009c\u009c\u009c\u009c\u009c\u009c\u009c\u009c\u009c\u009c\u0097\u009c\u009c\u0098\u009c\u009c\u009c\u009c\u009c\u0099\u009c\u009c").toCharArray ();
+ private static char[] next = ("\uffec\000\uffff\uffec\036\uffec\027\uffec\030\000\uffe9\025\ufffe\uffe8\uffe9\033\001\uffe8\002\000\037\034\003\004\005\006\007\010\011\012\013\014\015\016\ufff5\ufff4\041\ufff5\ufff4\ufff5\ufff4\ufff5\ufff4\ufffd\ufff8\000\ufffd\ufff8\ufffd\ufff8\ufffd\ufff8\ufff7\ufff6\000\ufff7\ufff6\ufff7\ufff6\ufff7\ufff6\ufff9\ufffb\000\ufff9\ufffb\ufff9\ufffb\ufff9\ufffb\ufffa\ufffc\000\ufffa\ufffc\ufffa\ufffc\ufffa\ufffc\uffed\ufff0\000\uffed\ufff0\uffed\ufff0\uffed\ufff0\ufff3\ufff2\000\ufff3\ufff2\ufff3\ufff2\ufff3\ufff2\uffef\ufff1\000\uffef\ufff1\uffef\ufff1\uffef\ufff1\uffee\000\031\uffee\000\uffee\032\uffee\000\023\000\uffeb\000\uffeb\000\000\000\000\000\000\000\000\000\000\000\024\uffea\000\uffea\000\000\000\000\000\000\000\000\000\000\000\000\017\020\021\022\000\026\035\040\042\000\000\000\000\000").toCharArray ();
+ private static char[] check = ("\003\021\017\003\032\003\021\003\021\024\040\002\020\042\040\024\000\042\000\003\032\030\000\000\000\000\000\000\000\000\000\000\000\000\004\005\037\004\005\004\005\004\005\006\007\043\006\007\006\007\006\007\010\011\043\010\011\010\011\010\011\012\013\043\012\013\012\013\012\013\014\015\043\014\015\014\015\014\015\016\023\043\016\023\016\023\016\023\025\027\043\025\027\025\027\025\027\031\034\043\031\034\031\034\031\034\036\043\022\036\022\036\022\036\001\001\001\026\043\026\001\001\001\001\001\001\001\001\001\001\001\001\035\043\035\043\043\043\043\043\043\043\043\043\043\043\043\044\044\044\044\046\046\074\077\105\107\107\107\107\107").toCharArray ();
+ private static char[] defaults = ("\043\000\000\001\003\003\003\003\003\003\003\003\003\003\003\043\017\017\021\003\017\003\021\003\000\003\001\000\003\021\003\024\022\000\022\043").toCharArray ();
+ private static char[] gotoDefault = ("\107\107\044\107\107\107\107\107\107\107\107\107\107\107\107\107\107\107\107\107\107\107\107\107\046\107\107\046\107\107\107\107\107\046\107\107").toCharArray ();
+ private static char[] lhs = ("\000\024\025\026\026\026\026\026\026\026\026\026\026\026\026\026\026\026\026\026\026\027\027\030\030").toCharArray ();
+ }
+
+ private final static class YYParserState // internal tracking tool
+ {
+ int token; // the current token type
+ Object value; // the current value associated with token
+ int state; // the current scan state
+
+ YYParserState () // EOF token construction
+ {
+ this (0, null, 0);
+ }
+ YYParserState (int token)
+ {
+ this (token, null, 0);
+ }
+ YYParserState (int token, Object value)
+ {
+ this (token, value, 0);
+ }
+ YYParserState (int token, Object value, int state)
+ {
+ this.token = token;
+ this.value = value;
+ this.state = state;
+ }
+ }
+
+ // lookahead stack for the parser
+ private final LinkedList _yyLookaheadStack = new LinkedList ();
+ // state stack for the parser
+ private final Vector _yyStateStack = new Vector (512, 512);
+ // flag that indicates error
+ private boolean _yyInError;
+ // internal track of the argument start
+ private int _yyArgStart;
+ // for passing value from lexer to parser
+ private Object _yyValue;
+
+ private InputStream _yyIs = System.in;
+ private byte[] _yyBuffer;
+ private int _yyBufferSize = 4096;
+ private int _yyMatchStart;
+ private int _yyBufferEnd;
+
+ private int _yyBaseState;
+
+ private int _yyTextStart;
+ private int _yyLength;
+
+ private Stack _yyLexerStack;
+ private Stack _yyInputStack;
+
+
+ /**
+ * Set the current input.
+ *
+ * @param is
+ * the new input.
+ */
+ public void setInput (InputStream is)
+ {
+ _yyIs = is;
+ }
+
+ /**
+ * Obtain the current input.
+ *
+ * @return the current input
+ */
+ public InputStream getInput ()
+ {
+ return _yyIs;
+ }
+
+ /**
+ * Switch the current input to the new input. The old input and already
+ * buffered characters are pushed onto the stack.
+ *
+ * @param is
+ * the new input
+ */
+ public void yyPushInput (InputStream is)
+ {
+ int len = _yyBufferEnd - _yyMatchStart;
+ byte[] leftOver = new byte[len];
+ System.arraycopy (_yyBuffer, _yyMatchStart, leftOver, 0, len);
+
+ Object[] states = new Object[4];
+ states[0] = _yyIs;
+ states[1] = leftOver;
+
+ if (_yyInputStack == null)
+ _yyInputStack = new Stack ();
+ _yyInputStack.push (states);
+
+ _yyIs = is;
+ _yyMatchStart = 0;
+ _yyBufferEnd = 0;
+ }
+
+ /**
+ * Switch the current input to the old input on stack. The currently
+ * buffered characters are inserted infront of the old buffered characters.
+ */
+ public void yyPopInput ()
+ {
+ Object[] states = (Object[])_yyInputStack.pop ();
+ _yyIs = (InputStream)states[0];
+ byte[] leftOver = (byte[])states[1];
+
+ int curLen = _yyBufferEnd - _yyMatchStart;
+
+ if ((leftOver.length + curLen) > _yyBuffer.length)
+ {
+ byte[] newBuffer = new byte[leftOver.length + curLen];
+ System.arraycopy (_yyBuffer, _yyMatchStart, newBuffer, 0, curLen);
+ System.arraycopy (leftOver, 0, newBuffer, curLen, leftOver.length);
+ _yyBuffer = newBuffer;
+ _yyMatchStart = 0;
+ _yyBufferEnd = leftOver.length + curLen;
+ }
+ else
+ {
+ int start = _yyMatchStart;
+ int end = _yyBufferEnd;
+ byte[] buffer = _yyBuffer;
+
+ for (int i = 0; start < end; ++i, ++start)
+ buffer[i] = buffer[start];
+ System.arraycopy (leftOver, 0, buffer, curLen, leftOver.length);
+ _yyMatchStart = 0;
+ _yyBufferEnd = leftOver.length + curLen;
+ }
+ }
+
+ /**
+ * Obtain the number of input objects on the stack.
+ *
+ * @return the number of input objects on the stack.
+ */
+ public int yyInputStackSize ()
+ {
+ return _yyInputStack == null ? 0 : _yyInputStack.size ();
+ }
+
+
+ /**
+ * Get the current token text.
+ * <p>
+ * Avoid calling this function unless it is absolutely necessary since it creates
+ * a copy of the token string. The string length can be found by reading _yyLength
+ * or calling yyLength () function.
+ *
+ * @return the current text token.
+ */
+ public String yyText ()
+ {
+ if (_yyMatchStart == _yyTextStart) // this is the case when we have EOF
+ return null;
+ return new String (_yyBuffer, _yyTextStart, _yyMatchStart - _yyTextStart);
+ }
+
+ /**
+ * Get the current text token's length. Actions specified in the CookCC file
+ * can directly access the variable _yyLength.
+ *
+ * @return the string token length
+ */
+ public int yyLength ()
+ {
+ return _yyLength;
+ }
+
+ /**
+ * Print the current string token to the standard output.
+ */
+ public void echo ()
+ {
+ System.out.print (yyText ());
+ }
+
+ /**
+ * Put all but n characters back to the input stream. Be aware that calling
+ * yyLess (0) is allowed, but be sure to change the state some how to avoid
+ * an endless loop.
+ *
+ * @param n
+ * The number of characters.
+ */
+ protected void yyLess (int n)
+ {
+ if (n < 0)
+ throw new IllegalArgumentException ("yyLess function requires a non-zero value.");
+ if (n > (_yyMatchStart - _yyTextStart))
+ throw new IndexOutOfBoundsException ("yyLess function called with a too large index value " + n + ".");
+ _yyMatchStart = _yyTextStart + n;
+ }
+
+ /**
+ * Set the lexer's current state.
+ *
+ * @param baseState
+ * the base state index
+ */
+ protected void begin (int baseState)
+ {
+ _yyBaseState = baseState;
+ }
+
+ /**
+ * Push the current state onto lexer state onto stack and
+ * begin the new state specified by the user.
+ *
+ * @param newState
+ * the new state.
+ */
+ protected void yyPushLexerState (int newState)
+ {
+ if (_yyLexerStack == null)
+ _yyLexerStack = new Stack ();
+ _yyLexerStack.push (new Integer (_yyBaseState));
+ begin (newState);
+ }
+
+ /**
+ * Restore the previous lexer state.
+ */
+ protected void yyPopLexerState ()
+ {
+ begin (((Integer)_yyLexerStack.pop ()).intValue ());
+ }
+
+
+ // read more data from the input
+ protected boolean yyRefreshBuffer () throws IOException
+ {
+ if (_yyBuffer == null)
+ _yyBuffer = new byte[_yyBufferSize];
+ if (_yyMatchStart > 0)
+ {
+ if (_yyBufferEnd > _yyMatchStart)
+ {
+ System.arraycopy (_yyBuffer, _yyMatchStart, _yyBuffer, 0, _yyBufferEnd - _yyMatchStart);
+ _yyBufferEnd -= _yyMatchStart;
+ _yyMatchStart = 0;
+ }
+ else
+ {
+ _yyMatchStart = 0;
+ _yyBufferEnd = 0;
+ }
+ }
+ else if (_yyBufferEnd == _yyBuffer.length)
+ {
+ byte[] newBuffer = new byte[_yyBuffer.length + _yyBuffer.length / 2];
+ System.arraycopy (_yyBuffer, 0, newBuffer, 0, _yyBufferEnd);
+ _yyBuffer = newBuffer;
+ }
+
+ int readSize = _yyIs.read (_yyBuffer, _yyBufferEnd, _yyBuffer.length - _yyBufferEnd);
+ if (readSize > 0)
+ _yyBufferEnd += readSize;
+ else if (readSize < 0 && !yyWrap ()) // since we are at EOF, call yyWrap (). If the return value of yyWrap is false, refresh buffer again
+ return yyRefreshBuffer ();
+ return readSize >= 0;
+ }
+
+ /**
+ * Reset the internal buffer.
+ */
+ public void yyResetBuffer ()
+ {
+ _yyMatchStart = 0;
+ _yyBufferEnd = 0;
+ }
+
+ /**
+ * Set the internal buffer size. This action can only be performed
+ * when the buffer is empty. Having a large buffer is useful to read
+ * a whole file in to increase the performance sometimes.
+ *
+ * @param bufferSize
+ * the new buffer size.
+ */
+ public void setBufferSize (int bufferSize)
+ {
+ if (_yyBufferEnd > _yyMatchStart)
+ throw new IllegalArgumentException ("Cannot change lexer buffer size at this moment.");
+ _yyBufferSize = bufferSize;
+ _yyMatchStart = 0;
+ _yyBufferEnd = 0;
+ if (_yyBuffer != null && bufferSize != _yyBuffer.length)
+ _yyBuffer = new byte[bufferSize];
+ }
+
+ /**
+ * Call this function to start the scanning of the input.
+ *
+ * @return a token or status value.
+ * @throws IOException
+ * in case of I/O error.
+ */
+ protected int yyLex () throws IOException
+ {
+
+ char[] cc_ecs = cc_lexer.ecs;
+ char[] cc_next = cc_lexer.next;
+ char[] cc_check = cc_lexer.check;
+ char[] cc_base = cc_lexer.base;
+ char[] cc_default = cc_lexer.defaults;
+ char[] cc_meta = cc_lexer.meta;
+ char[] cc_accept = cc_lexer.accept;
+
+ byte[] buffer = _yyBuffer;
+
+ while (true)
+ {
+ // initiate variables necessary for lookup
+ int cc_matchedState = _yyBaseState;
+
+ int matchedLength = 0;
+
+ int internalBufferEnd = _yyBufferEnd;
+ int lookahead = _yyMatchStart;
+
+ int cc_backupMatchedState = cc_matchedState;
+ int cc_backupMatchedLength = 0;
+
+ // the DFA lookup
+ while (true)
+ {
+ // check buffer status
+ if (lookahead < internalBufferEnd)
+ {
+ // now okay to process the character
+ int cc_toState;
+ int symbol = cc_ecs[buffer[lookahead] & 0xff];
+ cc_toState = cc_matchedState;
+ while (cc_check[symbol + cc_base[cc_toState]] != cc_toState)
+ {
+ cc_toState = cc_default[cc_toState];
+ if (cc_toState >= 72)
+ symbol = cc_meta[symbol];
+ }
+ cc_toState = cc_next[symbol + cc_base[cc_toState]];
+
+ if (cc_toState == 0)
+ {
+ cc_matchedState = cc_backupMatchedState;
+ matchedLength = cc_backupMatchedLength;
+ break;
+ }
+
+ cc_matchedState = cc_toState;
+ ++lookahead;
+ ++matchedLength;
+
+ if (cc_accept[cc_matchedState] > 0)
+ {
+ cc_backupMatchedState = cc_toState;
+ cc_backupMatchedLength = matchedLength;
+ }
+ }
+ else
+ {
+ int lookPos = lookahead - _yyMatchStart;
+ boolean refresh = yyRefreshBuffer ();
+ buffer = _yyBuffer;
+ internalBufferEnd = _yyBufferEnd;
+ lookahead = _yyMatchStart + lookPos;
+ if (! refresh)
+ {
+ // <<EOF>>
+ int cc_toState;
+ int symbol = cc_ecs[256];
+ cc_toState = cc_matchedState;
+ while (cc_check[symbol + cc_base[cc_toState]] != cc_toState)
+ {
+ cc_toState = cc_default[cc_toState];
+ if (cc_toState >= 72)
+ symbol = cc_meta[symbol];
+ }
+ cc_toState = cc_next[symbol + cc_base[cc_toState]];
+
+ if (cc_toState != 0)
+ cc_matchedState = cc_toState;
+ else
+ {
+ cc_matchedState = cc_backupMatchedState;
+ matchedLength = cc_backupMatchedLength;
+ }
+ break;
+ }
+ }
+ }
+
+ _yyTextStart = _yyMatchStart;
+ _yyMatchStart += matchedLength;
+ _yyLength = matchedLength;
+
+
+ switch (cc_accept[cc_matchedState])
+ {
+ case 1: // \{
+ {
+ _yyValue = m_this.parseToken (); return OPEN_BRACE;
+ }
+ case 28: break;
+ case 2: // \}
+ {
+ _yyValue = m_this.parseToken (); return CLOSE_BRACE;
+ }
+ case 29: break;
+ case 3: // \[
+ {
+ _yyValue = m_this.parseToken (); return OPEN_BRACKET;
+ }
+ case 30: break;
+ case 4: // \]
+ {
+ _yyValue = m_this.parseToken (); return CLOSE_BRACKET;
+ }
+ case 31: break;
+ case 5: // ,
+ {
+ _yyValue = m_this.parseToken (); return COMMA;
+ }
+ case 32: break;
+ case 6: // :
+ {
+ _yyValue = m_this.parseToken (); return COLON;
+ }
+ case 33: break;
+ case 7: // true
+ {
+ _yyValue = m_this.parseToken (); return TRUE;
+ }
+ case 34: break;
+ case 8: // false
+ {
+ _yyValue = m_this.parseToken (); return FALSE;
+ }
+ case 35: break;
+ case 9: // big
+ {
+ _yyValue = m_this.parseToken (); return BIG;
+ }
+ case 36: break;
+ case 10: // decimal
+ {
+ _yyValue = m_this.parseToken (); return DECIMAL;
+ }
+ case 37: break;
+ case 11: // integer
+ {
+ _yyValue = m_this.parseToken (); return INTEGER;
+ }
+ case 38: break;
+ case 12: // null
+ {
+ _yyValue = m_this.parseToken (); return UNDEFINED;
+ }
+ case 39: break;
+ case 13: // [+-]?0+
+ {
+ _yyValue = m_this.parsePlainValue (); return ZERO_VAL;
+ }
+ case 40: break;
+ case 14: // [+-]?0[0-9]+
+ {
+ _yyValue = m_this.parsePlainValue (); return OCTAL_INT_VAL;
+ }
+ case 41: break;
+ case 15: // 0x[0-9a-fA-F]+
+ {
+ _yyValue = m_this.parsePlainValue (); return HEX_INT_VAL;
+ }
+ case 42: break;
+ case 16: // [+-]0x[0-9a-fA-F]+
+ {
+ _yyValue = m_this.parsePlainValue (); return SIGNED_HEX_INT_VAL;
+ }
+ case 43: break;
+ case 17: // [+-]?[1-9][0-9]*
+ {
+ _yyValue = m_this.parsePlainValue (); return DEC_INT_VAL;
+ }
+ case 44: break;
+ case 18: // [+-]?NaN
+ {
+ _yyValue = m_this.parsePlainValue (); return NAN_VAL;
+ }
+ case 45: break;
+ case 19: // [+-]?Infinity
+ {
+ _yyValue = m_this.parsePlainValue (); return INF_VAL;
+ }
+ case 46: break;
+ case 20: // [+-]?([0-9]+\.[0-9]+([eE][+-]?[0-9]+)?)
+ {
+ _yyValue = m_this.parsePlainValue (); return DEC_VAL;
+ }
+ case 47: break;
+ case 21: // \"([^"\\]+|\\.)*\"
+ {
+ _yyValue = m_this.parseStringValue (); return STR_VAL;
+ }
+ case 48: break;
+ case 22: // [ \t\r\n]+
+ {
+ m_this.ignored ();
+ }
+ case 49: break;
+ case 23: // .
+ {
+ m_this.invalid ();
+ }
+ case 50: break;
+ case 24: // <<EOF>>
+ {
+ m_this.parseEOF (); return 0;
+ }
+ case 51: break;
+ case 25: // .|\n
+ {
+ echo (); // default character action
+ }
+ case 52: break;
+ case 26: // <<EOF>>
+ {
+ return 0; // default EOF action
+ }
+ case 53: break;
+ default:
+ throw new IOException ("Internal error in JSONParser lexer.");
+ }
+
+ }
+ }
+
+
+ /**
+ * Call this function to start parsing.
+ *
+ * @return 0 if everything is okay, or 1 if an error occurred.
+ * @throws IOException
+ * in case of error
+ */
+ public int yyParse () throws IOException
+ {
+ char[] cc_ecs = cc_parser.ecs;
+ char[] cc_next = cc_parser.next;
+ char[] cc_check = cc_parser.check;
+ char[] cc_base = cc_parser.base;
+ char[] cc_default = cc_parser.defaults;
+ char[] cc_gotoDefault = cc_parser.gotoDefault;
+ char[] cc_rule = cc_parser.rule;
+ char[] cc_lhs = cc_parser.lhs;
+
+ LinkedList cc_lookaheadStack = _yyLookaheadStack;
+ Vector cc_stateStack = _yyStateStack;
+
+ if (cc_stateStack.size () == 0)
+ cc_stateStack.add (new YYParserState ());
+
+ int cc_toState = 0;
+
+ for (;;)
+ {
+ YYParserState cc_lookahead;
+
+ int cc_fromState;
+ char cc_ch;
+
+ //
+ // check if there are any lookahead tokens on stack
+ // if not, then call yyLex ()
+ //
+ if (cc_lookaheadStack.size () == 0)
+ {
+ _yyValue = null;
+ int val = yyLex ();
+ cc_lookahead = new YYParserState (val, _yyValue);
+ cc_lookaheadStack.add (cc_lookahead);
+ }
+ else
+ cc_lookahead = (YYParserState)cc_lookaheadStack.getLast ();
+
+ cc_ch = cc_ecs[cc_lookahead.token];
+ cc_fromState = ((YYParserState)cc_stateStack.get (cc_stateStack.size () - 1)).state;
+ int cc_symbol = cc_ch;
+ cc_toState = cc_fromState;
+ while (cc_check[cc_symbol + cc_base[cc_toState]] != cc_toState)
+ {
+ cc_toState = cc_default[cc_toState];
+ if (cc_toState >= 35)
+ cc_symbol = 0;
+ }
+ cc_toState = (short)cc_next[cc_symbol + cc_base[cc_toState]];
+
+
+ //
+ // check the value of toState and determine what to do
+ // with it
+ //
+ if (cc_toState > 0)
+ {
+ // shift
+ cc_lookahead.state = cc_toState;
+ cc_stateStack.add (cc_lookahead);
+ cc_lookaheadStack.removeLast ();
+ continue;
+ }
+ else if (cc_toState == 0)
+ {
+ // error
+ if (_yyInError)
+ {
+ // first check if the error is at the lookahead
+ if (cc_ch == 1)
+ {
+ // so we need to reduce the stack until a state with reduceable
+ // action is found
+ if (_yyStateStack.size () > 1)
+ _yyStateStack.setSize (_yyStateStack.size () - 1);
+ else
+ return 1; // can't do much we exit the parser
+ }
+ else
+ {
+ // this means that we need to dump the lookahead.
+ if (cc_ch == 0) // can't do much with EOF;
+ return 1;
+ cc_lookaheadStack.removeLast ();
+ }
+ continue;
+ }
+ else
+ {
+ if (yyParseError (cc_lookahead.token))
+ return 1;
+ _yyLookaheadStack.add (new YYParserState (1, _yyValue));
+ _yyInError = true;
+ continue;
+ }
+ }
+ _yyInError = false;
+ // now the reduce action
+ int cc_ruleState = -cc_toState;
+
+ _yyArgStart = cc_stateStack.size () - cc_rule[cc_ruleState] - 1;
+ //
+ // find the state that said need this non-terminal
+ //
+ cc_fromState = ((YYParserState)cc_stateStack.get (_yyArgStart)).state;
+
+ //
+ // find the state to goto after shifting the non-terminal
+ // onto the stack.
+ //
+ if (cc_ruleState == 1)
+ cc_toState = 0; // reset the parser
+ else
+ {
+ cc_toState = cc_fromState + 36;
+ int cc_tmpCh = cc_lhs[cc_ruleState] - 20;
+ while (cc_check[cc_tmpCh + cc_base[cc_toState]] != cc_toState)
+ cc_toState = cc_gotoDefault[cc_toState - 36];
+ cc_toState = cc_next[cc_tmpCh + cc_base[cc_toState]];
+ }
+
+ _yyValue = null;
+
+ switch (cc_ruleState)
+ {
+ case 1: // accept
+ return 0;
+ case 2: // complete : node
+ {
+ return m_this.parse ((org.jboss.dmr.ModelNode)yyGetValue (1));
+ }
+ case 27: break;
+ case 3: // node : ZERO_VAL
+ {
+ _yyValue = m_this.parseZero ();
+ }
+ case 28: break;
+ case 4: // node : DEC_VAL
+ {
+ _yyValue = m_this.parseBigDecimal ((java.lang.String)yyGetValue (1));
+ }
+ case 29: break;
+ case 5: // node : NAN_VAL
+ {
+ _yyValue = m_this.parseNaN ();
+ }
+ case 30: break;
+ case 6: // node : INF_VAL
+ {
+ _yyValue = m_this.parseInf ((java.lang.String)yyGetValue (1));
+ }
+ case 31: break;
+ case 7: // node : DEC_INT_VAL
+ {
+ _yyValue = m_this.parseDecInt ((java.lang.String)yyGetValue (1));
+ }
+ case 32: break;
+ case 8: // node : OCTAL_INT_VAL
+ {
+ _yyValue = m_this.parseOctal ((java.lang.String)yyGetValue (1));
+ }
+ case 33: break;
+ case 9: // node : HEX_INT_VAL
+ {
+ _yyValue = m_this.parseHex ((java.lang.String)yyGetValue (1));
+ }
+ case 34: break;
+ case 10: // node : SIGNED_HEX_INT_VAL
+ {
+ _yyValue = m_this.parseHexSigned ((java.lang.String)yyGetValue (1));
+ }
+ case 35: break;
+ case 11: // node : TRUE
+ {
+ _yyValue = m_this.parseTrue ();
+ }
+ case 36: break;
+ case 12: // node : FALSE
+ {
+ _yyValue = m_this.parseFalse ();
+ }
+ case 37: break;
+ case 13: // node : OPEN_BRACKET CLOSE_BRACKET
+ {
+ _yyValue = m_this.parseEmptyList ();
+ }
+ case 38: break;
+ case 14: // node : list CLOSE_BRACKET
+ {
+ _yyValue = m_this.finishList ((org.jboss.dmr.ModelNode)yyGetValue (1));
+ }
+ case 39: break;
+ case 15: // node : list COMMA CLOSE_BRACKET
+ {
+ _yyValue = m_this.finishList ((org.jboss.dmr.ModelNode)yyGetValue (1));
+ }
+ case 40: break;
+ case 16: // node : OPEN_BRACE CLOSE_BRACE
+ {
+ _yyValue = m_this.parseEmptyObject ();
+ }
+ case 41: break;
+ case 17: // node : object CLOSE_BRACE
+ {
+ _yyValue = m_this.finishObject ((org.jboss.dmr.ModelNode)yyGetValue (1));
+ }
+ case 42: break;
+ case 18: // node : object COMMA CLOSE_BRACE
+ {
+ _yyValue = m_this.finishObject ((org.jboss.dmr.ModelNode)yyGetValue (1));
+ }
+ case 43: break;
+ case 19: // node : STR_VAL
+ {
+ _yyValue = m_this.parseString ((java.lang.String)yyGetValue (1));
+ }
+ case 44: break;
+ case 20: // node : UNDEFINED
+ {
+ _yyValue = m_this.parseUndefined ();
+ }
+ case 45: break;
+ case 21: // list : OPEN_BRACKET node
+ {
+ _yyValue = m_this.parseStartList ((org.jboss.dmr.ModelNode)yyGetValue (2));
+ }
+ case 46: break;
+ case 22: // list : list COMMA node
+ {
+ _yyValue = m_this.parseListItem ((org.jboss.dmr.ModelNode)yyGetValue (1), (org.jboss.dmr.ModelNode)yyGetValue (3));
+ }
+ case 47: break;
+ case 23: // object : OPEN_BRACE STR_VAL COLON node
+ {
+ _yyValue = m_this.parseStartObject ((java.lang.String)yyGetValue (2), (org.jboss.dmr.ModelNode)yyGetValue (4));
+ }
+ case 48: break;
+ case 24: // object : object COMMA STR_VAL COLON node
+ {
+ _yyValue = m_this.parseObjectItem ((org.jboss.dmr.ModelNode)yyGetValue (1), (java.lang.String)yyGetValue (3), (org.jboss.dmr.ModelNode)yyGetValue (5));
+ }
+ case 49: break;
+ default:
+ throw new IOException ("Internal error in JSONParser parser.");
+ }
+
+ YYParserState cc_reduced = new YYParserState (-cc_ruleState, _yyValue, cc_toState);
+ _yyValue = null;
+ cc_stateStack.setSize (_yyArgStart + 1);
+ cc_stateStack.add (cc_reduced);
+ }
+ }
+
+ /**
+ * This function is used by the error handling grammars to check the immediate
+ * lookahead token on the stack.
+ *
+ * @return the top of lookahead stack.
+ */
+ protected YYParserState yyPeekLookahead ()
+ {
+ return (YYParserState)_yyLookaheadStack.getLast ();
+ }
+
+ /**
+ * This function is used by the error handling grammars to pop an unwantted
+ * token from the lookahead stack.
+ */
+ protected void yyPopLookahead ()
+ {
+ _yyLookaheadStack.removeLast ();
+ }
+
+ /**
+ * Clear the error flag. If this flag is present and the parser again sees
+ * another error transition, it would immediately calls yyParseError, which
+ * would by default exit the parser.
+ * <p>
+ * This function is used in error recovery.
+ */
+ protected void yyClearError ()
+ {
+ _yyInError = false;
+ }
+
+ /**
+ * This function reports error and return true if critical error occurred, or
+ * false if the error has been successfully recovered. IOException is an optional
+ * choice of reporting error.
+ *
+ * @param terminal
+ * the terminal that caused the error.
+ * @return true if irrecoverable error occurred. Or simply throw an IOException.
+ * false if the parsing can be continued to check for specific
+ * error tokens.
+ * @throws IOException
+ * in case of error.
+ */
+ protected boolean yyParseError (int terminal) throws IOException
+ {
+ return false;
+ }
+
+ /**
+ * Gets the object value associated with the symbol at the argument's position.
+ *
+ * @param arg
+ * the symbol position starting from 1.
+ * @return the object value associated with symbol.
+ */
+ protected Object yyGetValue (int arg)
+ {
+ return ((YYParserState)_yyStateStack.get (_yyArgStart + arg)).value;
+ }
+
+ /**
+ * Set the object value for the current non-terminal being reduced.
+ *
+ * @param value
+ * the object value for the current non-terminal.
+ */
+ protected void yySetValue (Object value)
+ {
+ _yyValue = value;
+ }
+
+
+
+
+ private final org.jboss.dmr.JSONParserImpl m_this = (org.jboss.dmr.JSONParserImpl)this;
+
+ /**
+ * This function is used to change the initial state for the lexer.
+ *
+ * @param state
+ * the name of the state
+ */
+ protected void begin (String state)
+ {
+ if ("INITIAL".equals (state))
+ {
+ begin (INITIAL);
+ return;
+ }
+ throw new IllegalArgumentException ("Unknown lexer state: " + state);
+ }
+
+ /**
+ * Push the current state onto lexer state onto stack and
+ * begin the new state specified by the user.
+ *
+ * @param state
+ * the new state.
+ */
+ protected void yyPushLexerState (String state)
+ {
+ if ("INITIAL".equals (state))
+ {
+ yyPushLexerState (INITIAL);
+ return;
+ }
+ throw new IllegalArgumentException ("Unknown lexer state: " + state);
+ }
+
+ /**
+ * Check if there are more inputs. This function is called when EOF is
+ * encountered.
+ *
+ * @return true to indicate no more inputs.
+ * @throws IOException
+ * in case of an IO error
+ */
+ protected boolean yyWrap () throws IOException
+ {
+ return true;
+ }
+
+
+/*
+ * lexer properties:
+ * unicode = false
+ * bol = false
+ * backup = true
+ * cases = 26
+ * table = compressed
+ * ecs = 37
+ * states = 72
+ * max symbol value = 256
+ *
+ * memory usage:
+ * full table = 18504
+ * ecs table = 2921
+ * next = 143
+ * check = 143
+ * default = 75
+ * meta = 37
+ * compressed table = 655
+ *
+ * parser properties:
+ * symbols = 25
+ * max terminal = 276
+ * used terminals = 20
+ * non-terminals = 5
+ * rules = 24
+ * shift/reduce conflicts = 0
+ * reduct/reduce conflicts = 0
+ *
+ * memory usage:
+ * ecs table = 1152
+ * compressed table = 743
+ */
+}
diff --git a/src/main/java/org/jboss/dmr/Parser.java b/src/main/java/org/jboss/dmr/Parser.java
new file mode 100644
index 0000000..9d7dbf4
--- /dev/null
+++ b/src/main/java/org/jboss/dmr/Parser.java
@@ -0,0 +1,1113 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2011, Red Hat, Inc., and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.dmr;
+
+import java.io.IOException;
+import java.io.InputStream;
+
+import java.util.LinkedList;
+import java.util.Vector;
+import java.util.Stack;
+
+/**
+ * @author <a href="mailto:david.lloyd@redhat.com">David M. Lloyd</a>
+ */
+public abstract class Parser
+{
+ protected final static int OPEN_BRACE = 256;
+ protected final static int CLOSE_BRACE = 257;
+ protected final static int OPEN_BRACKET = 258;
+ protected final static int CLOSE_BRACKET = 259;
+ protected final static int OPEN_PAREN = 260;
+ protected final static int CLOSE_PAREN = 261;
+ protected final static int ARROW = 262;
+ protected final static int COMMA = 263;
+ protected final static int BIG = 264;
+ protected final static int BYTES = 265;
+ protected final static int INTEGER = 266;
+ protected final static int DECIMAL = 267;
+ protected final static int EXPRESSION = 268;
+ protected final static int UNDEFINED = 269;
+ protected final static int TRUE = 270;
+ protected final static int FALSE = 271;
+ protected final static int INT_VAL = 272;
+ protected final static int INT_HEX_VAL = 273;
+ protected final static int LONG_VAL = 274;
+ protected final static int LONG_HEX_VAL = 275;
+ protected final static int DOUBLE_SPECIAL_VAL = 276;
+ protected final static int DEC_VAL = 277;
+ protected final static int STR_VAL = 278;
+ protected final static int TYPE_VAL = 279;
+
+ protected final static int INITIAL = 0;
+
+ // an internal class for lazy initiation
+ private final static class cc_lexer
+ {
+ private static char[] accept = ("\000\032\031\032\005\006\007\032\023\023\032\032\032\032\032\032\032\032\032\032\032\032\003\004\032\032\032\032\032\032\032\001\002\033\000\030\000\000\000\000\021\000\010\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\026\024\000\000\000\000\000\027\000\000\000\025\000\000\000\000\000\013\000\000\000\000\000\000\000\000\022\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011\000\000\026\000\000\000\000\000\000\000\000\000\000\014\000\000\012\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015\000\016\000\000\000\000\000\000\000\000\000\000\000\020\000\000\017").toCharArray ();
+ private static char[] ecs = ("\000\000\000\000\000\000\000\000\000\001\002\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\003\000\000\000\000\000\004\005\000\000\006\007\010\000\011\012\012\012\012\012\012\012\012\012\000\000\000\013\014\000\000\015\016\017\020\021\022\023\000\024\025\000\026\027\030\031\032\000\033\034\035\036\000\000\037\040\000\041\042\043\000\044\000\045\046\047\050\051\052\053\000\054\000\000\055\056\057\060\061\000\062\063\064\065\000\000\066\067\000\070\000\071\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\072").toCharArray ();
+ private static char[] base = ("\116\000\000\000\000\000\000\003\000\001\002\000\003\000\000\001\000\001\003\006\006\017\000\000\002\001\002\003\013\011\015\000\000\000\000\000\002\016\000\065\000\043\000\030\047\044\044\051\047\033\052\057\161\165\162\161\163\176\144\134\152\141\146\140\140\156\000\u0081\164\u0083\u0089\u008d\u0081\000\161\000\u008b\000\u008e\u0086\u008d\u0091\u0092\000\173\171\164\164\177\u0080\u0081\011\000\015\u009a\u0090\u0097\u009d\u0080\u00a1\u00a0\u009a\u00a1\u0081\u0087\u008d\u008e\u008d\000\u008f\000\000\u00a9\u00a3\u00af\000\u00a1\u0092\000\u00a4\000\u00ac\000\u009c\u008f\000\u009a\u0098\u00b6\u00a9\u00af\u00ac\u0095\u00ad\u00b3\u009f\u009a\u009c\u00a0\u00bc\u00c0\u00be\u009c\u00b4\u00c4\000\u00aa\000\u00ae\u00c1\u00c6\u00c1\u00cb\u00ac\u00b5\u00d1\u00ce\000\u00b1\000\u00cb\u00c7\000\000\u00e3").toCharArray ();
+ private static char[] next = ("\042\002\002\043\000\042\000\000\047\011\011\000\010\011\052\065\156\133\157\157\053\062\050\045\060\054\063\046\056\160\066\057\055\161\044\067\042\064\070\071\076\133\074\104\103\103\072\061\103\103\103\103\103\103\051\000\075\073\077\100\101\061\102\102\105\106\107\110\111\112\113\114\103\103\103\103\103\103\001\002\002\003\004\005\006\007\001\010\011\012\001\001\013\001\014\015\001\001\016\001\017\001\020\021\022\001\023\024\025\001\001\026\001\027\001\001\030\001\031\032\033\001\034\001\001\001\001\001\001\001\035\036\001\001\037\040\041\115\116\117\120\121\122\123\124\125\126\127\130\131\132\134\135\136\137\140\141\142\111\143\144\145\111\146\147\150\151\152\153\154\155\162\111\163\164\165\166\167\170\171\172\173\174\175\176\177\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008a\u008b\u008c\111\u008d\u008e\u008f\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\115\111\u0098\u0099\u009a\u009b\u009c\u009d\111\u009e\u009f\u00a0\u00a1\u00a2\111\111\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000").toCharArray ();
+ private static char[] check = ("\u00a3\002\002\003\044\044\u00a4\156\010\010\010\u00a4\007\007\012\021\133\102\133\133\013\017\010\007\016\013\017\007\014\135\022\015\013\135\003\023\044\020\024\025\033\102\031\053\051\051\030\016\051\051\051\051\051\051\010\011\032\030\034\035\036\045\047\047\054\055\056\057\060\061\062\063\051\051\051\051\051\051\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\064\065\066\067\070\071\072\073\074\075\076\077\100\101\103\104\105\106\107\110\112\114\116\117\120\121\122\124\125\126\127\130\131\132\136\137\140\141\142\143\144\145\146\147\150\151\152\153\155\160\161\162\164\165\167\171\173\174\176\177\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008a\u008b\u008c\u008d\u008e\u008f\u0090\u0092\u0094\u0095\u0096\u0097\u0098\u0099\u009a\u009b\u009c\u009e\u00a0\u00a1\u00a4\u00a4\u00a4\u00a4\u00a4\u00a4\u00a4\u00a4\u00a4\u00a4\u00a4\u00a4\u00a4\u00a4\u00a4\u00a4\u00a4\u00a4\u00a4\u00a4\u00a4\u00a4\u00a4\u00a4\u00a4\u00a4\u00a4\u00a4\u00a4\u00a4\u00a4\u00a4\u00a4\u00a4\u00a4\u00a4\u00a4\u00a4\u00a4\u00a4\u00a4").toCharArray ();
+ private static char[] defaults = ("\u00a4\u00a4\001\u00a3\u00a4\u00a4\u00a4\001\001\010\001\001\001\001\001\001\001\001\001\001\001\001\u00a4\u00a4\001\001\001\001\001\001\001\u00a4\u00a4\u00a4\003\u00a4\003\001\020\001\u00a4\001\u00a4\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\047\051\001\001\001\001\001\u00a4\001\060\001\u00a4\001\001\001\001\001\u00a4\001\001\001\001\001\001\001\001\u00a4\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\u00a4\001\133\156\001\001\001\121\001\001\060\001\114\001\u00a4\001\001\u00a4\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\u00a4\001\u00a4\001\001\001\001\001\001\001\001\001\u0082\001\u00a4\001\001\u00a4\u00a4\u00a4").toCharArray ();
+ private static char[] meta = ("\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001").toCharArray ();
+ }
+
+ // an internal class for lazy initiation
+ private final static class cc_parser
+ {
+ private static char[] rule = ("\000\001\001\003\003\003\001\001\002\003\003\001\002\001\001\001\001\002\002\003\002\002\003\005\001\001\001\003\003\003\003\002\003\004\005").toCharArray ();
+ private static char[] ecs = ("\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\000\026\027\030").toCharArray ();
+ private static char[] base = ("\031\060\017\001\003\000\007\u00d4\111\112\124\125\137\140\152\153\165\012\000\005\u00d5\010\166\032\u0080\004\060\u00ca\017\000\u0081\u008b\003\u008c\067\u0096\002\000\000\u0097\u00a1\u00a2\u00ac\035\064\u00ad\u00b4\u00b5\u00bc\060\u00c4\103\u00b7\u00d8\000\u00cc\u00bf\u00e2\u00f0\u00fc\u00f5\u00fc\u00fc\u00fc\u00fc\u00fc\u00fc\u00fc\u00fc\u00fc\u00fc\u00fc\u00fc\u00fc\u00fc\u00fc\u00fc\u00fc\u00fc\u00fc\u00fc\u00fc\u00fc\u00fc\u00fc\u00fc\u00fc\u00fc\u00fc\u00fc\u00fc\u00fc\u00f6\u00fc\u00fc\u00f7\u00f8\u00fc\u00fc\u00fc\u00fc\u00fc\u00fc\u00fc\u00fc\u00fc\u00fc\u00fc\u00fc\u00fc\u00fc\u00fc\u00f9\u00fc\u00fc\u00fc").toCharArray ();
+ private static char[] next = ("\ufffe\000\035\052\000\062\055\000\037\uffe1\uffff\043\000\uffe1\040\033\034\044\053\054\030\056\057\000\032\063\000\001\000\002\036\003\uffe5\050\045\004\005\051\uffe5\006\007\010\011\012\013\014\015\016\017\020\000\026\000\uffe0\000\uffe4\046\uffe0\000\000\060\uffe4\000\000\000\000\000\000\000\000\000\027\000\ufffa\ufff9\066\ufffa\ufff9\ufffa\ufff9\ufffa\ufff9\ufffa\ufff9\ufff3\ufff2\000\ufff3\ufff2\ufff3\ufff2\ufff3\ufff2\ufff3\ufff2\ufff1\ufff0\000\ufff1\ufff0\ufff1\ufff0\ufff1\ufff0\ufff1\ufff0\ufff5\uffe8\000\ufff5\uffe8\ufff5\uffe8\ufff5\uffe8\ufff5\uffe8\uffe7\uffec\000\uffe7\uffec\uffe7\uffec\uffe7\uffec\uffe7\uffec\uffef\ufff4\000\uffef\ufff4\uffef\ufff4\uffef\ufff4\uffef\ufff4\ufff8\uffee\000\ufff8\uffee\ufff8\uffee\ufff8\uffee\ufff8\uffee\uffeb\ufffb\000\uffeb\ufffb\uffeb\ufffb\uffeb\ufffb\uffeb\ufffb\ufffc\ufffd\000\ufffc\ufffd\ufffc\ufffd\ufffc\ufffd\ufffc\ufffd\ufff6\ufff7\000\ufff6\ufff7\ufff6\ufff7\ufff6\ufff7\ufff6\ufff7\uffe3\uffe2\000\uffdf\000\uffed\uffe3\uffe2\uffed\uffdf\uffed\uffde\uffed\uffea\uffed\000\uffea\uffde\uffea\000\uffea\uffe9\uffea\000\uffe9\000\uffe9\000\uffe9\uffe6\uffe9\000\uffe6\000\uffe6\041\uffe6\047\uffe6\042\067\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021\022\023\024\025\000\031\061\064\065\070\000\000\000\000\000\000").toCharArray ();
+ private static char[] check = ("\022\071\005\035\003\044\040\023\023\031\021\025\021\031\023\004\004\025\035\035\002\040\040\005\003\044\004\000\027\000\006\000\053\034\027\000\000\034\053\000\000\000\000\000\000\000\000\000\000\000\001\001\001\061\001\054\032\061\001\001\042\054\001\001\001\001\001\001\001\001\001\001\001\010\011\063\010\011\010\011\010\011\010\011\012\013\071\012\013\012\013\012\013\012\013\014\015\071\014\015\014\015\014\015\014\015\016\017\071\016\017\016\017\016\017\016\017\020\026\071\020\026\020\026\020\026\020\026\030\036\071\030\036\030\036\030\036\030\036\037\041\071\037\041\037\041\037\041\037\041\043\047\071\043\047\043\047\043\047\043\047\050\051\071\050\051\050\051\050\051\050\051\052\055\071\052\055\052\055\052\055\052\055\056\057\071\064\071\060\056\057\060\064\060\070\060\062\060\071\062\070\062\071\062\067\062\071\067\071\067\071\067\007\067\007\007\024\007\024\007\033\007\024\065\065\033\071\071\071\071\071\071\071\071\071\071\071\071\071\071\071\072\072\072\072\072\074\074\134\137\140\160\163\163\163\163\163\163").toCharArray ();
+ private static char[] defaults = ("\071\000\000\001\003\003\003\005\007\007\007\007\007\007\007\007\007\005\021\005\023\023\007\005\007\024\027\003\033\033\007\007\033\007\000\007\001\000\000\007\007\007\007\023\023\007\023\023\007\024\007\027\023\027\000\007\023\071").toCharArray ();
+ private static char[] gotoDefault = ("\163\163\072\163\163\163\163\163\163\163\163\163\163\163\163\163\163\163\163\163\163\163\163\163\163\163\163\163\163\163\163\163\163\163\074\163\163\074\074\163\163\163\163\163\163\163\163\163\163\163\163\163\163\163\074\163\163\163").toCharArray ();
+ private static char[] lhs = ("\000\031\032\033\033\033\033\033\033\033\033\033\033\033\033\033\033\033\033\033\033\033\033\033\033\033\033\034\034\034\034\035\035\036\036").toCharArray ();
+ }
+
+ private final static class YYParserState // internal tracking tool
+ {
+ int token; // the current token type
+ Object value; // the current value associated with token
+ int state; // the current scan state
+
+ YYParserState () // EOF token construction
+ {
+ this (0, null, 0);
+ }
+ YYParserState (int token)
+ {
+ this (token, null, 0);
+ }
+ YYParserState (int token, Object value)
+ {
+ this (token, value, 0);
+ }
+ YYParserState (int token, Object value, int state)
+ {
+ this.token = token;
+ this.value = value;
+ this.state = state;
+ }
+ }
+
+ // lookahead stack for the parser
+ private final LinkedList _yyLookaheadStack = new LinkedList ();
+ // state stack for the parser
+ private final Vector _yyStateStack = new Vector (512, 512);
+ // flag that indicates error
+ private boolean _yyInError;
+ // internal track of the argument start
+ private int _yyArgStart;
+ // for passing value from lexer to parser
+ private Object _yyValue;
+
+ private InputStream _yyIs = System.in;
+ private byte[] _yyBuffer;
+ private int _yyBufferSize = 4096;
+ private int _yyMatchStart;
+ private int _yyBufferEnd;
+
+ private int _yyBaseState;
+
+ private int _yyTextStart;
+ private int _yyLength;
+
+ private Stack _yyLexerStack;
+ private Stack _yyInputStack;
+
+
+ /**
+ * Set the current input.
+ *
+ * @param is
+ * the new input.
+ */
+ public void setInput (InputStream is)
+ {
+ _yyIs = is;
+ }
+
+ /**
+ * Obtain the current input.
+ *
+ * @return the current input
+ */
+ public InputStream getInput ()
+ {
+ return _yyIs;
+ }
+
+ /**
+ * Switch the current input to the new input. The old input and already
+ * buffered characters are pushed onto the stack.
+ *
+ * @param is
+ * the new input
+ */
+ public void yyPushInput (InputStream is)
+ {
+ int len = _yyBufferEnd - _yyMatchStart;
+ byte[] leftOver = new byte[len];
+ System.arraycopy (_yyBuffer, _yyMatchStart, leftOver, 0, len);
+
+ Object[] states = new Object[4];
+ states[0] = _yyIs;
+ states[1] = leftOver;
+
+ if (_yyInputStack == null)
+ _yyInputStack = new Stack ();
+ _yyInputStack.push (states);
+
+ _yyIs = is;
+ _yyMatchStart = 0;
+ _yyBufferEnd = 0;
+ }
+
+ /**
+ * Switch the current input to the old input on stack. The currently
+ * buffered characters are inserted infront of the old buffered characters.
+ */
+ public void yyPopInput ()
+ {
+ Object[] states = (Object[])_yyInputStack.pop ();
+ _yyIs = (InputStream)states[0];
+ byte[] leftOver = (byte[])states[1];
+
+ int curLen = _yyBufferEnd - _yyMatchStart;
+
+ if ((leftOver.length + curLen) > _yyBuffer.length)
+ {
+ byte[] newBuffer = new byte[leftOver.length + curLen];
+ System.arraycopy (_yyBuffer, _yyMatchStart, newBuffer, 0, curLen);
+ System.arraycopy (leftOver, 0, newBuffer, curLen, leftOver.length);
+ _yyBuffer = newBuffer;
+ _yyMatchStart = 0;
+ _yyBufferEnd = leftOver.length + curLen;
+ }
+ else
+ {
+ int start = _yyMatchStart;
+ int end = _yyBufferEnd;
+ byte[] buffer = _yyBuffer;
+
+ for (int i = 0; start < end; ++i, ++start)
+ buffer[i] = buffer[start];
+ System.arraycopy (leftOver, 0, buffer, curLen, leftOver.length);
+ _yyMatchStart = 0;
+ _yyBufferEnd = leftOver.length + curLen;
+ }
+ }
+
+ /**
+ * Obtain the number of input objects on the stack.
+ *
+ * @return the number of input objects on the stack.
+ */
+ public int yyInputStackSize ()
+ {
+ return _yyInputStack == null ? 0 : _yyInputStack.size ();
+ }
+
+
+ /**
+ * Get the current token text.
+ * <p>
+ * Avoid calling this function unless it is absolutely necessary since it creates
+ * a copy of the token string. The string length can be found by reading _yyLength
+ * or calling yyLength () function.
+ *
+ * @return the current text token.
+ */
+ public String yyText ()
+ {
+ if (_yyMatchStart == _yyTextStart) // this is the case when we have EOF
+ return null;
+ return new String (_yyBuffer, _yyTextStart, _yyMatchStart - _yyTextStart);
+ }
+
+ /**
+ * Get the current text token's length. Actions specified in the CookCC file
+ * can directly access the variable _yyLength.
+ *
+ * @return the string token length
+ */
+ public int yyLength ()
+ {
+ return _yyLength;
+ }
+
+ /**
+ * Print the current string token to the standard output.
+ */
+ public void echo ()
+ {
+ System.out.print (yyText ());
+ }
+
+ /**
+ * Put all but n characters back to the input stream. Be aware that calling
+ * yyLess (0) is allowed, but be sure to change the state some how to avoid
+ * an endless loop.
+ *
+ * @param n
+ * The number of characters.
+ */
+ protected void yyLess (int n)
+ {
+ if (n < 0)
+ throw new IllegalArgumentException ("yyLess function requires a non-zero value.");
+ if (n > (_yyMatchStart - _yyTextStart))
+ throw new IndexOutOfBoundsException ("yyLess function called with a too large index value " + n + ".");
+ _yyMatchStart = _yyTextStart + n;
+ }
+
+ /**
+ * Set the lexer's current state.
+ *
+ * @param baseState
+ * the base state index
+ */
+ protected void begin (int baseState)
+ {
+ _yyBaseState = baseState;
+ }
+
+ /**
+ * Push the current state onto lexer state onto stack and
+ * begin the new state specified by the user.
+ *
+ * @param newState
+ * the new state.
+ */
+ protected void yyPushLexerState (int newState)
+ {
+ if (_yyLexerStack == null)
+ _yyLexerStack = new Stack ();
+ _yyLexerStack.push (new Integer (_yyBaseState));
+ begin (newState);
+ }
+
+ /**
+ * Restore the previous lexer state.
+ */
+ protected void yyPopLexerState ()
+ {
+ begin (((Integer)_yyLexerStack.pop ()).intValue ());
+ }
+
+
+ // read more data from the input
+ protected boolean yyRefreshBuffer () throws IOException
+ {
+ if (_yyBuffer == null)
+ _yyBuffer = new byte[_yyBufferSize];
+ if (_yyMatchStart > 0)
+ {
+ if (_yyBufferEnd > _yyMatchStart)
+ {
+ System.arraycopy (_yyBuffer, _yyMatchStart, _yyBuffer, 0, _yyBufferEnd - _yyMatchStart);
+ _yyBufferEnd -= _yyMatchStart;
+ _yyMatchStart = 0;
+ }
+ else
+ {
+ _yyMatchStart = 0;
+ _yyBufferEnd = 0;
+ }
+ }
+ else if (_yyBufferEnd == _yyBuffer.length)
+ {
+ byte[] newBuffer = new byte[_yyBuffer.length + _yyBuffer.length / 2];
+ System.arraycopy (_yyBuffer, 0, newBuffer, 0, _yyBufferEnd);
+ _yyBuffer = newBuffer;
+ }
+
+ int readSize = _yyIs.read (_yyBuffer, _yyBufferEnd, _yyBuffer.length - _yyBufferEnd);
+ if (readSize > 0)
+ _yyBufferEnd += readSize;
+ else if (readSize < 0 && !yyWrap ()) // since we are at EOF, call yyWrap (). If the return value of yyWrap is false, refresh buffer again
+ return yyRefreshBuffer ();
+ return readSize >= 0;
+ }
+
+ /**
+ * Reset the internal buffer.
+ */
+ public void yyResetBuffer ()
+ {
+ _yyMatchStart = 0;
+ _yyBufferEnd = 0;
+ }
+
+ /**
+ * Set the internal buffer size. This action can only be performed
+ * when the buffer is empty. Having a large buffer is useful to read
+ * a whole file in to increase the performance sometimes.
+ *
+ * @param bufferSize
+ * the new buffer size.
+ */
+ public void setBufferSize (int bufferSize)
+ {
+ if (_yyBufferEnd > _yyMatchStart)
+ throw new IllegalArgumentException ("Cannot change lexer buffer size at this moment.");
+ _yyBufferSize = bufferSize;
+ _yyMatchStart = 0;
+ _yyBufferEnd = 0;
+ if (_yyBuffer != null && bufferSize != _yyBuffer.length)
+ _yyBuffer = new byte[bufferSize];
+ }
+
+ /**
+ * Call this function to start the scanning of the input.
+ *
+ * @return a token or status value.
+ * @throws IOException
+ * in case of I/O error.
+ */
+ protected int yyLex () throws IOException
+ {
+
+ char[] cc_ecs = cc_lexer.ecs;
+ char[] cc_next = cc_lexer.next;
+ char[] cc_check = cc_lexer.check;
+ char[] cc_base = cc_lexer.base;
+ char[] cc_default = cc_lexer.defaults;
+ char[] cc_meta = cc_lexer.meta;
+ char[] cc_accept = cc_lexer.accept;
+
+ byte[] buffer = _yyBuffer;
+
+ while (true)
+ {
+ // initiate variables necessary for lookup
+ int cc_matchedState = _yyBaseState;
+
+ int matchedLength = 0;
+
+ int internalBufferEnd = _yyBufferEnd;
+ int lookahead = _yyMatchStart;
+
+ int cc_backupMatchedState = cc_matchedState;
+ int cc_backupMatchedLength = 0;
+
+ // the DFA lookup
+ while (true)
+ {
+ // check buffer status
+ if (lookahead < internalBufferEnd)
+ {
+ // now okay to process the character
+ int cc_toState;
+ int symbol = cc_ecs[buffer[lookahead] & 0xff];
+ cc_toState = cc_matchedState;
+ while (cc_check[symbol + cc_base[cc_toState]] != cc_toState)
+ {
+ cc_toState = cc_default[cc_toState];
+ if (cc_toState >= 163)
+ symbol = cc_meta[symbol];
+ }
+ cc_toState = cc_next[symbol + cc_base[cc_toState]];
+
+ if (cc_toState == 0)
+ {
+ cc_matchedState = cc_backupMatchedState;
+ matchedLength = cc_backupMatchedLength;
+ break;
+ }
+
+ cc_matchedState = cc_toState;
+ ++lookahead;
+ ++matchedLength;
+
+ if (cc_accept[cc_matchedState] > 0)
+ {
+ cc_backupMatchedState = cc_toState;
+ cc_backupMatchedLength = matchedLength;
+ }
+ }
+ else
+ {
+ int lookPos = lookahead - _yyMatchStart;
+ boolean refresh = yyRefreshBuffer ();
+ buffer = _yyBuffer;
+ internalBufferEnd = _yyBufferEnd;
+ lookahead = _yyMatchStart + lookPos;
+ if (! refresh)
+ {
+ // <<EOF>>
+ int cc_toState;
+ int symbol = cc_ecs[256];
+ cc_toState = cc_matchedState;
+ while (cc_check[symbol + cc_base[cc_toState]] != cc_toState)
+ {
+ cc_toState = cc_default[cc_toState];
+ if (cc_toState >= 163)
+ symbol = cc_meta[symbol];
+ }
+ cc_toState = cc_next[symbol + cc_base[cc_toState]];
+
+ if (cc_toState != 0)
+ cc_matchedState = cc_toState;
+ else
+ {
+ cc_matchedState = cc_backupMatchedState;
+ matchedLength = cc_backupMatchedLength;
+ }
+ break;
+ }
+ }
+ }
+
+ _yyTextStart = _yyMatchStart;
+ _yyMatchStart += matchedLength;
+ _yyLength = matchedLength;
+
+
+ switch (cc_accept[cc_matchedState])
+ {
+ case 1: // \{
+ {
+ _yyValue = m_this.parseToken (); return OPEN_BRACE;
+ }
+ case 31: break;
+ case 2: // \}
+ {
+ _yyValue = m_this.parseToken (); return CLOSE_BRACE;
+ }
+ case 32: break;
+ case 3: // \[
+ {
+ _yyValue = m_this.parseToken (); return OPEN_BRACKET;
+ }
+ case 33: break;
+ case 4: // \]
+ {
+ _yyValue = m_this.parseToken (); return CLOSE_BRACKET;
+ }
+ case 34: break;
+ case 5: // \(
+ {
+ _yyValue = m_this.parseToken (); return OPEN_PAREN;
+ }
+ case 35: break;
+ case 6: // \)
+ {
+ _yyValue = m_this.parseToken (); return CLOSE_PAREN;
+ }
+ case 36: break;
+ case 7: // ,
+ {
+ _yyValue = m_this.parseToken (); return COMMA;
+ }
+ case 37: break;
+ case 8: // =>
+ {
+ _yyValue = m_this.parseToken (); return ARROW;
+ }
+ case 38: break;
+ case 9: // true
+ {
+ _yyValue = m_this.parseToken (); return TRUE;
+ }
+ case 39: break;
+ case 10: // false
+ {
+ _yyValue = m_this.parseToken (); return FALSE;
+ }
+ case 40: break;
+ case 11: // big
+ {
+ _yyValue = m_this.parseToken (); return BIG;
+ }
+ case 41: break;
+ case 12: // bytes
+ {
+ _yyValue = m_this.parseToken (); return BYTES;
+ }
+ case 42: break;
+ case 13: // decimal
+ {
+ _yyValue = m_this.parseToken (); return DECIMAL;
+ }
+ case 43: break;
+ case 14: // integer
+ {
+ _yyValue = m_this.parseToken (); return INTEGER;
+ }
+ case 44: break;
+ case 15: // expression
+ {
+ _yyValue = m_this.parseToken (); return EXPRESSION;
+ }
+ case 45: break;
+ case 16: // undefined
+ {
+ _yyValue = m_this.parseToken (); return UNDEFINED;
+ }
+ case 46: break;
+ case 17: // [+-]?[0-9]+L
+ {
+ _yyValue = m_this.parsePlainValue (); return LONG_VAL;
+ }
+ case 47: break;
+ case 18: // [+-]?0x[0-9a-fA-F]+L
+ {
+ _yyValue = m_this.parsePlainValue (); return LONG_HEX_VAL;
+ }
+ case 48: break;
+ case 19: // [+-]?[0-9]+
+ {
+ _yyValue = m_this.parsePlainValue (); return INT_VAL;
+ }
+ case 49: break;
+ case 20: // [+-]?0x[0-9a-fA-F]+
+ {
+ _yyValue = m_this.parsePlainValue (); return INT_HEX_VAL;
+ }
+ case 50: break;
+ case 21: // [+-]?(NaN|Infinity)
+ {
+ _yyValue = m_this.parsePlainValue (); return DOUBLE_SPECIAL_VAL;
+ }
+ case 51: break;
+ case 22: // [+-]?([0-9]+\.[0-9]+([eE][+-]?[0-9]+)?)
+ {
+ _yyValue = m_this.parsePlainValue (); return DEC_VAL;
+ }
+ case 52: break;
+ case 23: // BIG_DECIMAL|BIG_INTEGER|BOOLEAN|BYTES|DOUBLE|EXPRESSION|INT|LIST|LONG|OBJECT|PROPERTY|STRING|TYPE|UNDEFINED
+ {
+ _yyValue = m_this.parsePlainValue (); return TYPE_VAL;
+ }
+ case 53: break;
+ case 24: // \"([^"\\]+|\\.)*\"
+ {
+ _yyValue = m_this.parseStringValue (); return STR_VAL;
+ }
+ case 54: break;
+ case 25: // [ \t\r\n]+
+ {
+ m_this.ignored ();
+ }
+ case 55: break;
+ case 26: // .
+ {
+ m_this.invalid ();
+ }
+ case 56: break;
+ case 27: // <<EOF>>
+ {
+ m_this.parseEOF (); return 0;
+ }
+ case 57: break;
+ case 28: // .|\n
+ {
+ echo (); // default character action
+ }
+ case 58: break;
+ case 29: // <<EOF>>
+ {
+ return 0; // default EOF action
+ }
+ case 59: break;
+ default:
+ throw new IOException ("Internal error in Parser lexer.");
+ }
+
+ }
+ }
+
+
+ /**
+ * Call this function to start parsing.
+ *
+ * @return 0 if everything is okay, or 1 if an error occurred.
+ * @throws IOException
+ * in case of error
+ */
+ public int yyParse () throws IOException
+ {
+ char[] cc_ecs = cc_parser.ecs;
+ char[] cc_next = cc_parser.next;
+ char[] cc_check = cc_parser.check;
+ char[] cc_base = cc_parser.base;
+ char[] cc_default = cc_parser.defaults;
+ char[] cc_gotoDefault = cc_parser.gotoDefault;
+ char[] cc_rule = cc_parser.rule;
+ char[] cc_lhs = cc_parser.lhs;
+
+ LinkedList cc_lookaheadStack = _yyLookaheadStack;
+ Vector cc_stateStack = _yyStateStack;
+
+ if (cc_stateStack.size () == 0)
+ cc_stateStack.add (new YYParserState ());
+
+ int cc_toState = 0;
+
+ for (;;)
+ {
+ YYParserState cc_lookahead;
+
+ int cc_fromState;
+ char cc_ch;
+
+ //
+ // check if there are any lookahead tokens on stack
+ // if not, then call yyLex ()
+ //
+ if (cc_lookaheadStack.size () == 0)
+ {
+ _yyValue = null;
+ int val = yyLex ();
+ cc_lookahead = new YYParserState (val, _yyValue);
+ cc_lookaheadStack.add (cc_lookahead);
+ }
+ else
+ cc_lookahead = (YYParserState)cc_lookaheadStack.getLast ();
+
+ cc_ch = cc_ecs[cc_lookahead.token];
+ cc_fromState = ((YYParserState)cc_stateStack.get (cc_stateStack.size () - 1)).state;
+ int cc_symbol = cc_ch;
+ cc_toState = cc_fromState;
+ while (cc_check[cc_symbol + cc_base[cc_toState]] != cc_toState)
+ {
+ cc_toState = cc_default[cc_toState];
+ if (cc_toState >= 57)
+ cc_symbol = 0;
+ }
+ cc_toState = (short)cc_next[cc_symbol + cc_base[cc_toState]];
+
+
+ //
+ // check the value of toState and determine what to do
+ // with it
+ //
+ if (cc_toState > 0)
+ {
+ // shift
+ cc_lookahead.state = cc_toState;
+ cc_stateStack.add (cc_lookahead);
+ cc_lookaheadStack.removeLast ();
+ continue;
+ }
+ else if (cc_toState == 0)
+ {
+ // error
+ if (_yyInError)
+ {
+ // first check if the error is at the lookahead
+ if (cc_ch == 1)
+ {
+ // so we need to reduce the stack until a state with reduceable
+ // action is found
+ if (_yyStateStack.size () > 1)
+ _yyStateStack.setSize (_yyStateStack.size () - 1);
+ else
+ return 1; // can't do much we exit the parser
+ }
+ else
+ {
+ // this means that we need to dump the lookahead.
+ if (cc_ch == 0) // can't do much with EOF;
+ return 1;
+ cc_lookaheadStack.removeLast ();
+ }
+ continue;
+ }
+ else
+ {
+ if (yyParseError (cc_lookahead.token))
+ return 1;
+ _yyLookaheadStack.add (new YYParserState (1, _yyValue));
+ _yyInError = true;
+ continue;
+ }
+ }
+ _yyInError = false;
+ // now the reduce action
+ int cc_ruleState = -cc_toState;
+
+ _yyArgStart = cc_stateStack.size () - cc_rule[cc_ruleState] - 1;
+ //
+ // find the state that said need this non-terminal
+ //
+ cc_fromState = ((YYParserState)cc_stateStack.get (_yyArgStart)).state;
+
+ //
+ // find the state to goto after shifting the non-terminal
+ // onto the stack.
+ //
+ if (cc_ruleState == 1)
+ cc_toState = 0; // reset the parser
+ else
+ {
+ cc_toState = cc_fromState + 58;
+ int cc_tmpCh = cc_lhs[cc_ruleState] - 25;
+ while (cc_check[cc_tmpCh + cc_base[cc_toState]] != cc_toState)
+ cc_toState = cc_gotoDefault[cc_toState - 58];
+ cc_toState = cc_next[cc_tmpCh + cc_base[cc_toState]];
+ }
+
+ _yyValue = null;
+
+ switch (cc_ruleState)
+ {
+ case 1: // accept
+ return 0;
+ case 2: // complete : node
+ {
+ return m_this.parse ((org.jboss.dmr.ModelNode)yyGetValue (1));
+ }
+ case 37: break;
+ case 3: // node : BIG DECIMAL DEC_VAL
+ {
+ _yyValue = m_this.parseBigDecimal ((java.lang.String)yyGetValue (3));
+ }
+ case 38: break;
+ case 4: // node : BIG DECIMAL INT_VAL
+ {
+ _yyValue = m_this.parseBigDecimal ((java.lang.String)yyGetValue (3));
+ }
+ case 39: break;
+ case 5: // node : BIG INTEGER INT_VAL
+ {
+ _yyValue = m_this.parseBigInteger ((java.lang.String)yyGetValue (3));
+ }
+ case 40: break;
+ case 6: // node : TRUE
+ {
+ _yyValue = m_this.parseTrue ();
+ }
+ case 41: break;
+ case 7: // node : FALSE
+ {
+ _yyValue = m_this.parseFalse ();
+ }
+ case 42: break;
+ case 8: // node : bytes CLOSE_BRACE
+ {
+ _yyValue = m_this.finishBytes ((java.io.ByteArrayOutputStream)yyGetValue (1));
+ }
+ case 43: break;
+ case 9: // node : bytes COMMA CLOSE_BRACE
+ {
+ _yyValue = m_this.finishBytes ((java.io.ByteArrayOutputStream)yyGetValue (1));
+ }
+ case 44: break;
+ case 10: // node : BYTES OPEN_BRACE CLOSE_BRACE
+ {
+ _yyValue = m_this.emptyBytes ();
+ }
+ case 45: break;
+ case 11: // node : DEC_VAL
+ {
+ _yyValue = m_this.parseDouble ((java.lang.String)yyGetValue (1));
+ }
+ case 46: break;
+ case 12: // node : EXPRESSION STR_VAL
+ {
+ _yyValue = m_this.parseExpression ((java.lang.String)yyGetValue (2));
+ }
+ case 47: break;
+ case 13: // node : INT_VAL
+ {
+ _yyValue = m_this.parseInt ((java.lang.String)yyGetValue (1));
+ }
+ case 48: break;
+ case 14: // node : INT_HEX_VAL
+ {
+ _yyValue = m_this.parseIntHex ((java.lang.String)yyGetValue (1));
+ }
+ case 49: break;
+ case 15: // node : LONG_VAL
+ {
+ _yyValue = m_this.parseLong ((java.lang.String)yyGetValue (1));
+ }
+ case 50: break;
+ case 16: // node : LONG_HEX_VAL
+ {
+ _yyValue = m_this.parseLongHex ((java.lang.String)yyGetValue (1));
+ }
+ case 51: break;
+ case 17: // node : OPEN_BRACKET CLOSE_BRACKET
+ {
+ _yyValue = m_this.parseEmptyList ();
+ }
+ case 52: break;
+ case 18: // node : list CLOSE_BRACKET
+ {
+ _yyValue = m_this.finishList ((org.jboss.dmr.ModelNode)yyGetValue (1));
+ }
+ case 53: break;
+ case 19: // node : list COMMA CLOSE_BRACKET
+ {
+ _yyValue = m_this.finishList ((org.jboss.dmr.ModelNode)yyGetValue (1));
+ }
+ case 54: break;
+ case 20: // node : OPEN_BRACE CLOSE_BRACE
+ {
+ _yyValue = m_this.parseEmptyObject ();
+ }
+ case 55: break;
+ case 21: // node : object CLOSE_BRACE
+ {
+ _yyValue = m_this.finishObject ((org.jboss.dmr.ModelNode)yyGetValue (1));
+ }
+ case 56: break;
+ case 22: // node : object COMMA CLOSE_BRACE
+ {
+ _yyValue = m_this.finishObject ((org.jboss.dmr.ModelNode)yyGetValue (1));
+ }
+ case 57: break;
+ case 23: // node : OPEN_PAREN STR_VAL ARROW node CLOSE_PAREN
+ {
+ _yyValue = m_this.parseProperty ((java.lang.String)yyGetValue (2), (org.jboss.dmr.ModelNode)yyGetValue (4));
+ }
+ case 58: break;
+ case 24: // node : STR_VAL
+ {
+ _yyValue = m_this.parseString ((java.lang.String)yyGetValue (1));
+ }
+ case 59: break;
+ case 25: // node : TYPE_VAL
+ {
+ _yyValue = m_this.parseType ((java.lang.String)yyGetValue (1));
+ }
+ case 60: break;
+ case 26: // node : UNDEFINED
+ {
+ _yyValue = m_this.parseUndefined ();
+ }
+ case 61: break;
+ case 27: // bytes : BYTES OPEN_BRACE INT_VAL
+ {
+ _yyValue = m_this.startBytesInt ((java.lang.String)yyGetValue (3));
+ }
+ case 62: break;
+ case 28: // bytes : BYTES OPEN_BRACE INT_HEX_VAL
+ {
+ _yyValue = m_this.startBytesHex ((java.lang.String)yyGetValue (3));
+ }
+ case 63: break;
+ case 29: // bytes : bytes COMMA INT_VAL
+ {
+ _yyValue = m_this.nextByteInt ((java.io.ByteArrayOutputStream)yyGetValue (1), (java.lang.String)yyGetValue (3));
+ }
+ case 64: break;
+ case 30: // bytes : bytes COMMA INT_HEX_VAL
+ {
+ _yyValue = m_this.nextByteHex ((java.io.ByteArrayOutputStream)yyGetValue (1), (java.lang.String)yyGetValue (3));
+ }
+ case 65: break;
+ case 31: // list : OPEN_BRACKET node
+ {
+ _yyValue = m_this.parseStartList ((org.jboss.dmr.ModelNode)yyGetValue (2));
+ }
+ case 66: break;
+ case 32: // list : list COMMA node
+ {
+ _yyValue = m_this.parseListItem ((org.jboss.dmr.ModelNode)yyGetValue (1), (org.jboss.dmr.ModelNode)yyGetValue (3));
+ }
+ case 67: break;
+ case 33: // object : OPEN_BRACE STR_VAL ARROW node
+ {
+ _yyValue = m_this.parseStartObject ((java.lang.String)yyGetValue (2), (org.jboss.dmr.ModelNode)yyGetValue (4));
+ }
+ case 68: break;
+ case 34: // object : object COMMA STR_VAL ARROW node
+ {
+ _yyValue = m_this.parseObjectItem ((org.jboss.dmr.ModelNode)yyGetValue (1), (java.lang.String)yyGetValue (3), (org.jboss.dmr.ModelNode)yyGetValue (5));
+ }
+ case 69: break;
+ default:
+ throw new IOException ("Internal error in Parser parser.");
+ }
+
+ YYParserState cc_reduced = new YYParserState (-cc_ruleState, _yyValue, cc_toState);
+ _yyValue = null;
+ cc_stateStack.setSize (_yyArgStart + 1);
+ cc_stateStack.add (cc_reduced);
+ }
+ }
+
+ /**
+ * This function is used by the error handling grammars to check the immediate
+ * lookahead token on the stack.
+ *
+ * @return the top of lookahead stack.
+ */
+ protected YYParserState yyPeekLookahead ()
+ {
+ return (YYParserState)_yyLookaheadStack.getLast ();
+ }
+
+ /**
+ * This function is used by the error handling grammars to pop an unwantted
+ * token from the lookahead stack.
+ */
+ protected void yyPopLookahead ()
+ {
+ _yyLookaheadStack.removeLast ();
+ }
+
+ /**
+ * Clear the error flag. If this flag is present and the parser again sees
+ * another error transition, it would immediately calls yyParseError, which
+ * would by default exit the parser.
+ * <p>
+ * This function is used in error recovery.
+ */
+ protected void yyClearError ()
+ {
+ _yyInError = false;
+ }
+
+ /**
+ * This function reports error and return true if critical error occurred, or
+ * false if the error has been successfully recovered. IOException is an optional
+ * choice of reporting error.
+ *
+ * @param terminal
+ * the terminal that caused the error.
+ * @return true if irrecoverable error occurred. Or simply throw an IOException.
+ * false if the parsing can be continued to check for specific
+ * error tokens.
+ * @throws IOException
+ * in case of error.
+ */
+ protected boolean yyParseError (int terminal) throws IOException
+ {
+ return false;
+ }
+
+ /**
+ * Gets the object value associated with the symbol at the argument's position.
+ *
+ * @param arg
+ * the symbol position starting from 1.
+ * @return the object value associated with symbol.
+ */
+ protected Object yyGetValue (int arg)
+ {
+ return ((YYParserState)_yyStateStack.get (_yyArgStart + arg)).value;
+ }
+
+ /**
+ * Set the object value for the current non-terminal being reduced.
+ *
+ * @param value
+ * the object value for the current non-terminal.
+ */
+ protected void yySetValue (Object value)
+ {
+ _yyValue = value;
+ }
+
+
+
+
+ private final org.jboss.dmr.ModelNodeParser m_this = (org.jboss.dmr.ModelNodeParser)this;
+
+ /**
+ * This function is used to change the initial state for the lexer.
+ *
+ * @param state
+ * the name of the state
+ */
+ protected void begin (String state)
+ {
+ if ("INITIAL".equals (state))
+ {
+ begin (INITIAL);
+ return;
+ }
+ throw new IllegalArgumentException ("Unknown lexer state: " + state);
+ }
+
+ /**
+ * Push the current state onto lexer state onto stack and
+ * begin the new state specified by the user.
+ *
+ * @param state
+ * the new state.
+ */
+ protected void yyPushLexerState (String state)
+ {
+ if ("INITIAL".equals (state))
+ {
+ yyPushLexerState (INITIAL);
+ return;
+ }
+ throw new IllegalArgumentException ("Unknown lexer state: " + state);
+ }
+
+ /**
+ * Check if there are more inputs. This function is called when EOF is
+ * encountered.
+ *
+ * @return true to indicate no more inputs.
+ * @throws IOException
+ * in case of an IO error
+ */
+ protected boolean yyWrap () throws IOException
+ {
+ return true;
+ }
+
+
+/*
+ * lexer properties:
+ * unicode = false
+ * bol = false
+ * backup = true
+ * cases = 29
+ * table = compressed
+ * ecs = 59
+ * states = 163
+ * max symbol value = 256
+ *
+ * memory usage:
+ * full table = 41891
+ * ecs table = 9874
+ * next = 268
+ * check = 268
+ * default = 165
+ * meta = 59
+ * compressed table = 1017
+ *
+ * parser properties:
+ * symbols = 31
+ * max terminal = 279
+ * used terminals = 25
+ * non-terminals = 6
+ * rules = 34
+ * shift/reduce conflicts = 0
+ * reduct/reduce conflicts = 0
+ *
+ * memory usage:
+ * ecs table = 2047
+ * compressed table = 1028
+ */
+}
--
2.5.5