1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184
|
/* Generated By:JavaCC: Do not edit this line. ParseException.cc Version 7.0 */
/* JavaCCOptions:STATIC=false,SUPPORT_CLASS_VISIBILITY_PUBLIC=true */
#include "ParseException.h"
namespace vhdl {
namespace parser {
/**
* This exception is thrown when parse errors are encountered.
* You can explicitly create objects of this exception type by
* calling the method generate_ParseException in the generated
* parser.
*
* You can modify this class to customize your error reporting
* mechanisms so long as you retain the fields.
*/
/**
* This constructor is used by the method "generate_ParseException"
* in the generated parser. Calling this constructor generates
* a new object of this type with the fields "currentToken",
* "expectedTokenSequences", and "tokenImage" set.
*/
ParseException::ParseException(Token currentTokenVal,
int** expectedTokenSequencesVal,
JJString* tokenImageVal
)
{
initialise(currentTokenVal, expectedTokenSequencesVal, tokenImageVal);
currentToken = currentTokenVal;
expectedTokenSequences = expectedTokenSequencesVal;
tokenImage = tokenImageVal;
}
/**
* The following constructors are for use by you for whatever
* purpose you can think of. Constructing the exception in this
* manner makes the exception behave in the normal way - i.e., as
* documented in the class "Throwable". The fields "errorToken",
* "expectedTokenSequences", and "tokenImage" do not contain
* relevant information. The JavaCC generated code does not use
* these constructors.
*/
ParseException::ParseException() {
}
/** Constructor with message. */
ParseException::ParseException(const JJString& message) {
}
/**
* This is the last token that has been consumed successfully. If
* this object has been created due to a parse error, the token
* following this token will (therefore) be the first error token.
*/
Token currentToken;
/**
* Each entry in this array is an array of integers. Each array
* of integers represents a sequence of tokens (by their ordinal
* values) that is expected at this point of the parse.
*/
int** expectedTokenSequences = 0;
/**
* This is a reference to the "tokenImage" array of the generated
* parser within which the parse error occurred. This array is
* defined in the generated ...Constants class.
*/
JJString* tokenImage = 0;
/**
* It uses "currentToken" and "expectedTokenSequences" to generate a parse
* error message and returns it. If this object has been created
* due to a parse error, and you do not catch it (it gets thrown
* from the parser) the correct error message
* gets displayed.
*/
JJString ParseException::initialise(Token currentToken,
int** expectedTokenSequences,
JJString* tokenImage) {
#if 0
//JJString eol = System.getProperty("line.separator", "\n");
expected = new JJString();
int maxSize = 0;
for (int i = 0; i < expectedTokenSequences.length; i++) {
if (maxSize < expectedTokenSequences[i].length) {
maxSize = expectedTokenSequences[i].length;
}
for (int j = 0; j < expectedTokenSequences[i].length; j++) {
expected.append(tokenImage[expectedTokenSequences[i][j]]).append(' ');
}
if (expectedTokenSequences[i][expectedTokenSequences[i].length - 1] != 0) {
expected.append((JJChar*)"...");
}
expected.append(eol).append(" ");
}
JJString retval = (JJChar*)"Encountered \"";
Token tok = currentToken.next;
for (int i = 0; i < maxSize; i++) {
if (i != 0) retval += (JJChar*)" ";
if (tok.kind == 0) {
retval += tokenImage[0];
break;
}
retval += (JJChar*)" " + tokenImage[tok.kind];
retval += (JJChar*)" \"";
retval += add_escapes(tok.image);
retval += (JJChar*)" \"";
tok = tok.next;
}
retval += (JJChar*)"\" at line " + currentToken.next.beginLine + (JJChar*)", column " + currentToken.next.beginColumn;
retval += (JJChar*)"." + eol;
if (expectedTokenSequences.length == 1) {
retval += (JJChar*)"Was expecting:" + eol + (JJChar*)" ";
} else {
retval += (JJChar*)"Was expecting one of:" + eol + (JJChar*)" ";
}
retval += expected.toString();
return retval;
#endif
return (JJChar*)"Parse exception";
}
/**
* The end of line JJString for this machine.
*/
#define eol "\n"
/**
* Used to convert raw characters to their escaped version
* when these raw version cannot be used as part of an ASCII
* string literal.
*/
JJString ParseException::add_escapes(const JJString& str) {
/*
JJString *retval = new JJString();
JJChar ch;
for (int i = 0; i < str.length(); i++) {
switch (str.charAt(i))
{
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) {
JJString s = "0000" + Integer.toString(ch, 16);
retval.append("\\u" + s.substring(s.length() - 4, s.length()));
} else {
retval.append(ch);
}
continue;
}
}
return retval.toString();
*/ return str;
}
}
}
/* JavaCC - OriginalChecksum=bb2d200bbdb84c3b7aff4c7f96769833 (do not edit this line) */
|