[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Parser methods larger than 64K



Hello,

Running SableCC using JDK 1.2, I get an error concerning methods that are
larger than 64K.

-------------------------------------------------------------------
> d:\jdk\bin\java -mx1024m -classpath 
  d:\jdk\lib\classes.zip;q:\sablecc\sablecc-2.6.jar;
  q:\sablecc\sableutil-1.8.jar SableCC unicode.txt

SableCC version 2.6
Copyright (C) 1997, 1998 Etienne Gagnon (gagnon@sable.mcgill.ca).  All
rights reserved.

This software comes with ABSOLUTELY NO WARRANTY.  This is free software,
and you are welcome to redistribute it under certain conditions.

Type 'java SableCC -license' to view the complete copyright notice and
license.

java.lang.ClassFormatError: ca/mcgill/sable/sablecc/parser/Parser (Code of a
method longer than 65535 bytes)
-------------------------------------------------------------------

ca.mcgill.sable.sablecc.parser.Parser is indeed rather largish, and violates
the Java VM specifications:

-------------------------------------------------------------------
4.10 Limitations of the Java Virtual Machine and class File Format
* The amount of code per method is limited to 65535 bytes by the sizes 
  of the indices in the exception_table of the Code attribute (§4.7.4), 
  in the LineNumberTable attribute (§4.7.6), and in the 
  LocalVariableTable attribute (§4.7.7). 
-------------------------------------------------------------------
  (http://java.sun.com/docs/books/vmspec/html/ClassFile.doc.html#6253)

The same happens with parsers generated by SableCC for large grammars, such as
Java. Similar issues have been reported on Usenet for other compiler tools,
such as JCUP/JLEX.

This problem is new with JDK 1.2, which has stricter classfile verification.
AFAIK, the check cannot be disabled. I believe this issue is highly critical.

  Regards,
    Eran Tromer