Skip to content

Commit 1a4dc4e

Browse files
committed
refactoring
1 parent 7159c46 commit 1a4dc4e

File tree

2 files changed

+43
-6
lines changed

2 files changed

+43
-6
lines changed

src/main/java/com/igormaznitsa/prologparser/tokenizer/Tokenizer.java

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -768,6 +768,10 @@ state, getLastTokenLine(),
768768
strBuffer.append(result.getDecoded());
769769
}
770770
}
771+
} else {
772+
if (!(chr == '\r' && specCharBuffer.isEmpty())) {
773+
throw new PrologParserException("Unexpected char: 0x" + Integer.toHexString(chr), this.prevLine, this.prevPos);
774+
}
771775
}
772776
} else {
773777
switch (chr) {
@@ -847,12 +851,16 @@ state, getLastTokenLine(),
847851
theChar = chr;
848852
}
849853
if (charCodeAsInt) {
850-
return this.tokenizerResultPool.find().setData(
851-
new PrologInt(theChar),
852-
state,
853-
getLastTokenLine(),
854-
getLastTokenPos()
855-
);
854+
if (Character.isWhitespace(chr)) {
855+
throw new PrologParserException("Unexpected whitespace char: 0x" + Integer.toHexString(chr), this.prevLine, this.prevPos);
856+
} else {
857+
return this.tokenizerResultPool.find().setData(
858+
new PrologInt(theChar),
859+
state,
860+
getLastTokenLine(),
861+
getLastTokenPos()
862+
);
863+
}
856864
} else {
857865
strBuffer.append(theChar);
858866
}

src/test/java/com/igormaznitsa/prologparser/IntegrationTest.java

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1107,6 +1107,35 @@ public void testStandardTermOrder() {
11071107
*/
11081108
@Test
11091109
public void testConformity() {
1110+
1111+
assertEquals("writeq('\\e')", parseEd("writeq('\\033\\').").next().toString());
1112+
1113+
assertEquals("writeq('a\\n b')", parseEd("writeq('a\\\n b'). % \"a\\\\\\n b\" ").next().toString());
1114+
assertEquals("writeq('a\\nb')", parseEd("writeq('a\\\nb'). % \"a\\\\\\nb\" ").next().toString());
1115+
assertEquals("writeq('\\n')", parseEd("writeq('\\\n'). % \"\\\\ \\n\"").next().toString());
1116+
assertEquals("writeq('a\\n b')", parseEd("writeq('a\\\n b'). % \"a\\\\\\n b\"").next().toString());
1117+
assertEquals("writeq('a\\nb')", parseEd("writeq('a\\\nb'). % \"a\\\\\\nb\" ").next().toString());
1118+
assertEquals("writeq('\\na')", parseEd("writeq('\\\na'). % \"\\\\\\na\" ").next().toString());
1119+
assertEquals("writeq('\\n')", parseEd("writeq('\\\n'). % \"\\\\\\n\" ").next().toString());
1120+
1121+
assertThrows(PrologParserException.class, () -> parseEd("X = 0'\\. .").next());
1122+
assertThrows(PrologParserException.class, () -> parseEd("X = 0'\\.").next());
1123+
assertThrows(PrologParserException.class, () -> parseEd("'\\\n''.").next());
1124+
assertThrows(PrologParserException.class, () -> parseEd("writeq(.").next());
1125+
assertThrows(PrologParserException.class, () -> parseEd("writeq('").next());
1126+
assertThrows(PrologParserException.class, () -> parseEd("X = 0'\\u1.").next());
1127+
assertThrows(PrologParserException.class, () -> parseEd("writeq('\\u1').").next());
1128+
assertThrows(PrologParserException.class, () -> parseEd("writeq('\\\t'). % \"\\\\\\t\"").next());
1129+
assertThrows(PrologParserException.class, () -> parseEd("writeq('\\ \n'). % \"\\\\ \\n\"").next());
1130+
assertThrows(PrologParserException.class, () -> parseEd("writeq('\\ ').").next());
1131+
assertThrows(PrologParserException.class, () -> parseEd("0'\\t=0' . % horiz. tab").next());
1132+
assertThrows(PrologParserException.class, () -> parseEd("'").next());
1133+
assertThrows(PrologParserException.class, () -> parseEd(")").next());
1134+
assertThrows(NoSuchElementException.class, () -> parseEd(".").next());
1135+
assertThrows(PrologParserException.class, () -> parseEd("writeq('\t'). % horiz. tab ").next());
1136+
assertThrows(PrologParserException.class, () -> parseEd("writeq('\n').").next());
1137+
1138+
assertEquals("writeq('\\n')", parseEd("writeq('\\n').").next().toString());
11101139
assertThrows(PrologParserException.class, () -> parseEd("writeq('\\9\\').").next());
11111140
assertEquals("writeq('\\0\\')", parseEd("writeq('\\0\\').").next().toString());
11121141
assertEquals("writeq('\\a')", parseEd("writeq('\\7\\').").next().toString());

0 commit comments

Comments
 (0)