1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.commons.jexl3.parser;
18
19
20
21
22 public class TokenMgrException extends RuntimeException implements JavaccError {
23
24
25
26
27
28 private static final long serialVersionUID = 1L;
29
30
31
32
33
34
35
36 public static final int LEXICAL_ERROR = 0;
37
38
39
40 public static final int STATIC_LEXER_ERROR = 1;
41
42
43
44 public static final int INVALID_LEXICAL_STATE = 2;
45
46
47
48 public static final int LOOP_DETECTED = 3;
49
50
51
52
53 private final int errorCode;
54
55
56
57 @SuppressWarnings("unused")
58 private int state;
59
60
61
62 private char current;
63
64
65
66 private String after;
67
68
69
70 private boolean eof;
71
72
73
74 private int line;
75
76
77
78 private int column;
79
80
81
82
83
84
85 @Override
86 public String getMessage() {
87 return ("Lexical error at line "
88 + line + ", column "
89 + column + ". Encountered: "
90 + (eof ? "<EOF> "
91 : (StringParser.escapeString(String.valueOf(current), '"')) + " (" + (int) current + "), ")
92 + "after : " + StringParser.escapeString(after, '"'));
93 }
94
95
96
97 public TokenMgrException(final String message, final int reason) {
98 super(message);
99 errorCode = reason;
100 }
101
102
103 public TokenMgrException(final boolean EOFSeen, final int lexState, final int errorLine, final int errorColumn, final String errorAfter, final int curChar, final int reason) {
104 eof = EOFSeen;
105 state = lexState;
106 line = errorLine;
107 column = errorColumn;
108 after = errorAfter;
109 current = (char) curChar;
110 errorCode = reason;
111 }
112
113
114
115
116
117 public int getErrorCode() {
118 return errorCode;
119 }
120
121 @Override
122 public int getLine() {
123 return line;
124 }
125
126 @Override
127 public int getColumn() {
128 return column;
129 }
130
131 @Override
132 public String getAfter() {
133 return after;
134 }
135
136
137
138
139
140 protected static String addEscapes(final String str) {
141 final StringBuilder retval = new StringBuilder();
142 char ch;
143 for (int i = 0; i < str.length(); i++) {
144 switch (str.charAt(i))
145 {
146 case 0 :
147 continue;
148 case '\b':
149 retval.append("//b");
150 continue;
151 case '\t':
152 retval.append("//t");
153 continue;
154 case '\n':
155 retval.append("//n");
156 continue;
157 case '\f':
158 retval.append("//f");
159 continue;
160 case '\r':
161 retval.append("//r");
162 continue;
163 case '\"':
164 retval.append("//\"");
165 continue;
166 case '\'':
167 retval.append("//\'");
168 continue;
169 case '/':
170 retval.append("////");
171 continue;
172 default:
173 if ((ch = str.charAt(i)) < 0x20 || ch > 0x7e) {
174 final String s = "0000" + Integer.toString(ch, 16);
175 retval.append("//u").append(s.substring(s.length() - 4));
176 } else {
177 retval.append(ch);
178 }
179 continue;
180 }
181 }
182 return retval.toString();
183 }
184 }