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 File sourceFile;
private boolean suppressErrors;
public Token nextToken() { public Token nextToken() {
try { try {
Token token = yylex(); Token token = yylex();
if (token instanceof InvalidToken) { if (token instanceof InvalidToken) {
InvalidToken invalidToken = (InvalidToken)token;
if (!suppressErrors) {
System.err.println(getErrorHeader(invalidToken) + " Error for input '" +
invalidToken.getText() + "': " + invalidToken.getMessage());
}
lexerErrors++; lexerErrors++;
} }
return token; return token;
@ -58,6 +65,10 @@ import static org.jf.smali.smaliParser.*;
return this.yycolumn; return this.yycolumn;
} }
public void setSuppressErrors(boolean suppressErrors) {
this.suppressErrors = suppressErrors;
}
public void setSourceFile(File sourceFile) { public void setSourceFile(File sourceFile) {
this.sourceFile = sourceFile; this.sourceFile = sourceFile;
} }
@ -155,8 +166,8 @@ import static org.jf.smali.smaliParser.*;
return token; return token;
} }
public String getErrorHeader(RecognitionException e) { public String getErrorHeader(InvalidToken token) {
return getSourceName()+"["+ e.line+","+e.charPositionInLine+"]"; return getSourceName()+"["+ token.getLine()+","+token.getCharPositionInLine()+"]";
} }
%} %}

View File

@ -154,6 +154,8 @@ public class LexerTest {
Assert.fail("Could not load " + smaliFile); Assert.fail("Could not load " + smaliFile);
} }
smaliFlexLexer lexer = new smaliFlexLexer(smaliStream); smaliFlexLexer lexer = new smaliFlexLexer(smaliStream);
lexer.setSourceFile(new File(test + ".smali"));
lexer.setSuppressErrors(true);
CommonTokenStream tokenStream = new CommonTokenStream(lexer); CommonTokenStream tokenStream = new CommonTokenStream(lexer);
List tokens = tokenStream.getTokens(); List tokens = tokenStream.getTokens();