diff --git a/src/de/stups/probkodkod/EOFLexer.java b/src/de/stups/probkodkod/EOFLexer.java index a066969a0f46a017d944b0cc835aeb480309a5c4..1f0d9ebc3350768b04a24bec067dd5dd18271843 100644 --- a/src/de/stups/probkodkod/EOFLexer.java +++ b/src/de/stups/probkodkod/EOFLexer.java @@ -19,7 +19,6 @@ import de.stups.probkodkod.parser.node.Token; * @author plagge */ public class EOFLexer extends Lexer { - public EOFLexer(final PushbackReader in) { super(in); } @@ -39,10 +38,15 @@ public class EOFLexer extends Lexer { } private Token filter(Token token) { - if (token instanceof TFullstop) { + if (token instanceof EOF) + throw new AbortException(); + else if (token instanceof TFullstop) { token = new EOF(); } return token; } + public static class AbortException extends RuntimeException { + private static final long serialVersionUID = 4042645224685292559L; + } } diff --git a/src/de/stups/probkodkod/KodkodInteraction.java b/src/de/stups/probkodkod/KodkodInteraction.java index 0bbfd5c8b6e6126add08fc74cfc92295c0fc4df0..4fbecfe5061cce11296e655afb9d54a6a39d36ab 100644 --- a/src/de/stups/probkodkod/KodkodInteraction.java +++ b/src/de/stups/probkodkod/KodkodInteraction.java @@ -48,10 +48,14 @@ public class KodkodInteraction { final Lexer lexer = new EOFLexer(in); final Parser parser = new Parser(lexer); - while (!session.isStopped()) { - final Start tree = parser.parse(); - tree.apply(analysis); - pto.flush(); + try { + while (!session.isStopped()) { + final Start tree = parser.parse(); + tree.apply(analysis); + pto.flush(); + } + } catch (EOFLexer.AbortException e) { + logger.info("EOF reached"); } logger.info("Kodkod session finished");