方法specialStateTransition(int,IntStream)的代码超过65535字节

时间:2011-11-09 06:15:32

标签: java antlr

我有一个非常大的语法,我不想把它分成多个较小的语法。但生成的Lexer文件出现以下错误:

The code of method specialStateTransition(int, IntStream) is exceeding the 65535 bytes

我使用的是ANTLR-3.2。请告诉我如何删除此编译器错误。

由于

Preeti

3 个答案:

答案 0 :(得分:4)

并不总是生成方法specialStateTransition。它可能与一些与其他令牌共享公共前缀的令牌有关。

请参阅this question/answer,了解specialStateTransition通过重新制定一个此类令牌而完全消失的情况。

答案 1 :(得分:2)

我最近遇到了同样的问题,并通过更改Antlr代码生成工具的选项来设法修复它。

C: java org.antlr.Tool –Xmaxinlinedfastates [a number less than 60] grammar.g

使用此选项会强制代码生成器创建一个DFA状态表,而不是许多嵌套的if语句

答案 2 :(得分:1)

你不能:你必须重构你的代码。该限制是Java类文件固有的。

来自Section 4.10 (Limitations of the Java Virtual Machine) of the VM specification

  

每个非本机非抽象方法的代码量限制为   65536字节,由exception_table中索引的大小   LineNumberTable属性(第4.7.8节)中的代码属性(第4.7.3节),   并在LocalVariableTable属性中(§4.7.9)。