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();
|
||||
GrammarAST root = (GrammarAST)r.getTree();
|
||||
if ( root instanceof GrammarRootAST) {
|
||||
((GrammarRootAST)root).hasErrors = p.getNumberOfSyntaxErrors()>0;
|
||||
((GrammarRootAST)root).hasErrors = lexer.getNumberOfSyntaxErrors()>0 || p.getNumberOfSyntaxErrors()>0;
|
||||
assert ((GrammarRootAST)root).tokenStream == tokens;
|
||||
if ( grammarOptions!=null ) {
|
||||
((GrammarRootAST)root).cmdLineOptions = grammarOptions;
|
||||
|
|
|
@ -777,6 +777,7 @@ ERRCHAR
|
|||
t.setCharPositionInLine(state.tokenStartCharPositionInLine);
|
||||
String msg = getTokenErrorDisplay(t) + " came as a complete surprise to me";
|
||||
grammarError(ErrorType.SYNTAX_ERROR, t, msg);
|
||||
state.syntaxErrors++;
|
||||
skip();
|
||||
}
|
||||
;
|
||||
|
|
|
@ -377,4 +377,36 @@ public class TestToolSyntaxErrors extends BaseTest {
|
|||
String[] pair = new String[] { grammar, expected };
|
||||
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