我有一个相当大的语法,我不想把它分解成多个较小的语法。但是生成的Lexer文件给出了以下错误:
The code of method specialStateTransition(int, IntStream) is exceeding the 65535 bytes
我正在使用ANTLR-3.2。请告诉我如何消除这个编译错误。
感谢Preeti
方法specialStateTransition
并不总是生成的。它可能与一些与其他令牌共享公共前缀的令牌有关。
请参阅这个问题/答案,以了解通过重新表述一个这样的令牌而使specialStateTransition
完全消失的情况。
我最近遇到了同样的问题,并设法通过更改Antlr代码生成工具的选项来修复它。
C: java org.antlr.Tool –Xmaxinlinedfastates [a number less than 60] grammar.g
使用此选项强制代码生成器创建一个DFA状态表,而不是许多嵌套的if
语句
你不能:你将不得不重构你的代码。这个限制是Java类文件固有的。
选自虚拟机规范第4.10节(Java虚拟机的限制):
每个非本机、非抽象方法的代码量被限制为表的exception_table中索引的大小为65536字节代码属性(§4.7.3),在LineNumberTable属性(§4.7.8)中,和LocalVariableTable属性(§4.7.9)。