1 package de.lathanda.eos.interpreter.parser.de;
3 import java.util.TreeSet;
5 import de.lathanda.eos.baseparser.BasicParser;
6 import de.lathanda.eos.baseparser.CompilerError;
7 import de.lathanda.eos.baseparser.Program;
8 import de.lathanda.eos.baseparser.exceptions.TranslationException;
9 import de.lathanda.eos.vm.ErrorInformation;
10 import de.lathanda.eos.vm.Marker;
18 parser =
new Parser(tokenmanager);
23 parser.
Parse(program, path);
28 }
catch (NumberFormatException nfe) {
30 }
catch (RuntimeException re) {
32 }
catch (Throwable t) {
38 return new CompilerError(
"Compile.Error", pe.getLocalizedMessage());
40 StringBuilder expected =
new StringBuilder();
41 StringBuilder encountered =
new StringBuilder();
45 expected.append(
"\n").append(item++).append(
") ");
46 if (maxSize < expectedTokenSequence.length) {
47 maxSize = expectedTokenSequence.length;
49 for (
int j = 0; j < expectedTokenSequence.length; j++) {
50 expected.append(unescape(pe.
tokenImage[expectedTokenSequence[j]])).append(
' ');
52 if (expectedTokenSequence[expectedTokenSequence.length - 1] != 0) {
53 expected.append(
"...");
57 TreeSet<String> alreadyUsed =
new TreeSet<>();
58 for (
int i = 0; i < maxSize; i++) {
63 encountered.append(
" ");
65 if (tok.kind == ParserConstants.EOF) {
70 encountered.append(unescape(pe.
tokenImage[tok.kind]));
75 return new CompilerError(
new Marker(token.beginColumn, token.beginLine, token.endColumn, token.endLine),
"Parser.Error", encountered, expected,
78 private String unescape(String text) {
79 int i = text.indexOf(
"\\u");
84 StringBuilder sb =
new StringBuilder();
87 sb.append(text.substring(a, i));
89 sb.append((
char) Integer.parseInt(text.substring(i + 2, a), 16));
90 i = text.indexOf(
"\\u", a);
92 sb.append(text.substring(a));
void parse(Program program, String path)
int[][] expectedTokenSequences
final void Parse(Program program, String path)