Print out an error message for invalid tokens in the lexer, but add a way to suppress the errors
Suppress the lexer errors for unit tests
git-svn-id: https://smali.googlecode.com/svn/trunk@758 55b6fa8a-2a1e-11de-a435-ffa8d773f76a
diff --git a/smali/src/main/jflex/smaliLexer.flex b/smali/src/main/jflex/smaliLexer.flex
index d5269c6..5f027d3 100644
--- a/smali/src/main/jflex/smaliLexer.flex
+++ b/smali/src/main/jflex/smaliLexer.flex
@@ -28,10 +28,17 @@
private File sourceFile;
+ private boolean suppressErrors;
+
public Token nextToken() {
try {
Token token = yylex();
if (token instanceof InvalidToken) {
+ InvalidToken invalidToken = (InvalidToken)token;
+ if (!suppressErrors) {
+ System.err.println(getErrorHeader(invalidToken) + " Error for input '" +
+ invalidToken.getText() + "': " + invalidToken.getMessage());
+ }
lexerErrors++;
}
return token;
@@ -58,6 +65,10 @@
return this.yycolumn;
}
+ public void setSuppressErrors(boolean suppressErrors) {
+ this.suppressErrors = suppressErrors;
+ }
+
public void setSourceFile(File sourceFile) {
this.sourceFile = sourceFile;
}
@@ -155,8 +166,8 @@
return token;
}
- public String getErrorHeader(RecognitionException e) {
- return getSourceName()+"["+ e.line+","+e.charPositionInLine+"]";
+ public String getErrorHeader(InvalidToken token) {
+ return getSourceName()+"["+ token.getLine()+","+token.getCharPositionInLine()+"]";
}
%}
diff --git a/smali/src/test/java/LexerTest.java b/smali/src/test/java/LexerTest.java
index d3cf5ff..ed28280 100644
--- a/smali/src/test/java/LexerTest.java
+++ b/smali/src/test/java/LexerTest.java
@@ -154,6 +154,8 @@
Assert.fail("Could not load " + smaliFile);
}
smaliFlexLexer lexer = new smaliFlexLexer(smaliStream);
+ lexer.setSourceFile(new File(test + ".smali"));
+ lexer.setSuppressErrors(true);
CommonTokenStream tokenStream = new CommonTokenStream(lexer);
List tokens = tokenStream.getTokens();