/* * This program is free software; you can redistribute it and/or modify it under the * terms of the GNU Lesser General Public License, version 2.1 as published by the Free Software * Foundation. * * You should have received a copy of the GNU Lesser General Public License along with this * program; if not, you can obtain a copy at http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html * or from the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * * This program 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. * * Copyright (c) 2006 - 2013 Pentaho Corporation and Contributors. All rights reserved. */ package org.pentaho.reporting.libraries.formula.parser; /** * Although this class was autogenerated, we modified it to provide better error reporting. Do not delete this file or * let the auto-generator replace it, or you will suffer compile errors later. */ public class TokenMgrError extends Error { /* * Ordinals for various reasons why an Error of this type can be thrown. */ /** * Lexical error occured. */ public static final int LEXICAL_ERROR = 0; /** * An attempt wass made to create a second instance of a static token manager. */ public static final int STATIC_LEXER_ERROR = 1; /** * Tried to change to an invalid lexical state. */ public static final int INVALID_LEXICAL_STATE = 2; /** * Detected (and bailed out of) an infinite loop in the token manager. */ public static final int LOOP_DETECTED = 3; private static final long serialVersionUID = -4952285962531386774L; /** * Indicates the reason why the exception is thrown. It will have one of the above 4 values. */ private int errorCode; private boolean EOFSeen; private int lexState; private int errorLine; private int errorColumn; private String errorAfter; private char curChar; private int reason; /** * Replaces unprintable characters by their espaced (or unicode escaped) equivalents in the given string */ protected static String addEscapes( final String str ) { final StringBuffer retval = new StringBuffer(); for ( int i = 0; i < str.length(); i++ ) { final char ch; switch( str.charAt( i ) ) { case 0: continue; case '\b': retval.append( "\\b" ); continue; case '\t': retval.append( "\\t" ); continue; case '\n': retval.append( "\\n" ); continue; case '\f': retval.append( "\\f" ); continue; case '\r': retval.append( "\\r" ); continue; case '\"': retval.append( "\\\"" ); continue; case '\'': retval.append( "\\\'" ); continue; case '\\': retval.append( "\\\\" ); continue; default: if ( ( ch = str.charAt( i ) ) < 0x20 || ch > 0x7e ) { final String s = "0000" + Integer.toString( ch, 16 ); retval.append( "\\u" + s.substring( s.length() - 4, s.length() ) ); } else { retval.append( ch ); } continue; } } return retval.toString(); } /** * Returns a detailed message for the Error when it is thrown by the token manager to indicate a lexical error. * Parameters : EOFSeen : indicates if EOF caused the lexicl error curLexState : lexical state in which this error * occured errorLine : line number when the error occured errorColumn : column number when the error occured * errorAfter : prefix that was seen before this error occured curchar : the offending character Note: You can * customize the lexical error message by modifying this method. */ protected static String LexicalError( final boolean EOFSeen, final int lexState, final int errorLine, final int errorColumn, final String errorAfter, final char curChar ) { return ( "Lexical error at line " + errorLine + ", column " + errorColumn + ". Encountered: " + ( EOFSeen ? "<EOF> " : ( '\"' + addEscapes( String.valueOf( curChar ) ) + '\"' ) + " (" + (int) curChar + "), " ) + "after : \"" + addEscapes( errorAfter ) + '\"' ); } /** * You can also modify the body of this method to customize your error messages. For example, cases like LOOP_DETECTED * and INVALID_LEXICAL_STATE are not of end-users concern, so you can return something like : * <p/> * "Internal Error : Please file a bug report .... " * <p/> * from this method for such cases in the release version of your parser. */ public String getMessage() { return super.getMessage(); } /* * Constructors of various flavors follow. */ public TokenMgrError() { } public TokenMgrError( final String message, final int reason ) { super( message ); errorCode = reason; } public TokenMgrError( final boolean EOFSeen, final int lexState, final int errorLine, final int errorColumn, final String errorAfter, final char curChar, final int reason ) { this( LexicalError( EOFSeen, lexState, errorLine, errorColumn, errorAfter, curChar ), reason ); this.EOFSeen = EOFSeen; this.lexState = lexState; this.errorLine = errorLine; this.errorColumn = errorColumn; this.errorAfter = errorAfter; this.curChar = curChar; this.reason = reason; } public int getErrorCode() { return errorCode; } public boolean isEOFSeen() { return EOFSeen; } public int getLexState() { return lexState; } public int getErrorLine() { return errorLine; } public int getErrorColumn() { return errorColumn; } public String getErrorAfter() { return errorAfter; } public char getCurChar() { return curChar; } public int getReason() { return reason; } }