diff --git a/src/main/java/org/sablecc/sablecc/lexer/Lexer.java b/src/main/java/org/sablecc/sablecc/lexer/Lexer.java
index fc0b4a3e3558577c4dc30064c1cc85d77de03dff..f397d6cc723c1cad118e96c9c8eebdb67b2ef174 100644
--- a/src/main/java/org/sablecc/sablecc/lexer/Lexer.java
+++ b/src/main/java/org/sablecc/sablecc/lexer/Lexer.java
@@ -174,11 +174,11 @@ public class Lexer
             {
                 if(acceptState != -1)
                 {
+                    Token tok;
                     switch(acceptToken)
                     {
                         case 0:
-                        {
-                            Token tok = new TPkgId(getText(acceptLength), startLine + 1, startPos + 1);
+                            tok = new TPkgId(getText(acceptLength), startLine + 1, startPos + 1);
                             pushBack(acceptLength);
                             this.pos = acceptPos;
                             this.line = acceptLine;
@@ -187,11 +187,10 @@ public class Lexer
                             {
                                 case 1: state = State.PACKAGE; break;
                             }
-                            return tok;
-                        }
+                            break;
+
                         case 1:
-                        {
-                            Token tok = new TPackage(startLine + 1, startPos + 1);
+                            tok = new TPackage(startLine + 1, startPos + 1);
                             pushBack(acceptLength);
                             this.pos = acceptPos;
                             this.line = acceptLine;
@@ -200,137 +199,122 @@ public class Lexer
                             {
                                 case 0: state = State.PACKAGE; break;
                             }
-                            return tok;
-                        }
+                            break;
+
                         case 2:
-                        {
-                            Token tok = new TStates(startLine + 1, startPos + 1);
+                            tok = new TStates(startLine + 1, startPos + 1);
                             pushBack(acceptLength);
                             this.pos = acceptPos;
                             this.line = acceptLine;
                             this.cr = acceptCr;
-                            return tok;
-                        }
+                            break;
+
                         case 3:
-                        {
-                            Token tok = new THelpers(startLine + 1, startPos + 1);
+                            tok = new THelpers(startLine + 1, startPos + 1);
                             pushBack(acceptLength);
                             this.pos = acceptPos;
                             this.line = acceptLine;
                             this.cr = acceptCr;
-                            return tok;
-                        }
+                            break;
+
                         case 4:
-                        {
-                            Token tok = new TTokens(startLine + 1, startPos + 1);
+                            tok = new TTokens(startLine + 1, startPos + 1);
                             pushBack(acceptLength);
                             this.pos = acceptPos;
                             this.line = acceptLine;
                             this.cr = acceptCr;
-                            return tok;
-                        }
+                            break;
+
                         case 5:
-                        {
-                            Token tok = new TIgnored(startLine + 1, startPos + 1);
+                            tok = new TIgnored(startLine + 1, startPos + 1);
                             pushBack(acceptLength);
                             this.pos = acceptPos;
                             this.line = acceptLine;
                             this.cr = acceptCr;
-                            return tok;
-                        }
+                            break;
+
                         case 6:
-                        {
-                            Token tok = new TProductions(startLine + 1, startPos + 1);
+                            tok = new TProductions(startLine + 1, startPos + 1);
                             pushBack(acceptLength);
                             this.pos = acceptPos;
                             this.line = acceptLine;
                             this.cr = acceptCr;
-                            return tok;
-                        }
+                            break;
+
                         case 7:
-                        {
-                            Token tok = new TAbstract(startLine + 1, startPos + 1);
+                            tok = new TAbstract(startLine + 1, startPos + 1);
                             pushBack(acceptLength);
                             this.pos = acceptPos;
                             this.line = acceptLine;
                             this.cr = acceptCr;
-                            return tok;
-                        }
+                            break;
+
                         case 8:
-                        {
-                            Token tok = new TSyntax(startLine + 1, startPos + 1);
+                            tok = new TSyntax(startLine + 1, startPos + 1);
                             pushBack(acceptLength);
                             this.pos = acceptPos;
                             this.line = acceptLine;
                             this.cr = acceptCr;
-                            return tok;
-                        }
+                            break;
+
                         case 9:
-                        {
-                            Token tok = new TTree(startLine + 1, startPos + 1);
+                            tok = new TTree(startLine + 1, startPos + 1);
                             pushBack(acceptLength);
                             this.pos = acceptPos;
                             this.line = acceptLine;
                             this.cr = acceptCr;
-                            return tok;
-                        }
+                            break;
+
                         case 10:
-                        {
-                            Token tok = new TNew(startLine + 1, startPos + 1);
+                            tok = new TNew(startLine + 1, startPos + 1);
                             pushBack(acceptLength);
                             this.pos = acceptPos;
                             this.line = acceptLine;
                             this.cr = acceptCr;
-                            return tok;
-                        }
+                            break;
+
                         case 11:
-                        {
-                            Token tok = new TNull(startLine + 1, startPos + 1);
+                            tok = new TNull(startLine + 1, startPos + 1);
                             pushBack(acceptLength);
                             this.pos = acceptPos;
                             this.line = acceptLine;
                             this.cr = acceptCr;
-                            return tok;
-                        }
+                            break;
+
                         case 12:
-                        {
-                            Token tok = new TTokenSpecifier(startLine + 1, startPos + 1);
+                            tok = new TTokenSpecifier(startLine + 1, startPos + 1);
                             pushBack(acceptLength);
                             this.pos = acceptPos;
                             this.line = acceptLine;
                             this.cr = acceptCr;
-                            return tok;
-                        }
+                            break;
+
                         case 13:
-                        {
-                            Token tok = new TProductionSpecifier(startLine + 1, startPos + 1);
+                            tok = new TProductionSpecifier(startLine + 1, startPos + 1);
                             pushBack(acceptLength);
                             this.pos = acceptPos;
                             this.line = acceptLine;
                             this.cr = acceptCr;
-                            return tok;
-                        }
+                            break;
+
                         case 14:
-                        {
-                            Token tok = new TDot(startLine + 1, startPos + 1);
+                            tok = new TDot(startLine + 1, startPos + 1);
                             pushBack(acceptLength);
                             this.pos = acceptPos;
                             this.line = acceptLine;
                             this.cr = acceptCr;
-                            return tok;
-                        }
+                            break;
+
                         case 15:
-                        {
-                            Token tok = new TDDot(startLine + 1, startPos + 1);
+                            tok = new TDDot(startLine + 1, startPos + 1);
                             pushBack(acceptLength);
                             this.pos = acceptPos;
                             this.line = acceptLine;
                             this.cr = acceptCr;
-                            return tok;
-                        }
+                            break;
+
                         case 16:
-                        {
-                            Token tok = new TSemicolon(startLine + 1, startPos + 1);
+                            tok = new TSemicolon(startLine + 1, startPos + 1);
                             pushBack(acceptLength);
                             this.pos = acceptPos;
                             this.line = acceptLine;
@@ -340,216 +324,196 @@ public class Lexer
                                 case 0: state = State.NORMAL; break;
                                 case 1: state = State.NORMAL; break;
                             }
-                            return tok;
-                        }
+                            break;
+
                         case 17:
-                        {
-                            Token tok = new TEqual(startLine + 1, startPos + 1);
+                            tok = new TEqual(startLine + 1, startPos + 1);
                             pushBack(acceptLength);
                             this.pos = acceptPos;
                             this.line = acceptLine;
                             this.cr = acceptCr;
-                            return tok;
-                        }
+                            break;
+
                         case 18:
-                        {
-                            Token tok = new TLBkt(startLine + 1, startPos + 1);
+                            tok = new TLBkt(startLine + 1, startPos + 1);
                             pushBack(acceptLength);
                             this.pos = acceptPos;
                             this.line = acceptLine;
                             this.cr = acceptCr;
-                            return tok;
-                        }
+                            break;
+
                         case 19:
-                        {
-                            Token tok = new TRBkt(startLine + 1, startPos + 1);
+                            tok = new TRBkt(startLine + 1, startPos + 1);
                             pushBack(acceptLength);
                             this.pos = acceptPos;
                             this.line = acceptLine;
                             this.cr = acceptCr;
-                            return tok;
-                        }
+                            break;
+
                         case 20:
-                        {
-                            Token tok = new TLPar(startLine + 1, startPos + 1);
+                            tok = new TLPar(startLine + 1, startPos + 1);
                             pushBack(acceptLength);
                             this.pos = acceptPos;
                             this.line = acceptLine;
                             this.cr = acceptCr;
-                            return tok;
-                        }
+                            break;
+
                         case 21:
-                        {
-                            Token tok = new TRPar(startLine + 1, startPos + 1);
+                            tok = new TRPar(startLine + 1, startPos + 1);
                             pushBack(acceptLength);
                             this.pos = acceptPos;
                             this.line = acceptLine;
                             this.cr = acceptCr;
-                            return tok;
-                        }
+                            break;
+
                         case 22:
-                        {
-                            Token tok = new TLBrace(startLine + 1, startPos + 1);
+                            tok = new TLBrace(startLine + 1, startPos + 1);
                             pushBack(acceptLength);
                             this.pos = acceptPos;
                             this.line = acceptLine;
                             this.cr = acceptCr;
-                            return tok;
-                        }
+                            break;
+
                         case 23:
-                        {
-                            Token tok = new TRBrace(startLine + 1, startPos + 1);
+                            tok = new TRBrace(startLine + 1, startPos + 1);
                             pushBack(acceptLength);
                             this.pos = acceptPos;
                             this.line = acceptLine;
                             this.cr = acceptCr;
-                            return tok;
-                        }
+                            break;
+
                         case 24:
-                        {
-                            Token tok = new TPlus(startLine + 1, startPos + 1);
+                            tok = new TPlus(startLine + 1, startPos + 1);
                             pushBack(acceptLength);
                             this.pos = acceptPos;
                             this.line = acceptLine;
                             this.cr = acceptCr;
-                            return tok;
-                        }
+                            break;
+
                         case 25:
-                        {
-                            Token tok = new TMinus(startLine + 1, startPos + 1);
+                            tok = new TMinus(startLine + 1, startPos + 1);
                             pushBack(acceptLength);
                             this.pos = acceptPos;
                             this.line = acceptLine;
                             this.cr = acceptCr;
-                            return tok;
-                        }
+                            break;
+
                         case 26:
-                        {
-                            Token tok = new TQMark(startLine + 1, startPos + 1);
+                            tok = new TQMark(startLine + 1, startPos + 1);
                             pushBack(acceptLength);
                             this.pos = acceptPos;
                             this.line = acceptLine;
                             this.cr = acceptCr;
-                            return tok;
-                        }
+                            break;
+
                         case 27:
-                        {
-                            Token tok = new TStar(startLine + 1, startPos + 1);
+                            tok = new TStar(startLine + 1, startPos + 1);
                             pushBack(acceptLength);
                             this.pos = acceptPos;
                             this.line = acceptLine;
                             this.cr = acceptCr;
-                            return tok;
-                        }
+                            break;
+
                         case 28:
-                        {
-                            Token tok = new TBar(startLine + 1, startPos + 1);
+                            tok = new TBar(startLine + 1, startPos + 1);
                             pushBack(acceptLength);
                             this.pos = acceptPos;
                             this.line = acceptLine;
                             this.cr = acceptCr;
-                            return tok;
-                        }
+                            break;
+
                         case 29:
-                        {
-                            Token tok = new TComma(startLine + 1, startPos + 1);
+                            tok = new TComma(startLine + 1, startPos + 1);
                             pushBack(acceptLength);
                             this.pos = acceptPos;
                             this.line = acceptLine;
                             this.cr = acceptCr;
-                            return tok;
-                        }
+                            break;
+
                         case 30:
-                        {
-                            Token tok = new TSlash(startLine + 1, startPos + 1);
+                            tok = new TSlash(startLine + 1, startPos + 1);
                             pushBack(acceptLength);
                             this.pos = acceptPos;
                             this.line = acceptLine;
                             this.cr = acceptCr;
-                            return tok;
-                        }
+                            break;
+
                         case 31:
-                        {
-                            Token tok = new TArrow(startLine + 1, startPos + 1);
+                            tok = new TArrow(startLine + 1, startPos + 1);
                             pushBack(acceptLength);
                             this.pos = acceptPos;
                             this.line = acceptLine;
                             this.cr = acceptCr;
-                            return tok;
-                        }
+                            break;
+
                         case 32:
-                        {
-                            Token tok = new TColon(startLine + 1, startPos + 1);
+                            tok = new TColon(startLine + 1, startPos + 1);
                             pushBack(acceptLength);
                             this.pos = acceptPos;
                             this.line = acceptLine;
                             this.cr = acceptCr;
-                            return tok;
-                        }
+                            break;
+
                         case 33:
-                        {
-                            Token tok = new TId(getText(acceptLength), startLine + 1, startPos + 1);
+                            tok = new TId(getText(acceptLength), startLine + 1, startPos + 1);
                             pushBack(acceptLength);
                             this.pos = acceptPos;
                             this.line = acceptLine;
                             this.cr = acceptCr;
-                            return tok;
-                        }
+                            break;
+
                         case 34:
-                        {
-                            Token tok = new TChar(getText(acceptLength), startLine + 1, startPos + 1);
+                            tok = new TChar(getText(acceptLength), startLine + 1, startPos + 1);
                             pushBack(acceptLength);
                             this.pos = acceptPos;
                             this.line = acceptLine;
                             this.cr = acceptCr;
-                            return tok;
-                        }
+                            break;
+
                         case 35:
-                        {
-                            Token tok = new TDecChar(getText(acceptLength), startLine + 1, startPos + 1);
+                            tok = new TDecChar(getText(acceptLength), startLine + 1, startPos + 1);
                             pushBack(acceptLength);
                             this.pos = acceptPos;
                             this.line = acceptLine;
                             this.cr = acceptCr;
-                            return tok;
-                        }
+                            break;
+
                         case 36:
-                        {
-                            Token tok = new THexChar(getText(acceptLength), startLine + 1, startPos + 1);
+                            tok = new THexChar(getText(acceptLength), startLine + 1, startPos + 1);
                             pushBack(acceptLength);
                             this.pos = acceptPos;
                             this.line = acceptLine;
                             this.cr = acceptCr;
-                            return tok;
-                        }
+                            break;
+
                         case 37:
-                        {
-                            Token tok = new TString(getText(acceptLength), startLine + 1, startPos + 1);
+                            tok = new TString(getText(acceptLength), startLine + 1, startPos + 1);
                             pushBack(acceptLength);
                             this.pos = acceptPos;
                             this.line = acceptLine;
                             this.cr = acceptCr;
-                            return tok;
-                        }
+                            break;
+
                         case 38:
-                        {
-                            Token tok = new TBlank(getText(acceptLength), startLine + 1, startPos + 1);
+                            tok = new TBlank(getText(acceptLength), startLine + 1, startPos + 1);
                             pushBack(acceptLength);
                             this.pos = acceptPos;
                             this.line = acceptLine;
                             this.cr = acceptCr;
-                            return tok;
-                        }
+                            break;
+
                         case 39:
-                        {
-                            Token tok = new TComment(getText(acceptLength), startLine + 1, startPos + 1);
+                            tok = new TComment(getText(acceptLength), startLine + 1, startPos + 1);
                             pushBack(acceptLength);
                             this.pos = acceptPos;
                             this.line = acceptLine;
                             this.cr = acceptCr;
-                            return tok;
-                        }
+                            break;
+
+                        default:
+                            throw new LexerException("[" + (startLine + 1) + "," + (startPos + 1) + "] Internal lexer error: invalid accept table entry " + acceptToken + ", current text: " + this.text);
                     }
+                    return tok;
                 }
                 else
                 {
diff --git a/src/main/resources/org/sablecc/sablecc/lexer.txt b/src/main/resources/org/sablecc/sablecc/lexer.txt
index 3be7cbf3ecc7a1d2e9ddbfb51e8880e8c1b6aa67..d9e3e82a7ca7bf64cbdb6125a9d955cb018f3e51 100644
--- a/src/main/resources/org/sablecc/sablecc/lexer.txt
+++ b/src/main/resources/org/sablecc/sablecc/lexer.txt
@@ -198,6 +198,7 @@ public class Lexer
             {
                 if(acceptState != -1)
                 {
+                    Token tok;
                     switch(acceptToken)
                     {
 
@@ -205,8 +206,7 @@ $
 
 Macro:LexerVariableToken
                         case $0$:
-                        {
-                            Token tok = new $1$(getText(acceptLength), startLine + 1, startPos + 1);
+                            tok = new $1$(getText(acceptLength), startLine + 1, startPos + 1);
                             pushBack(acceptLength);
                             this.pos = acceptPos;
                             this.line = acceptLine;
@@ -216,8 +216,7 @@ $
 
 Macro:LexerFixedToken
                         case $0$:
-                        {
-                            Token tok = new $1$(startLine + 1, startPos + 1);
+                            tok = new $1$(startLine + 1, startPos + 1);
                             pushBack(acceptLength);
                             this.pos = acceptPos;
                             this.line = acceptLine;
@@ -242,13 +241,16 @@ Macro:TokenSwitchTail
 $
 
 Macro:LexerTokenTail
-                            return tok;
-                        }
+                            break;
+
 
 $
 
 Macro:LexerBody
+                        default:
+                            throw new LexerException("[" + (startLine + 1) + "," + (startPos + 1) + "] Internal lexer error: invalid accept table entry " + acceptToken + ", current text: " + this.text);
                     }
+                    return tok;
                 }
                 else
                 {