diff --git a/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/REngine.java b/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/REngine.java
index 649f4d84aa04ea9937d99cfd4e68f2924c6b3321..7ce8e04ceca2b00fc0b215b48d84ab9dc7f8e423 100644
--- a/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/REngine.java
+++ b/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/REngine.java
@@ -289,7 +289,7 @@ final class REngine implements Engine, Engine.Timings {
         } catch (RecognitionException e) {
             String line = e.line <= source.getLineCount() ? source.getCode(e.line) : "";
             String substring = line.substring(0, Math.min(line.length(), e.charPositionInLine + 1));
-            String token = e.token == null ? substring.substring(substring.length() - 1) : e.token.getText();
+            String token = e.token == null ? (substring.length() == 0 ? "" : substring.substring(substring.length() - 1)) : e.token.getText();
             if (e.token != null && e.token.getType() == Token.EOF && (e instanceof NoViableAltException || e instanceof MismatchedTokenException)) {
                 // the parser got stuck at the eof, request another line
                 throw new IncompleteSourceException(e, source, token, substring, e.line);