001 /* 002 * Sonar, open source software quality management tool. 003 * Copyright (C) 2008-2011 SonarSource 004 * mailto:contact AT sonarsource DOT com 005 * 006 * Sonar is free software; you can redistribute it and/or 007 * modify it under the terms of the GNU Lesser General Public 008 * License as published by the Free Software Foundation; either 009 * version 3 of the License, or (at your option) any later version. 010 * 011 * Sonar is distributed in the hope that it will be useful, 012 * but WITHOUT ANY WARRANTY; without even the implied warranty of 013 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 014 * Lesser General Public License for more details. 015 * 016 * You should have received a copy of the GNU Lesser General Public 017 * License along with Sonar; if not, write to the Free Software 018 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02 019 */ 020 021 /* Generated By:JavaCC: Do not edit this line. TokenMgrError.java Version 4.1 */ 022 /* JavaCCOptions: */ 023 package net.sourceforge.pmd.cpd.cppast; 024 025 /** Token Manager Error. */ 026 public class TokenMgrError extends Error 027 { 028 029 /* 030 * Ordinals for various reasons why an Error of this type can be thrown. 031 */ 032 033 /** 034 * Lexical error occurred. 035 */ 036 static final int LEXICAL_ERROR = 0; 037 038 /** 039 * An attempt was made to create a second instance of a static token manager. 040 */ 041 static final int STATIC_LEXER_ERROR = 1; 042 043 /** 044 * Tried to change to an invalid lexical state. 045 */ 046 static final int INVALID_LEXICAL_STATE = 2; 047 048 /** 049 * Detected (and bailed out of) an infinite loop in the token manager. 050 */ 051 static final int LOOP_DETECTED = 3; 052 053 /** 054 * Indicates the reason why the exception is thrown. It will have 055 * one of the above 4 values. 056 */ 057 int errorCode; 058 059 /** 060 * Replaces unprintable characters by their escaped (or unicode escaped) 061 * equivalents in the given string 062 */ 063 protected static final String addEscapes(String str) { 064 StringBuffer retval = new StringBuffer(); 065 char ch; 066 for (int i = 0; i < str.length(); i++) { 067 switch (str.charAt(i)) 068 { 069 case 0 : 070 continue; 071 case '\b': 072 retval.append("\\b"); 073 continue; 074 case '\t': 075 retval.append("\\t"); 076 continue; 077 case '\n': 078 retval.append("\\n"); 079 continue; 080 case '\f': 081 retval.append("\\f"); 082 continue; 083 case '\r': 084 retval.append("\\r"); 085 continue; 086 case '\"': 087 retval.append("\\\""); 088 continue; 089 case '\'': 090 retval.append("\\\'"); 091 continue; 092 case '\\': 093 retval.append("\\\\"); 094 continue; 095 default: 096 if ((ch = str.charAt(i)) < 0x20 || ch > 0x7e) { 097 String s = "0000" + Integer.toString(ch, 16); 098 retval.append("\\u" + s.substring(s.length() - 4, s.length())); 099 } else { 100 retval.append(ch); 101 } 102 continue; 103 } 104 } 105 return retval.toString(); 106 } 107 108 /** 109 * Returns a detailed message for the Error when it is thrown by the 110 * token manager to indicate a lexical error. 111 * Parameters : 112 * EOFSeen : indicates if EOF caused the lexical error 113 * curLexState : lexical state in which this error occurred 114 * errorLine : line number when the error occurred 115 * errorColumn : column number when the error occurred 116 * errorAfter : prefix that was seen before this error occurred 117 * curchar : the offending character 118 * Note: You can customize the lexical error message by modifying this method. 119 */ 120 protected static String LexicalError(boolean EOFSeen, int lexState, int errorLine, int errorColumn, String errorAfter, char curChar) { 121 return("Lexical error in file " + CPPParserTokenManager.getFileName() + " at line " + 122 errorLine + ", column " + 123 errorColumn + ". Encountered: " + 124 (EOFSeen ? "<EOF> " : ("\"" + addEscapes(String.valueOf(curChar)) + "\"") + " (" + (int)curChar + "), ") + 125 "after : \"" + addEscapes(errorAfter) + "\""); 126 } 127 128 /** 129 * You can also modify the body of this method to customize your error messages. 130 * For example, cases like LOOP_DETECTED and INVALID_LEXICAL_STATE are not 131 * of end-users concern, so you can return something like : 132 * 133 * "Internal Error : Please file a bug report .... " 134 * 135 * from this method for such cases in the release version of your parser. 136 */ 137 public String getMessage() { 138 return super.getMessage(); 139 } 140 141 /* 142 * Constructors of various flavors follow. 143 */ 144 145 /** No arg constructor. */ 146 public TokenMgrError() { 147 } 148 149 /** Constructor with message and reason. */ 150 public TokenMgrError(String message, int reason) { 151 super(message); 152 errorCode = reason; 153 } 154 155 /** Full Constructor. */ 156 public TokenMgrError(boolean EOFSeen, int lexState, int errorLine, int errorColumn, String errorAfter, char curChar, int reason) { 157 this(LexicalError(EOFSeen, lexState, errorLine, errorColumn, errorAfter, curChar), reason); 158 } 159 } 160 /* JavaCC - OriginalChecksum=7925b33c412b4bfa3a7147ae3e790276 (do not edit this line) */