Skip to content

Commit 92a8641

Browse files
committed
fixing in tokenizer
1 parent 1a4dc4e commit 92a8641

File tree

3 files changed

+26
-3
lines changed

3 files changed

+26
-3
lines changed

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -395,8 +395,12 @@ TokenizerResult readNextToken() {
395395
if (this.strBuf.isSingleChar('/')) {
396396
this.strBuf.pop();
397397
state = this.strBuf.isEmpty() ? LOOK_FOR : state;
398+
} else if (state == OPERATOR) {
399+
throw new PrologParserException("Operator can be mixed with comment block: " + this.strBuf.toString() + chr, getLastTokenLine(), getLastTokenPos());
398400
}
401+
399402
skipUntilBlockCommentEnd();
403+
400404
} else {
401405
switch (state) {
402406
case LOOK_FOR: {

src/main/java/com/igormaznitsa/prologparser/utils/StringBuilderEx.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,4 +146,17 @@ public boolean isEmpty() {
146146
public boolean isFirstCharDigit() {
147147
return this.stringBuilder.length() > 0 && Character.isDigit(this.stringBuilder.charAt(0));
148148
}
149+
150+
public boolean endsWith(final String str) {
151+
if (this.stringBuilder.length() < str.length()) {
152+
return false;
153+
}
154+
int p = this.stringBuilder.length();
155+
for (int i = str.length() - 1; i >= 0; i--) {
156+
if (this.stringBuilder.charAt(--p) != str.charAt(i)) {
157+
return false;
158+
}
159+
}
160+
return true;
161+
}
149162
}

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

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -992,8 +992,8 @@ public void testPairOfOperatorsWithIncompatiblePrecedence() throws Exception {
992992

993993
@Test
994994
public void testOperatorAsFunctorWithUnsupportedArity() throws Exception {
995-
assertEquals("'+'(1, 2, 3)", parseEd("+(1,2,3).").next().toString());
996995
assertEquals("':'(1, 2, 3)", parseEd(":(1,2,3).").next().toString());
996+
assertEquals("'+'(1, 2, 3)", parseEd("+(1,2,3).").next().toString());
997997
assertEquals("':'(1, (2 , 3), 4)", parseEd(":(1,(2,3),4).").next().toString());
998998
assertEquals("':'(1)", parseEd(":(1).").next().toString());
999999
}
@@ -1108,6 +1108,10 @@ public void testStandardTermOrder() {
11081108
@Test
11091109
public void testConformity() {
11101110

1111+
assertEquals("writeq(a - b)", parseEd("writeq(-((a,b))).").next().toString());
1112+
assertEquals("writeq(- a ^ 2)", parseEd("writeq(-(a^2)).").next().toString());
1113+
assertEquals("writeq(- 1 ^ 2)", parseEd("writeq(-(1^2)).").next().toString());
1114+
assertEquals("writeq(- -1)", parseEd("writeq(-(-1)).").next().toString());
11111115
assertEquals("writeq('\\e')", parseEd("writeq('\\033\\').").next().toString());
11121116

11131117
assertEquals("writeq('a\\n b')", parseEd("writeq('a\\\n b'). % \"a\\\\\\n b\" ").next().toString());
@@ -1118,6 +1122,8 @@ public void testConformity() {
11181122
assertEquals("writeq('\\na')", parseEd("writeq('\\\na'). % \"\\\\\\na\" ").next().toString());
11191123
assertEquals("writeq('\\n')", parseEd("writeq('\\\n'). % \"\\\\\\n\" ").next().toString());
11201124

1125+
assertThrows(PrologParserException.class, () -> parseEd("writeq(//*.*/).").next());
1126+
assertThrows(PrologParserException.class, () -> parseEd("writeq(//*).").next());
11211127
assertThrows(PrologParserException.class, () -> parseEd("X = 0'\\. .").next());
11221128
assertThrows(PrologParserException.class, () -> parseEd("X = 0'\\.").next());
11231129
assertThrows(PrologParserException.class, () -> parseEd("'\\\n''.").next());
@@ -1135,12 +1141,12 @@ public void testConformity() {
11351141
assertThrows(PrologParserException.class, () -> parseEd("writeq('\t'). % horiz. tab ").next());
11361142
assertThrows(PrologParserException.class, () -> parseEd("writeq('\n').").next());
11371143

1144+
assertEquals("writeq('*/')", parseEd("writeq('*/').").next().toString());
1145+
assertEquals("writeq('/**')", parseEd("writeq('/**').").next().toString());
11381146
assertEquals("writeq('\\n')", parseEd("writeq('\\n').").next().toString());
11391147
assertThrows(PrologParserException.class, () -> parseEd("writeq('\\9\\').").next());
11401148
assertEquals("writeq('\\0\\')", parseEd("writeq('\\0\\').").next().toString());
11411149
assertEquals("writeq('\\a')", parseEd("writeq('\\7\\').").next().toString());
1142-
assertEquals("writeq('*/')", parseEd("writeq('*/').").next().toString());
1143-
assertEquals("writeq('/**')", parseEd("writeq('/**').").next().toString());
11441150
assertEquals("writeq(a * (b + c))", parseEd("writeq(a*(b+c)).").next().toString());
11451151
assertEquals("writeq(f(;, '|', ';;'))", parseEd("writeq(f(;,'|',';;')).").next().toString());
11461152
assertEquals("writeq('a\\n b')", parseEd("writeq('a\\\n b'). % \"a\\\\\\n b\"").next().toString());

0 commit comments

Comments
 (0)