import java_cup.runtime.ComplexSymbolFactory;
import java_cup.runtime.ScannerBuffer;
import java.io.*;
+import java.util.Arrays;
+import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
private Map<String,String> mapPrimitives;
private Map<String,String> mapNonPrimitivesJava;
private Map<String,String> mapNonPrimitivesCplus;
+ // Other data structures
+ private Map<String,Integer> mapIntfaceObjId; // Maps interface name to object Id
private PrintWriter pw;
private String dir;
private String subdir;
mapIntfacePTH = new HashMap<String,ParseTreeHandler>();
mapIntDeclHand = new HashMap<String,DeclarationHandler>();
mapInt2NewInts = new HashMap<String,Map<String,Set<String>>>();
+ mapIntfaceObjId = new HashMap<String,Integer>();
mapPrimitives = new HashMap<String,String>();
arraysToMap(mapPrimitives, IoTRMITypes.primitivesJava, IoTRMITypes.primitivesCplus);
mapNonPrimitivesJava = new HashMap<String,String>();
/**
- * setParseTree() sets parse tree based on policy files.
+ * setDataStructures() sets parse tree and other data structures based on policy files.
* <p>
* It also generates parse tree (ParseTreeHandler) and
* copies useful information from parse tree into
* returned from tree-parsing for further process.
*
*/
- public void setParseTree(String origInt, ParseNode pnPol, ParseNode pnReq) {
+ public void setDataStructures(String origInt, ParseNode pnPol, ParseNode pnReq) {
ParseTreeHandler ptHandler = new ParseTreeHandler(origInt, pnPol, pnReq);
DeclarationHandler decHandler = new DeclarationHandler();
-
// Process ParseNode and generate Declaration objects
ptHandler.processInterfaceDecl();
InterfaceDecl intDecl = ptHandler.getInterfaceDecl();
mapIntfacePTH.put(origInt, ptHandler);
mapIntDeclHand.put(origInt, decHandler);
+ // Set object Id counter to 0 for each interface
+ mapIntfaceObjId.put(origInt, new Integer(0));
+ //System.out.println("\nInterface: " + origInt + "\n\n");
}
}
+ /**
+ * HELPER: writePropertiesJavaStub() writes the properties of the stub class
+ */
+ private void writePropertiesJavaStub(String intface) {
+
+ println("private IoTRMICall rmiCall;");
+ //println("private IoTRMIObject rmiObj;");
+ println("private String address;");
+ println("private int[] ports;\n");
+ // Get the object Id
+ Integer objId = mapIntfaceObjId.get(intface);
+ println("private final static int objectId = " + objId + ";");
+ mapIntfaceObjId.put(intface, objId++);
+ println("\n");
+ }
+
+
+ /**
+ * HELPER: writeConstructorJavaStub() writes the constructor of the stub class
+ */
+ private void writeConstructorJavaStub(String intface) {
+
+ println("public " + intface + "(int _port, String _address, int _rev, int[] _ports) throws Exception {");
+ println("address = _address;");
+ println("ports = _ports;");
+ println("rmiCall = new IoTRMICall(_port, _address, _rev);");
+ println("}\n");
+ }
+
+
+ /**
+ * HELPER: writeStdMethodBodyJavaStub() writes the standard method body in the stub class
+ */
+ private void writeStdMethodBodyJavaStub(InterfaceDecl intDecl, List<String> methParams,
+ List<String> methPrmTypes, String method) {
+
+ println("int methodId = " + intDecl.getMethodNumId(method) + ";");
+ String retType = intDecl.getMethodType(method);
+ println("Class<?> retType = " + getSimpleType(retType) + ".class;");
+ // Generate array of parameter types
+ print("Class<?>[] paramCls = new Class<?>[] { ");
+ for (int i = 0; i < methParams.size(); i++) {
+ print(getSimpleType(methPrmTypes.get(i)) + ".class");
+ // Check if this is the last element (don't print a comma)
+ if (i != methParams.size() - 1) {
+ print(", ");
+ }
+ }
+ println(" };");
+ // Generate array of parameter objects
+ print("Object[] paramObj = new Object[] { ");
+ for (int i = 0; i < methParams.size(); i++) {
+ print(getSimpleIdentifier(methParams.get(i)));
+ // Check if this is the last element (don't print a comma)
+ if (i != methParams.size() - 1) {
+ print(", ");
+ }
+ }
+ println(" };");
+ // Check if this is "void"
+ if (retType.equals("void")) {
+ println("rmiCall.remoteCall(objectId, methodId, retType, null, paramCls, paramObj);");
+ } else { // We do have a return value
+ // Check if the return value NONPRIMITIVES
+ if (getParamCategory(retType) == ParamCategory.NONPRIMITIVES) {
+ String[] retGenValType = getTypeOfGeneric(retType);
+ println("Class<?> retGenValType = " + retGenValType[0] + ".class;");
+ println("Object retObj = rmiCall.remoteCall(objectId, methodId, retType, retGenValType, paramCls, paramObj);");
+ println("return (" + retType + ")retObj;");
+ } else {
+ println("Object retObj = rmiCall.remoteCall(objectId, methodId, retType, null, paramCls, paramObj);");
+ println("return (" + retType + ")retObj;");
+ }
+ }
+ }
+
+
/**
* HELPER: writeMethodJavaStub() writes the method of the stub class
*/
}
}
println(") {");
- // Check if this is not "void"
- if (!intDecl.getMethodType(method).equals("void")) {
- String retStmt = generateReturnStmt(intDecl.getMethodType(method));
- println("return " + retStmt + ";");
- }
- println("}"); println("");
+ // Now, write the body of stub!
+ writeStdMethodBodyJavaStub(intDecl, methParams, methPrmTypes, method);
+ println("}\n");
}
}
InterfaceDecl intDecl = (InterfaceDecl) decHandler.getInterfaceDecl(intface);
// Pass in set of methods and get import classes
Set<String> importClasses = getImportClasses(intMeth.getValue(), intDecl);
- printImportStatements(importClasses);
+ List<String> stdImportClasses = getStandardJavaImportClasses();
+ List<String> allImportClasses = getAllImportClasses(stdImportClasses, importClasses);
+ printImportStatements(allImportClasses); println("");
// Write interface header
- println("");
- println("public class " + newStubClass + " implements " + newIntface + " {");
- println("");
+ println("public class " + newStubClass + " implements " + newIntface + " {\n");
+ // Write properties
+ writePropertiesJavaStub(intface);
+ // Write constructor
+ writeConstructorJavaStub(newStubClass);
// Write methods
writeMethodJavaStub(intMeth.getValue(), intDecl);
println("}");
List<String> methParams = intDecl.getMethodParams(method);
List<String> methPrmTypes = intDecl.getMethodParamTypes(method);
- print("virtual " + convertType(intDecl.getMethodType(method)) + " " +
+ print("virtual " + checkAndGetCplusType(intDecl.getMethodType(method)) + " " +
intDecl.getMethodId(method) + "(");
for (int i = 0; i < methParams.size(); i++) {
// Check for params with driver class types and exchange it
FileWriter fw = new FileWriter(dir + "/" + intface + ".hpp");
pw = new PrintWriter(new BufferedWriter(fw));
// Write file headers
+ println("#ifndef _" + intface.toUpperCase() + "_HPP__");
+ println("#define _" + intface.toUpperCase() + "_HPP__");
println("#include <iostream>");
// Pass in set of methods and get include classes
DeclarationHandler decHandler = mapIntDeclHand.get(intface);
InterfaceDecl intDecl = (InterfaceDecl) decHandler.getInterfaceDecl(intface);
List<String> methods = intDecl.getMethods();
Set<String> includeClasses = getIncludeClasses(methods, intDecl);
- printIncludeStatements(includeClasses);
- println("");
- println("using namespace std;");
- println("");
- println("class " + intface);
- println("{");
+ printIncludeStatements(includeClasses); println("");
+ println("using namespace std;\n");
+ println("class " + intface); println("{");
println("public:");
// Write methods
writeMethodCplusInterface(methods, intDecl);
- print("}");
- println(";");
+ println("};");
+ println("#endif");
pw.close();
System.out.println("IoTCompiler: Generated local interface " + intface + ".hpp...");
}
DeclarationHandler decHandler = mapIntDeclHand.get(intface);
InterfaceDecl intDecl = (InterfaceDecl) decHandler.getInterfaceDecl(intface);
// Write file headers
+ println("#ifndef _" + newIntface.toUpperCase() + "_HPP__");
+ println("#define _" + newIntface.toUpperCase() + "_HPP__");
println("#include <iostream>");
// Pass in set of methods and get import classes
Set<String> includeClasses = getIncludeClasses(intMeth.getValue(), intDecl);
- printIncludeStatements(includeClasses);
- println("");
- println("using namespace std;");
- println("");
+ List<String> stdIncludeClasses = getStandardCplusIncludeClasses();
+ List<String> allIncludeClasses = getAllImportClasses(stdIncludeClasses, includeClasses);
+ printIncludeStatements(allIncludeClasses); println("");
+ println("using namespace std;\n");
println("class " + newIntface);
println("{");
println("public:");
// Write methods
writeMethodCplusInterface(intMeth.getValue(), intDecl);
- print("}");
- println(";");
+ println("};");
+ println("#endif");
pw.close();
System.out.println("IoTCompiler: Generated interface " + newIntface + ".hpp...");
}
List<String> methParams = intDecl.getMethodParams(method);
List<String> methPrmTypes = intDecl.getMethodParamTypes(method);
- print(convertType(intDecl.getMethodType(method)) + " " +
+ print(checkAndGetCplusType(intDecl.getMethodType(method)) + " " +
intDecl.getMethodId(method) + "(");
for (int i = 0; i < methParams.size(); i++) {
String methPrmType = checkAndGetCplusType(methPrmTypes.get(i));
}
}
println(") { ");
- // Check if this is not "void"
- if (!intDecl.getMethodType(method).equals("void")) {
- String retStmt = generateReturnStmt(intDecl.getMethodType(method));
- if (retStmt.equals("null")) { // null = NULL in C++
- retStmt = "NULL";
- }
- println("return " + retStmt + ";");
+ writeStdMethodBodyCplusStub(intDecl, methParams, methPrmTypes, method);
+ println("}\n");
+ }
+ }
+
+
+ /**
+ * HELPER: writeStdMethodBodyCplusStub() writes the standard method body in the stub class
+ */
+ private void writeStdMethodBodyCplusStub(InterfaceDecl intDecl, List<String> methParams,
+ List<String> methPrmTypes, String method) {
+
+ println("int numParam = " + methParams.size() + ";");
+ println("int methodId = " + intDecl.getMethodNumId(method) + ";");
+ String retType = intDecl.getMethodType(method);
+ println("string retType = \"" + checkAndGetCplusType(retType) + "\";");
+ // Generate array of parameter types
+ print("string paramCls[] = { ");
+ for (int i = 0; i < methParams.size(); i++) {
+ print("\"" + checkAndGetCplusType(methPrmTypes.get(i)) + "\"");
+ // Check if this is the last element (don't print a comma)
+ if (i != methParams.size() - 1) {
+ print(", ");
}
- println("}"); println("");
}
+ println(" };");
+ // Generate array of parameter objects
+ print("void* paramObj[] = { ");
+ for (int i = 0; i < methParams.size(); i++) {
+ print("&" + checkAndGetCplusType(getSimpleIdentifier(methParams.get(i))));
+ // Check if this is the last element (don't print a comma)
+ if (i != methParams.size() - 1) {
+ print(", ");
+ }
+ }
+ println(" };");
+ // Check if this is "void"
+ if (retType.equals("void")) {
+ println("void* retObj = NULL;");
+ println("rmiCall->remoteCall(objectId, methodId, retType, paramCls, paramObj, numParam, retObj);");
+ } else { // We do have a return value
+ if (getParamCategory(retType) == ParamCategory.NONPRIMITIVES)
+ println(checkAndGetCplusType(retType) + " retVal;");
+ else
+ println(checkAndGetCplusType(retType) + " retVal = " + generateCplusInitializer(retType) + ";");
+ println("void* retObj = &retVal;");
+ println("rmiCall->remoteCall(objectId, methodId, retType, paramCls, paramObj, numParam, retObj);");
+ println("return retVal;");
+ }
+ }
+
+
+ /**
+ * HELPER: writePropertiesCplusStub() writes the properties of the stub class
+ */
+ private void writePropertiesCplusStub(String intface) {
+
+ println("IoTRMICall\t\t\t*rmiCall;");
+ //println("IoTRMIObject\t\t\t*rmiObj;");
+ println("string\t\t\t\taddress;");
+ println("vector<int>\t\t\tports;\n");
+ // Get the object Id
+ Integer objId = mapIntfaceObjId.get(intface);
+ println("const static int\tobjectId = " + objId + ";");
+ mapIntfaceObjId.put(intface, objId++);
+ println("\n");
+ }
+
+
+ /**
+ * HELPER: writeConstructorCplusStub() writes the constructor of the stub class
+ */
+ private void writeConstructorCplusStub(String newStubClass) {
+
+ println(newStubClass +
+ "(int _port, const char* _address, int _rev, bool* _bResult, vector<int> _ports) {");
+ println("address = _address;");
+ println("ports = _ports;");
+ println("rmiCall = new IoTRMICall(_port, _address, _rev, _bResult);");
+ println("}\n");
+ }
+
+
+ /**
+ * HELPER: writeDeconstructorCplusStub() writes the deconstructor of the stub class
+ */
+ private void writeDeconstructorCplusStub(String newStubClass) {
+
+ println("~" + newStubClass + "() {");
+ println("if (rmiCall != NULL) {");
+ println("delete rmiCall;");
+ println("rmiCall = NULL;");
+ println("}");
+ println("}");
+ println("");
+ // Check if this is callback!!! and print "delete rmiObj and vecCBObj"
}
FileWriter fw = new FileWriter(path + "/" + newStubClass + ".hpp");
pw = new PrintWriter(new BufferedWriter(fw));
// Write file headers
+ println("#ifndef _" + newStubClass.toUpperCase() + "_HPP__");
+ println("#define _" + newStubClass.toUpperCase() + "_HPP__");
println("#include <iostream>");
println("#include \"" + newIntface + ".hpp\""); println("");
println("using namespace std;"); println("");
println("class " + newStubClass + " : public " + newIntface); println("{");
- println("public:"); println("");
+ println("private:\n");
+ writePropertiesCplusStub(intface);
+ println("public:\n");
// Add default constructor and destructor
println(newStubClass + "() { }"); println("");
- println("~" + newStubClass + "() { }"); println("");
+ writeConstructorCplusStub(newStubClass);
+ writeDeconstructorCplusStub(newStubClass);
DeclarationHandler decHandler = mapIntDeclHand.get(intface);
InterfaceDecl intDecl = (InterfaceDecl) decHandler.getInterfaceDecl(intface);
// Write methods
writeMethodCplusStub(intMeth.getValue(), intDecl);
print("}"); println(";");
+ println("#endif");
pw.close();
System.out.println("IoTCompiler: Generated stub class " + newIntface + ".hpp...");
}
}
+ /**
+ * generateInitializer() generate initializer based on type
+ */
+ public String generateCplusInitializer(String type) {
+
+ // Generate dummy returns for now
+ if (type.equals("short")||
+ type.equals("int") ||
+ type.equals("long") ||
+ type.equals("float")||
+ type.equals("double")) {
+
+ return "0";
+ } else if ( type.equals("String") ||
+ type.equals("string")) {
+
+ return "\"\"";
+ } else if ( type.equals("char") ||
+ type.equals("byte")) {
+
+ return "\' \'";
+ } else if ( type.equals("boolean")) {
+
+ return "false";
+ } else {
+ return "NULL";
+ }
+ }
+
+
/**
* generateReturnStmt() generate return statement based on methType
*/
newline=false;
}
+
/**
* This function converts Java to C++ type for compilation
*/
}
+ // Generate a set of standard classes for import statements
+ private List<String> getStandardJavaImportClasses() {
+
+ List<String> importClasses = new ArrayList<String>();
+ // Add the standard list first
+ importClasses.add("java.io.IOException");
+ importClasses.add("java.util.List");
+ importClasses.add("java.util.ArrayList");
+ importClasses.add("iotrmi.Java.IoTRMICall");
+ importClasses.add("iotrmi.Java.IoTRMIObject");
+
+ return importClasses;
+ }
+
+
+ // Generate a set of standard classes for import statements
+ private List<String> getStandardCplusIncludeClasses() {
+
+ List<String> importClasses = new ArrayList<String>();
+ // Add the standard list first
+ importClasses.add("<vector>");
+ importClasses.add("\"IoTRMICall.hpp\"");
+ importClasses.add("\"IoTRMIObject.hpp\"");
+
+ return importClasses;
+ }
+
+
+ // Generate a set of standard classes for import statements
+ private List<String> getAllImportClasses(Collection<String> stdImportClasses, Collection<String> importClasses) {
+
+ List<String> allImportClasses = new ArrayList<String>(stdImportClasses);
+ // Iterate over the list of import classes
+ for (String str : importClasses) {
+ if (!stdImportClasses.contains(str)) {
+ stdImportClasses.add(str);
+ }
+ }
+
+ return allImportClasses;
+ }
+
+
+
// Generate a set of classes for import statements
private Set<String> getImportClasses(Collection<String> methods, InterfaceDecl intDecl) {
}
- private void printImportStatements(Set<String> importClasses) {
+ private void printImportStatements(Collection<String> importClasses) {
for(String cls : importClasses) {
println("import " + cls + ";");
}
- private void printIncludeStatements(Set<String> includeClasses) {
+ private void printIncludeStatements(Collection<String> includeClasses) {
for(String cls : includeClasses) {
println("#include " + cls);
}
+ // This helper function strips off array declaration, e.g. D[] becomes D
+ private String getSimpleIdentifier(String ident) {
+
+ // Handle [ for array declaration
+ String substr = ident;
+ if (ident.contains("[]")) {
+ substr = ident.split("\\[\\]")[0];
+ }
+ return substr;
+ }
+
+
private String checkAndGetCplusType(String paramType) {
if (getParamCategory(paramType) == ParamCategory.PRIMITIVES) {
ParseNode pnReq = IoTCompiler.parseFile(args[i+1]);
// Get interface name
String intface = ParseTreeHandler.getOrigIntface(pnPol);
- comp.setParseTree(intface, pnPol, pnReq);
+ comp.setDataStructures(intface, pnPol, pnReq);
comp.getMethodsForIntface(intface);
i = i + 2;
// 1) Check if this is the last option before "-java" or "-cplus"
import iotpolicy.tree.ParseNode;
-
/** CUP v0.11b 20160615 (GIT 4ac7450) generated parser.
*/
@SuppressWarnings({"rawtypes"})
/** Production table. */
protected static final short _production_table[][] =
unpackFromStrings(new String[] {
- "\000\054\000\002\002\003\000\002\002\004\000\002\002" +
+ "\000\056\000\002\002\003\000\002\002\004\000\002\002" +
"\003\000\002\002\003\000\002\002\003\000\002\003\011" +
"\000\002\004\004\000\002\004\002\000\002\005\011\000" +
- "\002\005\011\000\002\006\004\000\002\006\002\000\002" +
- "\007\005\000\002\007\004\000\002\007\005\000\002\007" +
- "\004\000\002\007\007\000\002\007\007\000\002\007\010" +
- "\000\002\007\010\000\002\011\004\000\002\011\002\000" +
- "\002\012\007\000\002\013\004\000\002\013\002\000\002" +
- "\014\006\000\002\014\006\000\002\015\004\000\002\015" +
- "\002\000\002\016\012\000\002\017\003\000\002\017\005" +
- "\000\002\017\002\000\002\020\007\000\002\021\004\000" +
- "\002\021\002\000\002\022\004\000\002\022\003\000\002" +
- "\023\007\000\002\024\004\000\002\024\002\000\002\025" +
- "\005\000\002\025\005\000\002\025\010" });
+ "\002\005\011\000\002\005\014\000\002\005\014\000\002" +
+ "\006\004\000\002\006\002\000\002\007\005\000\002\007" +
+ "\004\000\002\007\005\000\002\007\004\000\002\007\007" +
+ "\000\002\007\007\000\002\007\010\000\002\007\010\000" +
+ "\002\011\004\000\002\011\002\000\002\012\007\000\002" +
+ "\013\004\000\002\013\002\000\002\014\006\000\002\014" +
+ "\006\000\002\015\004\000\002\015\002\000\002\016\012" +
+ "\000\002\017\003\000\002\017\005\000\002\017\002\000" +
+ "\002\020\007\000\002\021\004\000\002\021\002\000\002" +
+ "\022\004\000\002\022\003\000\002\023\007\000\002\024" +
+ "\004\000\002\024\002\000\002\025\005\000\002\025\005" +
+ "\000\002\025\010" });
/** Access to production table. */
public short[][] production_table() {return _production_table;}
/** Parse-action table. */
protected static final short[][] _action_table =
unpackFromStrings(new String[] {
- "\000\140\000\014\002\uffe5\015\012\022\uffe5\025\007\026" +
+ "\000\157\000\014\002\uffe3\015\012\022\uffe3\025\007\026" +
"\011\001\002\000\004\002\001\001\002\000\004\002\ufffd" +
- "\001\002\000\004\002\ufffe\001\002\000\004\030\134\001" +
- "\002\000\006\002\uffff\022\120\001\002\000\004\030\100" +
+ "\001\002\000\004\002\ufffe\001\002\000\004\030\153\001" +
+ "\002\000\006\002\uffff\022\137\001\002\000\004\030\117" +
"\001\002\000\004\016\015\001\002\000\004\002\014\001" +
"\002\000\004\002\000\001\002\000\004\030\016\001\002" +
"\000\004\012\017\001\002\000\010\013\ufffa\015\ufffa\017" +
- "\ufffa\001\002\000\010\013\uffec\015\022\017\uffec\001\002" +
+ "\ufffa\001\002\000\010\013\uffea\015\022\017\uffea\001\002" +
"\000\010\013\ufffb\015\ufffb\017\ufffb\001\002\000\006\027" +
"\045\030\044\001\002\000\006\013\026\017\025\001\002" +
- "\000\006\013\uffed\017\uffed\001\002\000\004\030\027\001" +
+ "\000\006\013\uffeb\017\uffeb\001\002\000\004\030\027\001" +
"\002\000\004\002\ufffc\001\002\000\004\012\030\001\002" +
- "\000\010\013\uffe9\020\uffe9\021\uffe9\001\002\000\010\013" +
- "\034\020\033\021\035\001\002\000\010\013\uffea\020\uffea" +
- "\021\uffea\001\002\000\004\014\041\001\002\000\006\013" +
- "\uffeb\017\uffeb\001\002\000\004\014\036\001\002\000\004" +
+ "\000\010\013\uffe7\020\uffe7\021\uffe7\001\002\000\010\013" +
+ "\034\020\033\021\035\001\002\000\010\013\uffe8\020\uffe8" +
+ "\021\uffe8\001\002\000\004\014\041\001\002\000\006\013" +
+ "\uffe9\017\uffe9\001\002\000\004\014\036\001\002\000\004" +
"\031\037\001\002\000\004\004\040\001\002\000\010\013" +
- "\uffe7\020\uffe7\021\uffe7\001\002\000\004\031\042\001\002" +
- "\000\004\004\043\001\002\000\010\013\uffe8\020\uffe8\021" +
- "\uffe8\001\002\000\004\030\073\001\002\000\004\030\046" +
- "\001\002\000\004\006\047\001\002\000\010\007\ufff6\027" +
- "\ufff6\030\ufff6\001\002\000\010\007\052\027\054\030\051" +
- "\001\002\000\006\010\060\030\061\001\002\000\004\004" +
- "\057\001\002\000\010\007\ufff7\027\ufff7\030\ufff7\001\002" +
- "\000\004\030\055\001\002\000\012\005\056\007\ufff4\027" +
- "\ufff4\030\ufff4\001\002\000\010\007\ufff5\027\ufff5\030\ufff5" +
- "\001\002\000\010\013\ufff9\015\ufff9\017\ufff9\001\002\000" +
- "\006\027\064\030\063\001\002\000\012\005\062\007\ufff2" +
- "\027\ufff2\030\ufff2\001\002\000\010\007\ufff3\027\ufff3\030" +
- "\ufff3\001\002\000\004\011\070\001\002\000\004\011\065" +
- "\001\002\000\004\030\066\001\002\000\012\005\067\007" +
- "\ufff1\027\ufff1\030\ufff1\001\002\000\010\007\uffef\027\uffef" +
- "\030\uffef\001\002\000\004\030\071\001\002\000\012\005" +
- "\072\007\ufff0\027\ufff0\030\ufff0\001\002\000\010\007\uffee" +
- "\027\uffee\030\uffee\001\002\000\004\006\074\001\002\000" +
- "\010\007\ufff6\027\ufff6\030\ufff6\001\002\000\010\007\076" +
- "\027\054\030\051\001\002\000\004\004\077\001\002\000" +
- "\010\013\ufff8\015\ufff8\017\ufff8\001\002\000\004\012\101" +
- "\001\002\000\010\013\uffd9\027\uffd9\030\uffd9\001\002\000" +
- "\010\013\104\027\106\030\103\001\002\000\006\010\111" +
- "\030\112\001\002\000\004\002\uffdb\001\002\000\010\013" +
- "\uffda\027\uffda\030\uffda\001\002\000\004\030\107\001\002" +
- "\000\004\004\110\001\002\000\010\013\uffd8\027\uffd8\030" +
- "\uffd8\001\002\000\004\030\114\001\002\000\004\004\113" +
- "\001\002\000\010\013\uffd7\027\uffd7\030\uffd7\001\002\000" +
- "\004\011\115\001\002\000\004\030\116\001\002\000\004" +
- "\004\117\001\002\000\010\013\uffd6\027\uffd6\030\uffd6\001" +
- "\002\000\004\030\122\001\002\000\006\002\uffe6\022\uffe6" +
- "\001\002\000\004\023\123\001\002\000\010\005\uffe1\024" +
- "\uffe1\030\125\001\002\000\006\005\126\024\127\001\002" +
- "\000\006\005\uffe3\024\uffe3\001\002\000\004\030\133\001" +
- "\002\000\004\016\130\001\002\000\004\030\131\001\002" +
- "\000\004\004\132\001\002\000\006\002\uffe4\022\uffe4\001" +
- "\002\000\006\005\uffe2\024\uffe2\001\002\000\004\012\135" +
- "\001\002\000\006\013\uffde\030\uffde\001\002\000\006\013" +
- "\141\030\140\001\002\000\006\013\uffdf\030\uffdf\001\002" +
- "\000\010\005\142\013\uffdc\030\uffdc\001\002\000\004\002" +
- "\uffe0\001\002\000\006\013\uffdd\030\uffdd\001\002" });
+ "\uffe5\020\uffe5\021\uffe5\001\002\000\004\031\042\001\002" +
+ "\000\004\004\043\001\002\000\010\013\uffe6\020\uffe6\021" +
+ "\uffe6\001\002\000\006\010\073\030\074\001\002\000\004" +
+ "\030\046\001\002\000\004\006\047\001\002\000\010\007" +
+ "\ufff4\027\ufff4\030\ufff4\001\002\000\010\007\052\027\054" +
+ "\030\051\001\002\000\006\010\060\030\061\001\002\000" +
+ "\004\004\057\001\002\000\010\007\ufff5\027\ufff5\030\ufff5" +
+ "\001\002\000\004\030\055\001\002\000\012\005\056\007" +
+ "\ufff2\027\ufff2\030\ufff2\001\002\000\010\007\ufff3\027\ufff3" +
+ "\030\ufff3\001\002\000\010\013\ufff9\015\ufff9\017\ufff9\001" +
+ "\002\000\006\027\064\030\063\001\002\000\012\005\062" +
+ "\007\ufff0\027\ufff0\030\ufff0\001\002\000\010\007\ufff1\027" +
+ "\ufff1\030\ufff1\001\002\000\004\011\070\001\002\000\004" +
+ "\011\065\001\002\000\004\030\066\001\002\000\012\005" +
+ "\067\007\uffef\027\uffef\030\uffef\001\002\000\010\007\uffed" +
+ "\027\uffed\030\uffed\001\002\000\004\030\071\001\002\000" +
+ "\012\005\072\007\uffee\027\uffee\030\uffee\001\002\000\010" +
+ "\007\uffec\027\uffec\030\uffec\001\002\000\006\027\102\030" +
+ "\101\001\002\000\004\006\075\001\002\000\010\007\ufff4" +
+ "\027\ufff4\030\ufff4\001\002\000\010\007\077\027\054\030" +
+ "\051\001\002\000\004\004\100\001\002\000\010\013\ufff8" +
+ "\015\ufff8\017\ufff8\001\002\000\004\011\111\001\002\000" +
+ "\004\011\103\001\002\000\004\030\104\001\002\000\004" +
+ "\006\105\001\002\000\010\007\ufff4\027\ufff4\030\ufff4\001" +
+ "\002\000\010\007\107\027\054\030\051\001\002\000\004" +
+ "\004\110\001\002\000\010\013\ufff7\015\ufff7\017\ufff7\001" +
+ "\002\000\004\030\112\001\002\000\004\006\113\001\002" +
+ "\000\010\007\ufff4\027\ufff4\030\ufff4\001\002\000\010\007" +
+ "\115\027\054\030\051\001\002\000\004\004\116\001\002" +
+ "\000\010\013\ufff6\015\ufff6\017\ufff6\001\002\000\004\012" +
+ "\120\001\002\000\010\013\uffd7\027\uffd7\030\uffd7\001\002" +
+ "\000\010\013\123\027\125\030\122\001\002\000\006\010" +
+ "\130\030\131\001\002\000\004\002\uffd9\001\002\000\010" +
+ "\013\uffd8\027\uffd8\030\uffd8\001\002\000\004\030\126\001" +
+ "\002\000\004\004\127\001\002\000\010\013\uffd6\027\uffd6" +
+ "\030\uffd6\001\002\000\004\030\133\001\002\000\004\004" +
+ "\132\001\002\000\010\013\uffd5\027\uffd5\030\uffd5\001\002" +
+ "\000\004\011\134\001\002\000\004\030\135\001\002\000" +
+ "\004\004\136\001\002\000\010\013\uffd4\027\uffd4\030\uffd4" +
+ "\001\002\000\004\030\141\001\002\000\006\002\uffe4\022" +
+ "\uffe4\001\002\000\004\023\142\001\002\000\010\005\uffdf" +
+ "\024\uffdf\030\144\001\002\000\006\005\145\024\146\001" +
+ "\002\000\006\005\uffe1\024\uffe1\001\002\000\004\030\152" +
+ "\001\002\000\004\016\147\001\002\000\004\030\150\001" +
+ "\002\000\004\004\151\001\002\000\006\002\uffe2\022\uffe2" +
+ "\001\002\000\006\005\uffe0\024\uffe0\001\002\000\004\012" +
+ "\154\001\002\000\006\013\uffdc\030\uffdc\001\002\000\006" +
+ "\013\160\030\157\001\002\000\006\013\uffdd\030\uffdd\001" +
+ "\002\000\010\005\161\013\uffda\030\uffda\001\002\000\004" +
+ "\002\uffde\001\002\000\006\013\uffdb\030\uffdb\001\002" });
/** Access to parse-action table. */
public short[][] action_table() {return _action_table;}
/** <code>reduce_goto</code> table. */
protected static final short[][] _reduce_table =
unpackFromStrings(new String[] {
- "\000\140\000\014\002\012\003\003\015\007\020\005\023" +
+ "\000\157\000\014\002\012\003\003\015\007\020\005\023" +
"\004\001\001\000\002\001\001\000\002\001\001\000\002" +
- "\001\001\000\002\001\001\000\004\016\120\001\001\000" +
+ "\001\001\000\002\001\001\000\004\016\137\001\001\000" +
"\002\001\001\000\002\001\001\000\002\001\001\000\002" +
"\001\001\000\002\001\001\000\002\001\001\000\004\004" +
"\017\001\001\000\006\005\020\011\022\001\001\000\002" +
"\001\001\000\002\001\001\000\002\001\001\000\002\001" +
"\001\000\002\001\001\000\002\001\001\000\002\001\001" +
"\000\002\001\001\000\002\001\001\000\002\001\001\000" +
- "\002\001\001\000\002\001\001\000\002\001\001\000\004" +
- "\006\074\001\001\000\004\007\052\001\001\000\002\001" +
- "\001\000\002\001\001\000\002\001\001\000\004\024\101" +
- "\001\001\000\004\025\104\001\001\000\002\001\001\000" +
"\002\001\001\000\002\001\001\000\002\001\001\000\002" +
- "\001\001\000\002\001\001\000\002\001\001\000\002\001" +
+ "\001\001\000\004\006\075\001\001\000\004\007\052\001" +
"\001\000\002\001\001\000\002\001\001\000\002\001\001" +
"\000\002\001\001\000\002\001\001\000\002\001\001\000" +
- "\002\001\001\000\002\001\001\000\004\017\123\001\001" +
+ "\004\006\105\001\001\000\004\007\052\001\001\000\002" +
+ "\001\001\000\002\001\001\000\002\001\001\000\002\001" +
+ "\001\000\004\006\113\001\001\000\004\007\052\001\001" +
+ "\000\002\001\001\000\002\001\001\000\002\001\001\000" +
+ "\004\024\120\001\001\000\004\025\123\001\001\000\002" +
+ "\001\001\000\002\001\001\000\002\001\001\000\002\001" +
+ "\001\000\002\001\001\000\002\001\001\000\002\001\001" +
"\000\002\001\001\000\002\001\001\000\002\001\001\000" +
"\002\001\001\000\002\001\001\000\002\001\001\000\002" +
- "\001\001\000\002\001\001\000\002\001\001\000\004\021" +
- "\135\001\001\000\004\022\136\001\001\000\002\001\001" +
- "\000\002\001\001\000\002\001\001\000\002\001\001" });
+ "\001\001\000\002\001\001\000\002\001\001\000\004\017" +
+ "\142\001\001\000\002\001\001\000\002\001\001\000\002" +
+ "\001\001\000\002\001\001\000\002\001\001\000\002\001" +
+ "\001\000\002\001\001\000\002\001\001\000\002\001\001" +
+ "\000\004\021\154\001\001\000\004\022\155\001\001\000" +
+ "\002\001\001\000\002\001\001\000\002\001\001\000\002" +
+ "\001\001" });
/** Access to <code>reduce_goto</code> table. */
public short[][] reduce_table() {return _reduce_table;}
return CUP$Parser$result;
/*. . . . . . . . . . . . . . . . . . . .*/
- case 10: // paramlist ::= paramlist param
+ case 10: // meth ::= PUBLIC IDENT LANG TYPE RANG IDENT LPAR paramlist RPAR SEMICOLON
+ {
+ ParseNode RESULT =null;
+ int clsmethleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-8)).left;
+ int clsmethright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-8)).right;
+ Object clsmeth = (Object)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-8)).value;
+ int typegenleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-6)).left;
+ int typegenright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-6)).right;
+ Object typegen = (Object)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-6)).value;
+ int idmethleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-4)).left;
+ int idmethright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-4)).right;
+ Object idmeth = (Object)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-4)).value;
+ int plleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).left;
+ int plright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).right;
+ ParseNode pl = (ParseNode)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-2)).value;
+
+ ParseNode pn = new ParseNode("method");
+ pn.addChild("method_class").setLiteral((String)clsmeth + "<" + typegen + ">");
+ pn.addChild("method_ident").setLiteral(idmeth);
+ pn.addChild(pl);
+ RESULT = pn;
+
+ CUP$Parser$result = parser.getSymbolFactory().newSymbol("meth",3, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-9)), ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), RESULT);
+ }
+ return CUP$Parser$result;
+
+ /*. . . . . . . . . . . . . . . . . . . .*/
+ case 11: // meth ::= PUBLIC IDENT LANG IDENT RANG IDENT LPAR paramlist RPAR SEMICOLON
+ {
+ ParseNode RESULT =null;
+ int clsmethleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-8)).left;
+ int clsmethright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-8)).right;
+ Object clsmeth = (Object)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-8)).value;
+ int clsgenleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-6)).left;
+ int clsgenright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-6)).right;
+ Object clsgen = (Object)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-6)).value;
+ int idmethleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-4)).left;
+ int idmethright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-4)).right;
+ Object idmeth = (Object)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-4)).value;
+ int plleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).left;
+ int plright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).right;
+ ParseNode pl = (ParseNode)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-2)).value;
+
+ ParseNode pn = new ParseNode("method");
+ pn.addChild("method_class").setLiteral((String)clsmeth + "<" + clsgen + ">");
+ pn.addChild("method_ident").setLiteral(idmeth);
+ pn.addChild(pl);
+ RESULT = pn;
+
+ CUP$Parser$result = parser.getSymbolFactory().newSymbol("meth",3, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-9)), ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), RESULT);
+ }
+ return CUP$Parser$result;
+
+ /*. . . . . . . . . . . . . . . . . . . .*/
+ case 12: // paramlist ::= paramlist param
{
ParseNode RESULT =null;
int plleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-1)).left;
return CUP$Parser$result;
/*. . . . . . . . . . . . . . . . . . . .*/
- case 11: // paramlist ::=
+ case 13: // paramlist ::=
{
ParseNode RESULT =null;
return CUP$Parser$result;
/*. . . . . . . . . . . . . . . . . . . .*/
- case 12: // param ::= TYPE IDENT COMMA
+ case 14: // param ::= TYPE IDENT COMMA
{
ParseNode RESULT =null;
int typeprmleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).left;
return CUP$Parser$result;
/*. . . . . . . . . . . . . . . . . . . .*/
- case 13: // param ::= TYPE IDENT
+ case 15: // param ::= TYPE IDENT
{
ParseNode RESULT =null;
int typeprmleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-1)).left;
return CUP$Parser$result;
/*. . . . . . . . . . . . . . . . . . . .*/
- case 14: // param ::= IDENT IDENT COMMA
+ case 16: // param ::= IDENT IDENT COMMA
{
ParseNode RESULT =null;
int clsprmleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).left;
return CUP$Parser$result;
/*. . . . . . . . . . . . . . . . . . . .*/
- case 15: // param ::= IDENT IDENT
+ case 17: // param ::= IDENT IDENT
{
ParseNode RESULT =null;
int clsprmleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-1)).left;
return CUP$Parser$result;
/*. . . . . . . . . . . . . . . . . . . .*/
- case 16: // param ::= IDENT LANG TYPE RANG IDENT
+ case 18: // param ::= IDENT LANG TYPE RANG IDENT
{
ParseNode RESULT =null;
int clsprmleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-4)).left;
return CUP$Parser$result;
/*. . . . . . . . . . . . . . . . . . . .*/
- case 17: // param ::= IDENT LANG IDENT RANG IDENT
+ case 19: // param ::= IDENT LANG IDENT RANG IDENT
{
ParseNode RESULT =null;
int clsprmleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-4)).left;
return CUP$Parser$result;
/*. . . . . . . . . . . . . . . . . . . .*/
- case 18: // param ::= IDENT LANG TYPE RANG IDENT COMMA
+ case 20: // param ::= IDENT LANG TYPE RANG IDENT COMMA
{
ParseNode RESULT =null;
int clsprmleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-5)).left;
return CUP$Parser$result;
/*. . . . . . . . . . . . . . . . . . . .*/
- case 19: // param ::= IDENT LANG IDENT RANG IDENT COMMA
+ case 21: // param ::= IDENT LANG IDENT RANG IDENT COMMA
{
ParseNode RESULT =null;
int clsprmleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-5)).left;
return CUP$Parser$result;
/*. . . . . . . . . . . . . . . . . . . .*/
- case 20: // capablist ::= capablist capab
+ case 22: // capablist ::= capablist capab
{
ParseNode RESULT =null;
int clleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-1)).left;
return CUP$Parser$result;
/*. . . . . . . . . . . . . . . . . . . .*/
- case 21: // capablist ::=
+ case 23: // capablist ::=
{
ParseNode RESULT =null;
return CUP$Parser$result;
/*. . . . . . . . . . . . . . . . . . . .*/
- case 22: // capab ::= CAPABILITY IDENT BEGIN capabcont END
+ case 24: // capab ::= CAPABILITY IDENT BEGIN capabcont END
{
ParseNode RESULT =null;
int idcapleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-3)).left;
return CUP$Parser$result;
/*. . . . . . . . . . . . . . . . . . . .*/
- case 23: // capabcont ::= capabcont cont
+ case 25: // capabcont ::= capabcont cont
{
ParseNode RESULT =null;
int ccontleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-1)).left;
return CUP$Parser$result;
/*. . . . . . . . . . . . . . . . . . . .*/
- case 24: // capabcont ::=
+ case 26: // capabcont ::=
{
ParseNode RESULT =null;
return CUP$Parser$result;
/*. . . . . . . . . . . . . . . . . . . .*/
- case 25: // cont ::= DESCRIPTION ASSIGN STRINGCONST SEMICOLON
+ case 27: // cont ::= DESCRIPTION ASSIGN STRINGCONST SEMICOLON
{
ParseNode RESULT =null;
int dscleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-3)).left;
return CUP$Parser$result;
/*. . . . . . . . . . . . . . . . . . . .*/
- case 26: // cont ::= METHOD ASSIGN STRINGCONST SEMICOLON
+ case 28: // cont ::= METHOD ASSIGN STRINGCONST SEMICOLON
{
ParseNode RESULT =null;
int mtdleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-3)).left;
return CUP$Parser$result;
/*. . . . . . . . . . . . . . . . . . . .*/
- case 27: // reqlist ::= reqlist require
+ case 29: // reqlist ::= reqlist require
{
ParseNode RESULT =null;
int rlleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-1)).left;
return CUP$Parser$result;
/*. . . . . . . . . . . . . . . . . . . .*/
- case 28: // reqlist ::=
+ case 30: // reqlist ::=
{
ParseNode RESULT =null;
return CUP$Parser$result;
/*. . . . . . . . . . . . . . . . . . . .*/
- case 29: // require ::= REQUIRES IDENT WITH capintlist AS INTERFACE IDENT SEMICOLON
+ case 31: // require ::= REQUIRES IDENT WITH capintlist AS INTERFACE IDENT SEMICOLON
{
ParseNode RESULT =null;
int idintleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-6)).left;
return CUP$Parser$result;
/*. . . . . . . . . . . . . . . . . . . .*/
- case 30: // capintlist ::= IDENT
+ case 32: // capintlist ::= IDENT
{
ParseNode RESULT =null;
int idcapleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()).left;
return CUP$Parser$result;
/*. . . . . . . . . . . . . . . . . . . .*/
- case 31: // capintlist ::= capintlist COMMA IDENT
+ case 33: // capintlist ::= capintlist COMMA IDENT
{
ParseNode RESULT =null;
int cilleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).left;
return CUP$Parser$result;
/*. . . . . . . . . . . . . . . . . . . .*/
- case 32: // capintlist ::=
+ case 34: // capintlist ::=
{
ParseNode RESULT =null;
return CUP$Parser$result;
/*. . . . . . . . . . . . . . . . . . . .*/
- case 33: // enumdec ::= ENUM IDENT BEGIN enumlist END
+ case 35: // enumdec ::= ENUM IDENT BEGIN enumlist END
{
ParseNode RESULT =null;
int idenumdecleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-3)).left;
return CUP$Parser$result;
/*. . . . . . . . . . . . . . . . . . . .*/
- case 34: // enumlist ::= enumlist enummem
+ case 36: // enumlist ::= enumlist enummem
{
ParseNode RESULT =null;
int elleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-1)).left;
return CUP$Parser$result;
/*. . . . . . . . . . . . . . . . . . . .*/
- case 35: // enumlist ::=
+ case 37: // enumlist ::=
{
ParseNode RESULT =null;
return CUP$Parser$result;
/*. . . . . . . . . . . . . . . . . . . .*/
- case 36: // enummem ::= IDENT COMMA
+ case 38: // enummem ::= IDENT COMMA
{
ParseNode RESULT =null;
int idenumleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-1)).left;
return CUP$Parser$result;
/*. . . . . . . . . . . . . . . . . . . .*/
- case 37: // enummem ::= IDENT
+ case 39: // enummem ::= IDENT
{
ParseNode RESULT =null;
int idenumleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()).left;
return CUP$Parser$result;
/*. . . . . . . . . . . . . . . . . . . .*/
- case 38: // structdec ::= STRUCT IDENT BEGIN structlist END
+ case 40: // structdec ::= STRUCT IDENT BEGIN structlist END
{
ParseNode RESULT =null;
int idstructdecleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-3)).left;
return CUP$Parser$result;
/*. . . . . . . . . . . . . . . . . . . .*/
- case 39: // structlist ::= structlist structmem
+ case 41: // structlist ::= structlist structmem
{
ParseNode RESULT =null;
int slleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-1)).left;
return CUP$Parser$result;
/*. . . . . . . . . . . . . . . . . . . .*/
- case 40: // structlist ::=
+ case 42: // structlist ::=
{
ParseNode RESULT =null;
return CUP$Parser$result;
/*. . . . . . . . . . . . . . . . . . . .*/
- case 41: // structmem ::= TYPE IDENT SEMICOLON
+ case 43: // structmem ::= TYPE IDENT SEMICOLON
{
ParseNode RESULT =null;
int typestrleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).left;
return CUP$Parser$result;
/*. . . . . . . . . . . . . . . . . . . .*/
- case 42: // structmem ::= IDENT IDENT SEMICOLON
+ case 44: // structmem ::= IDENT IDENT SEMICOLON
{
ParseNode RESULT =null;
int clsstrleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).left;
return CUP$Parser$result;
/*. . . . . . . . . . . . . . . . . . . .*/
- case 43: // structmem ::= IDENT LANG IDENT RANG IDENT SEMICOLON
+ case 45: // structmem ::= IDENT LANG IDENT RANG IDENT SEMICOLON
{
ParseNode RESULT =null;
int clsstrleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-5)).left;