140 lines
4.3 KiB
Java
140 lines
4.3 KiB
Java
package org.nfunk.jep;
|
|
|
|
public class ParseException extends Exception {
|
|
protected boolean specialConstructor = true;
|
|
|
|
public Token currentToken;
|
|
|
|
public int[][] expectedTokenSequences;
|
|
|
|
public String[] tokenImage;
|
|
|
|
protected String eol = System.getProperty("line.separator", "\n");
|
|
|
|
public ParseException(Token paramToken, int[][] paramArrayOfint, String[] paramArrayOfString) {
|
|
super("");
|
|
this.currentToken = paramToken;
|
|
this.expectedTokenSequences = paramArrayOfint;
|
|
this.tokenImage = paramArrayOfString;
|
|
}
|
|
|
|
public ParseException() {}
|
|
|
|
public ParseException(String paramString) {
|
|
super(paramString);
|
|
}
|
|
|
|
public String getMessage() {
|
|
if (!this.specialConstructor)
|
|
return super.getMessage();
|
|
String str = "";
|
|
int i = 0;
|
|
for (byte b1 = 0; b1 < this.expectedTokenSequences.length; b1++) {
|
|
if (i < (this.expectedTokenSequences[b1]).length)
|
|
i = (this.expectedTokenSequences[b1]).length;
|
|
for (byte b = 0; b < (this.expectedTokenSequences[b1]).length; b++)
|
|
str = str + this.tokenImage[this.expectedTokenSequences[b1][b]] + " ";
|
|
if (this.expectedTokenSequences[b1][(this.expectedTokenSequences[b1]).length - 1] != 0)
|
|
str = str + "...";
|
|
str = str + this.eol + " ";
|
|
}
|
|
null = "Encountered \"";
|
|
Token token = this.currentToken.next;
|
|
for (byte b2 = 0; b2 < i; b2++) {
|
|
if (b2 != 0)
|
|
null = null + " ";
|
|
if (token.kind == 0) {
|
|
null = null + this.tokenImage[0];
|
|
break;
|
|
}
|
|
null = null + add_escapes(token.image);
|
|
token = token.next;
|
|
}
|
|
null = null + "\" at line " + this.currentToken.next.beginLine + ", column " + this.currentToken.next.beginColumn;
|
|
null = null + "." + this.eol;
|
|
if (this.expectedTokenSequences.length == 1) {
|
|
null = null + "Was expecting:" + this.eol + " ";
|
|
} else {
|
|
null = null + "Was expecting one of:" + this.eol + " ";
|
|
}
|
|
return null + str;
|
|
}
|
|
|
|
public String getErrorInfo() {
|
|
if (!this.specialConstructor)
|
|
try {
|
|
return super.getMessage() + " at column " + this.currentToken.next.beginColumn + ".";
|
|
} catch (Exception exception) {
|
|
return super.getMessage();
|
|
}
|
|
String str = "";
|
|
int i = 0;
|
|
for (byte b1 = 0; b1 < this.expectedTokenSequences.length; b1++) {
|
|
if (i < (this.expectedTokenSequences[b1]).length)
|
|
i = (this.expectedTokenSequences[b1]).length;
|
|
for (byte b = 0; b < (this.expectedTokenSequences[b1]).length; b++)
|
|
str = str + this.tokenImage[this.expectedTokenSequences[b1][b]] + " ";
|
|
if (this.expectedTokenSequences[b1][(this.expectedTokenSequences[b1]).length - 1] != 0)
|
|
str = str + "...";
|
|
str = str + this.eol + " ";
|
|
}
|
|
null = "Unexpected \"";
|
|
Token token = this.currentToken.next;
|
|
for (byte b2 = 0; b2 < i; b2++) {
|
|
if (b2 != 0)
|
|
null = null + " ";
|
|
if (token.kind == 0) {
|
|
null = null + this.tokenImage[0];
|
|
break;
|
|
}
|
|
null = null + add_escapes(token.image);
|
|
token = token.next;
|
|
}
|
|
return null + "\" at column " + this.currentToken.next.beginColumn + ".";
|
|
}
|
|
|
|
protected String add_escapes(String paramString) {
|
|
StringBuffer stringBuffer = new StringBuffer();
|
|
for (byte b = 0; b < paramString.length(); b++) {
|
|
char c;
|
|
switch (paramString.charAt(b)) {
|
|
case '\000':
|
|
break;
|
|
case '\b':
|
|
stringBuffer.append("\\b");
|
|
break;
|
|
case '\t':
|
|
stringBuffer.append("\\t");
|
|
break;
|
|
case '\n':
|
|
stringBuffer.append("\\n");
|
|
break;
|
|
case '\f':
|
|
stringBuffer.append("\\f");
|
|
break;
|
|
case '\r':
|
|
stringBuffer.append("\\r");
|
|
break;
|
|
case '"':
|
|
stringBuffer.append("\\\"");
|
|
break;
|
|
case '\'':
|
|
stringBuffer.append("\\'");
|
|
break;
|
|
case '\\':
|
|
stringBuffer.append("\\\\");
|
|
break;
|
|
default:
|
|
if ((c = paramString.charAt(b)) < ' ' || c > '~') {
|
|
String str = "0000" + Integer.toString(c, 16);
|
|
stringBuffer.append("\\u" + str.substring(str.length() - 4, str.length()));
|
|
break;
|
|
}
|
|
stringBuffer.append(c);
|
|
break;
|
|
}
|
|
}
|
|
return stringBuffer.toString();
|
|
}
|
|
}
|