specialStateTransition(int, IntStream)方法的代码超过65535字节.处理步骤



我有一个相当大的语法,我不想把它分解成多个较小的语法。但是生成的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)。

最新更新