From: yeom Date: Tue, 26 Apr 2011 22:44:26 +0000 (+0000) Subject: has a hack on java_cup parser generator: divides a gigantic do_action method into... X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=35ac87272fa37d1880681407e6b6485c632330bd;p=IRC.git has a hack on java_cup parser generator: divides a gigantic do_action method into halves since Java doesn't allow a method bigger than 64K" --- diff --git a/Robust/cup/java_cup/CUP$parser$actions.class b/Robust/cup/java_cup/CUP$parser$actions.class index 79416853..b0b50b07 100644 Binary files a/Robust/cup/java_cup/CUP$parser$actions.class and b/Robust/cup/java_cup/CUP$parser$actions.class differ diff --git a/Robust/cup/java_cup/Main.class b/Robust/cup/java_cup/Main.class index fb7c7644..2947306e 100644 Binary files a/Robust/cup/java_cup/Main.class and b/Robust/cup/java_cup/Main.class differ diff --git a/Robust/cup/java_cup/emit.class b/Robust/cup/java_cup/emit.class index f17bf08c..d465825c 100644 Binary files a/Robust/cup/java_cup/emit.class and b/Robust/cup/java_cup/emit.class differ diff --git a/Robust/cup/java_cup/emit.java b/Robust/cup/java_cup/emit.java index 9db9014a..f8d04346 100644 --- a/Robust/cup/java_cup/emit.java +++ b/Robust/cup/java_cup/emit.java @@ -1,6 +1,11 @@ package java_cup; import java.io.PrintWriter; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; +import java.util.Set; import java.util.Stack; import java.util.Enumeration; import java.util.Date; @@ -312,8 +317,6 @@ public class emit { protected static void emit_action_code(PrintWriter out, production start_prod) throws internal_error { - production prod; - long start_time = System.currentTimeMillis(); /* class header */ @@ -359,15 +362,67 @@ public class emit { out.println(" java_cup.runtime.Symbol " + pre("result") + ";"); out.println(); + // hack: divide a production table into halves and generates two methods of switch cases + // since we have an issue with Java 64K size limitation. + int median=production.number()/2; + // divide production table + List firsthalf=new ArrayList(); + List secondhalf=new ArrayList(); + for(int i=0;i