Merge pull request #418 from sharwell/fix-308
Syntax errors while lexing stop grammar compilation process (fixes #308)
This commit is contained in:
commit
fe5f93a0f4
|
@ -631,7 +631,7 @@ public class Tool {
|
||||||
ParserRuleReturnScope r = p.grammarSpec();
|
ParserRuleReturnScope r = p.grammarSpec();
|
||||||
GrammarAST root = (GrammarAST)r.getTree();
|
GrammarAST root = (GrammarAST)r.getTree();
|
||||||
if ( root instanceof GrammarRootAST) {
|
if ( root instanceof GrammarRootAST) {
|
||||||
((GrammarRootAST)root).hasErrors = p.getNumberOfSyntaxErrors()>0;
|
((GrammarRootAST)root).hasErrors = lexer.getNumberOfSyntaxErrors()>0 || p.getNumberOfSyntaxErrors()>0;
|
||||||
assert ((GrammarRootAST)root).tokenStream == tokens;
|
assert ((GrammarRootAST)root).tokenStream == tokens;
|
||||||
if ( grammarOptions!=null ) {
|
if ( grammarOptions!=null ) {
|
||||||
((GrammarRootAST)root).cmdLineOptions = grammarOptions;
|
((GrammarRootAST)root).cmdLineOptions = grammarOptions;
|
||||||
|
|
|
@ -777,6 +777,7 @@ ERRCHAR
|
||||||
t.setCharPositionInLine(state.tokenStartCharPositionInLine);
|
t.setCharPositionInLine(state.tokenStartCharPositionInLine);
|
||||||
String msg = getTokenErrorDisplay(t) + " came as a complete surprise to me";
|
String msg = getTokenErrorDisplay(t) + " came as a complete surprise to me";
|
||||||
grammarError(ErrorType.SYNTAX_ERROR, t, msg);
|
grammarError(ErrorType.SYNTAX_ERROR, t, msg);
|
||||||
|
state.syntaxErrors++;
|
||||||
skip();
|
skip();
|
||||||
}
|
}
|
||||||
;
|
;
|
||||||
|
|
|
@ -377,4 +377,36 @@ public class TestToolSyntaxErrors extends BaseTest {
|
||||||
String[] pair = new String[] { grammar, expected };
|
String[] pair = new String[] { grammar, expected };
|
||||||
super.testErrors(pair, true);
|
super.testErrors(pair, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This is a regression test for antlr/antlr4#308 "NullPointer exception"
|
||||||
|
* https://github.com/antlr/antlr4/issues/308
|
||||||
|
*/
|
||||||
|
@Test public void testDoubleQuotedStringLiteral() {
|
||||||
|
String grammar =
|
||||||
|
"lexer grammar A;\n"
|
||||||
|
+ "WHITESPACE : (\" \" | \"\\t\" | \"\\n\" | \"\\r\" | \"\\f\");\n";
|
||||||
|
String expected =
|
||||||
|
"error(" + ErrorType.SYNTAX_ERROR.code + "): A.g4:2:14: syntax error: '\"' came as a complete surprise to me\n" +
|
||||||
|
"error(" + ErrorType.SYNTAX_ERROR.code + "): A.g4:2:16: syntax error: '\"' came as a complete surprise to me\n" +
|
||||||
|
"error(" + ErrorType.SYNTAX_ERROR.code + "): A.g4:2:20: syntax error: '\"' came as a complete surprise to me\n" +
|
||||||
|
"error(" + ErrorType.SYNTAX_ERROR.code + "): A.g4:2:21: syntax error: '\\' came as a complete surprise to me\n" +
|
||||||
|
"error(" + ErrorType.SYNTAX_ERROR.code + "): A.g4:2:23: syntax error: '\"' came as a complete surprise to me\n" +
|
||||||
|
"error(" + ErrorType.SYNTAX_ERROR.code + "): A.g4:2:27: syntax error: '\"' came as a complete surprise to me\n" +
|
||||||
|
"error(" + ErrorType.SYNTAX_ERROR.code + "): A.g4:2:28: syntax error: '\\' came as a complete surprise to me\n" +
|
||||||
|
"error(" + ErrorType.SYNTAX_ERROR.code + "): A.g4:2:30: syntax error: '\"' came as a complete surprise to me\n" +
|
||||||
|
"error(" + ErrorType.SYNTAX_ERROR.code + "): A.g4:2:34: syntax error: '\"' came as a complete surprise to me\n" +
|
||||||
|
"error(" + ErrorType.SYNTAX_ERROR.code + "): A.g4:2:35: syntax error: '\\' came as a complete surprise to me\n" +
|
||||||
|
"error(" + ErrorType.SYNTAX_ERROR.code + "): A.g4:2:37: syntax error: '\"' came as a complete surprise to me\n" +
|
||||||
|
"error(" + ErrorType.SYNTAX_ERROR.code + "): A.g4:2:41: syntax error: '\"' came as a complete surprise to me\n" +
|
||||||
|
"error(" + ErrorType.SYNTAX_ERROR.code + "): A.g4:2:42: syntax error: '\\' came as a complete surprise to me\n" +
|
||||||
|
"error(" + ErrorType.SYNTAX_ERROR.code + "): A.g4:2:44: syntax error: '\"' came as a complete surprise to me\n";
|
||||||
|
|
||||||
|
String[] pair = new String[] {
|
||||||
|
grammar,
|
||||||
|
expected
|
||||||
|
};
|
||||||
|
|
||||||
|
super.testErrors(pair, true);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue