aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib
diff options
context:
space:
mode:
authorGravatar Laurent Le Brun <laurentlb@google.com>2015-03-23 14:20:03 +0000
committerGravatar Han-Wen Nienhuys <hanwen@google.com>2015-03-24 16:41:18 +0000
commit723298692c2df735e7492469551cd3a8018be3e1 (patch)
tree6415c67b760922b67f90cf0136f41b0fd6d00c07 /src/main/java/com/google/devtools/build/lib
parent4e116c7a26756c558692d6496b3a82147bbfaa02 (diff)
Parser: Improve error messages (mention what was expected)
-- MOS_MIGRATED_REVID=89296523
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib')
-rw-r--r--src/main/java/com/google/devtools/build/lib/syntax/Parser.java22
1 files changed, 11 insertions, 11 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/Parser.java b/src/main/java/com/google/devtools/build/lib/syntax/Parser.java
index 187f11bbf0..3ce949dac6 100644
--- a/src/main/java/com/google/devtools/build/lib/syntax/Parser.java
+++ b/src/main/java/com/google/devtools/build/lib/syntax/Parser.java
@@ -240,11 +240,11 @@ class Parser {
}
}
- private void syntaxError(Token token) {
+ private void syntaxError(Token token, String message) {
if (!recoveryMode) {
String msg = token.kind == TokenKind.INDENT
? "indentation error"
- : "syntax error at '" + token + "'";
+ : "syntax error at '" + token + "': " + message;
reportError(lexer.createLocation(token.left, token.right), msg);
recoveryMode = true;
}
@@ -255,7 +255,7 @@ class Parser {
private boolean expect(TokenKind kind) {
boolean expected = token.kind == kind;
if (!expected) {
- syntaxError(token);
+ syntaxError(token, "expected " + kind.getPrettyName());
}
nextToken();
return expected;
@@ -454,7 +454,7 @@ class Parser {
return setLocation(new DotExpression(receiver, ident), start, token.right);
}
} else {
- syntaxError(token);
+ syntaxError(token, "expected identifier after dot");
int end = syncTo(EXPR_TERMINATOR_SET);
return makeErrorExpression(start, end);
}
@@ -632,7 +632,7 @@ class Parser {
nextToken();
return expression;
}
- syntaxError(token);
+ expect(TokenKind.RPAREN);
int end = syncTo(EXPR_TERMINATOR_SET);
return makeErrorExpression(start, end);
}
@@ -646,7 +646,7 @@ class Parser {
start, token.right);
}
default: {
- syntaxError(token);
+ syntaxError(token, "expected expression");
int end = syncTo(EXPR_TERMINATOR_SET);
return makeErrorExpression(start, end);
}
@@ -772,7 +772,7 @@ class Parser {
}
} while (token.kind == TokenKind.FOR);
- syntaxError(token);
+ syntaxError(token, "expected 'for' or ']'");
int end = syncPast(LIST_TERMINATOR_SET);
return makeErrorExpression(start, end);
}
@@ -787,12 +787,12 @@ class Parser {
nextToken();
return literal;
}
- syntaxError(token);
+ expect(TokenKind.RBRACKET);
int end = syncPast(LIST_TERMINATOR_SET);
return makeErrorExpression(start, end);
}
default: {
- syntaxError(token);
+ syntaxError(token, "expected ',', 'for' or ']'");
int end = syncPast(LIST_TERMINATOR_SET);
return makeErrorExpression(start, end);
}
@@ -834,14 +834,14 @@ class Parser {
nextToken();
return literal;
}
- syntaxError(token);
+ expect(TokenKind.RBRACE);
int end = syncPast(DICT_TERMINATOR_SET);
return makeErrorExpression(start, end);
}
private Ident parseIdent() {
if (token.kind != TokenKind.IDENTIFIER) {
- syntaxError(token);
+ expect(TokenKind.IDENTIFIER);
return makeErrorExpression(token.left, token.right);
}
Ident ident = new Ident(((String) token.value));