From 3302fc19ae62ee5fd6bca11f9cec5a52a1649bf7 Mon Sep 17 00:00:00 2001 From: dgelessus <dgelessus@users.noreply.github.com> Date: Tue, 5 Apr 2022 14:49:04 +0200 Subject: [PATCH] Optimize binary search in lexer and parser slightly This change was ported from SableCC 3.5. --- src/main/resources/org/sablecc/sablecc/lexer.txt | 2 +- src/main/resources/org/sablecc/sablecc/parser.txt | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/resources/org/sablecc/sablecc/lexer.txt b/src/main/resources/org/sablecc/sablecc/lexer.txt index 3e9a5b3..12b4cdf 100644 --- a/src/main/resources/org/sablecc/sablecc/lexer.txt +++ b/src/main/resources/org/sablecc/sablecc/lexer.txt @@ -179,7 +179,7 @@ public class Lexer implements ITokenListContainer // an entry {Low, Up, Id} -> means if Low <= c <= Up -> goto state Id while(low <= high) { - int middle = (low + high) / 2; + int middle = (low + high) >>> 1; int[] tmp2 = tmp1[middle]; if(c < tmp2[0]) diff --git a/src/main/resources/org/sablecc/sablecc/parser.txt b/src/main/resources/org/sablecc/sablecc/parser.txt index 82ef6f2..eef5e45 100644 --- a/src/main/resources/org/sablecc/sablecc/parser.txt +++ b/src/main/resources/org/sablecc/sablecc/parser.txt @@ -236,7 +236,7 @@ Macro:ParserCommon while(low <= high) { - int middle = (low + high) / 2; + int middle = (low + high) >>> 1; if(state < gotoTable[index][middle][0]) { @@ -308,7 +308,7 @@ Macro:ParserCommon while(low <= high) { - int middle = (low + high) / 2; + int middle = (low + high) >>> 1; if(index < Parser.actionTable[state()][middle][0]) { -- GitLab