From 392709d7b11d81f1795e75a9d1fece2192e2ba6c Mon Sep 17 00:00:00 2001 From: dgelessus <dgelessus@users.noreply.github.com> Date: Fri, 10 May 2024 15:39:51 +0200 Subject: [PATCH] Prepare sharing code between cases of generated Lexer accept switch --- .../java/org/sablecc/sablecc/lexer/Lexer.java | 284 ++++++++---------- .../resources/org/sablecc/sablecc/lexer.txt | 14 +- 2 files changed, 132 insertions(+), 166 deletions(-) diff --git a/src/main/java/org/sablecc/sablecc/lexer/Lexer.java b/src/main/java/org/sablecc/sablecc/lexer/Lexer.java index fc0b4a3..f397d6c 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 3be7cbf..d9e3e82 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 { -- GitLab