我有一个非常大的语法,我不想把它分成多个较小的语法。但生成的Lexer文件出现以下错误:
The code of method specialStateTransition(int, IntStream) is exceeding the 65535 bytes
我使用的是ANTLR-3.2。请告诉我如何删除此编译器错误。
由于
Preeti
答案 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)。