diff --git a/src/main/java/org/sablecc/sablecc/parser/Parser.java b/src/main/java/org/sablecc/sablecc/parser/Parser.java index b44a61ba034208cdc4c6030e5a91aead98a1092c..57fa0e13e2fd01b8dc804004d05abb96d726abc6 100644 --- a/src/main/java/org/sablecc/sablecc/parser/Parser.java +++ b/src/main/java/org/sablecc/sablecc/parser/Parser.java @@ -123,25 +123,26 @@ public class Parser implements IParser private int goTo(int index) { int state = state(); + int[][] table = gotoTable[index]; int low = 1; - int high = gotoTable[index].length - 1; - int value = gotoTable[index][0][1]; + int high = table.length - 1; + int value = table[0][1]; while(low <= high) { int middle = (low + high) >>> 1; - if(state < gotoTable[index][middle][0]) + if(state < table[middle][0]) { high = middle - 1; } - else if(state > gotoTable[index][middle][0]) + else if(state > table[middle][0]) { low = middle + 1; } else { - value = gotoTable[index][middle][1]; + value = table[middle][1]; break; } } @@ -185,28 +186,29 @@ public class Parser implements IParser } int state = state(); - int action = Parser.actionTable[state][0][1]; - int destination = Parser.actionTable[state][0][2]; + int[][] table = actionTable[state]; + int action = table[0][1]; + int destination = table[0][2]; int low = 1; - int high = Parser.actionTable[state].length - 1; + int high = table.length - 1; while(low <= high) { int middle = (low + high) >>> 1; - if(index < Parser.actionTable[state][middle][0]) + if(index < table[middle][0]) { high = middle - 1; } - else if(index > Parser.actionTable[state][middle][0]) + else if(index > table[middle][0]) { low = middle + 1; } else { - action = Parser.actionTable[state][middle][1]; - destination = Parser.actionTable[state][middle][2]; + action = table[middle][1]; + destination = table[middle][2]; break; } } diff --git a/src/main/resources/org/sablecc/sablecc/parser.txt b/src/main/resources/org/sablecc/sablecc/parser.txt index 3d1db583d18ae18a1798d6fdd519869911b80ede..f87cb07cc4cd10112f9b6cdd5ed7f2cd911ceab2 100644 --- a/src/main/resources/org/sablecc/sablecc/parser.txt +++ b/src/main/resources/org/sablecc/sablecc/parser.txt @@ -155,25 +155,26 @@ Macro:ParserCommon private int goTo(int index) { int state = state(); + int[][] table = gotoTable[index]; int low = 1; - int high = gotoTable[index].length - 1; - int value = gotoTable[index][0][1]; + int high = table.length - 1; + int value = table[0][1]; while(low <= high) { int middle = (low + high) >>> 1; - if(state < gotoTable[index][middle][0]) + if(state < table[middle][0]) { high = middle - 1; } - else if(state > gotoTable[index][middle][0]) + else if(state > table[middle][0]) { low = middle + 1; } else { - value = gotoTable[index][middle][1]; + value = table[middle][1]; break; } } @@ -217,28 +218,29 @@ Macro:ParserCommon } int state = state(); - int action = Parser.actionTable[state][0][1]; - int destination = Parser.actionTable[state][0][2]; + int[][] table = actionTable[state]; + int action = table[0][1]; + int destination = table[0][2]; int low = 1; - int high = Parser.actionTable[state].length - 1; + int high = table.length - 1; while(low <= high) { int middle = (low + high) >>> 1; - if(index < Parser.actionTable[state][middle][0]) + if(index < table[middle][0]) { high = middle - 1; } - else if(index > Parser.actionTable[state][middle][0]) + else if(index > table[middle][0]) { low = middle + 1; } else { - action = Parser.actionTable[state][middle][1]; - destination = Parser.actionTable[state][middle][2]; + action = table[middle][1]; + destination = table[middle][2]; break; } }