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
This commit is contained in:
JesusFreke@JesusFreke.com 2010-06-13 20:34:49 +00:00
parent a377d50495
commit 73d1b5d3cb
2 changed files with 15 additions and 2 deletions

View File

@ -28,10 +28,17 @@ import static org.jf.smali.smaliParser.*;
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 @@ import static org.jf.smali.smaliParser.*;
return this.yycolumn;
}
public void setSuppressErrors(boolean suppressErrors) {
this.suppressErrors = suppressErrors;
}
public void setSourceFile(File sourceFile) {
this.sourceFile = sourceFile;
}
@ -155,8 +166,8 @@ import static org.jf.smali.smaliParser.*;
return token;
}
public String getErrorHeader(RecognitionException e) {
return getSourceName()+"["+ e.line+","+e.charPositionInLine+"]";
public String getErrorHeader(InvalidToken token) {
return getSourceName()+"["+ token.getLine()+","+token.getCharPositionInLine()+"]";
}
%}

View File

@ -154,6 +154,8 @@ public class LexerTest {
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();