From b7327c5ffa570a81416a53158de8c218a2c25b2d Mon Sep 17 00:00:00 2001 From: dgelessus <dgelessus@users.noreply.github.com> Date: Fri, 10 May 2024 17:22:26 +0200 Subject: [PATCH] Skip generating Lexer state transitions that go to the same state This saves a switch case for every non-transitioning state in a token's state list. If a token has no state transitions at all (only a list of allowed states), this eliminates the entire state transition switch. --- src/main/java/org/sablecc/sablecc/Transitions.java | 8 ++++++-- src/main/java/org/sablecc/sablecc/lexer/Lexer.java | 5 ----- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/src/main/java/org/sablecc/sablecc/Transitions.java b/src/main/java/org/sablecc/sablecc/Transitions.java index e612a83..56fd8c0 100644 --- a/src/main/java/org/sablecc/sablecc/Transitions.java +++ b/src/main/java/org/sablecc/sablecc/Transitions.java @@ -73,13 +73,17 @@ public class Transitions extends DepthFirstAdapter @Override public void outAStateList(AStateList node) { - map.put(state, transition); + if (!state.equals(transition)) { + map.put(state, transition); + } } @Override public void outAStateListTail(AStateListTail node) { - map.put(state, transition); + if (!state.equals(transition)) { + map.put(state, transition); + } } @Override diff --git a/src/main/java/org/sablecc/sablecc/lexer/Lexer.java b/src/main/java/org/sablecc/sablecc/lexer/Lexer.java index 32c197b..f8787a2 100644 --- a/src/main/java/org/sablecc/sablecc/lexer/Lexer.java +++ b/src/main/java/org/sablecc/sablecc/lexer/Lexer.java @@ -183,10 +183,6 @@ public class Lexer case 0: tok = new TPkgId(getText(acceptLength), startLine + 1, startPos + 1); - switch(state.ordinal()) - { - case 1: state = State.PACKAGE; break; - } break; case 1: @@ -257,7 +253,6 @@ public class Lexer tok = new TSemicolon(startLine + 1, startPos + 1); switch(state.ordinal()) { - case 0: state = State.NORMAL; break; case 1: state = State.NORMAL; break; } break; -- GitLab