From 73d1b5d3cbc845e7123f41acd80c8cca4c1a369d Mon Sep 17 00:00:00 2001 From: "JesusFreke@JesusFreke.com" Date: Sun, 13 Jun 2010 20:34:49 +0000 Subject: [PATCH] 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 --- smali/src/main/jflex/smaliLexer.flex | 15 +++++++++++++-- smali/src/test/java/LexerTest.java | 2 ++ 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/smali/src/main/jflex/smaliLexer.flex b/smali/src/main/jflex/smaliLexer.flex index d5269c67..5f027d30 100644 --- a/smali/src/main/jflex/smaliLexer.flex +++ b/smali/src/main/jflex/smaliLexer.flex @@ -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()+"]"; } %} diff --git a/smali/src/test/java/LexerTest.java b/smali/src/test/java/LexerTest.java index d3cf5ff8..ed28280a 100644 --- a/smali/src/test/java/LexerTest.java +++ b/smali/src/test/java/LexerTest.java @@ -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();