我有一個相當大的語法,我不想把它分解成多個更小的語法。但生成的Lexer文件給出以下錯誤:方法specialStateTransition的代碼(INT,IntStream)被超過65535個字節
The code of method specialStateTransition(int, IntStream) is exceeding the 65535 bytes
我正在使用ANTLR-3.2。請告訴我如何刪除此編譯器錯誤。
感謝
Preeti
我有一個相當大的語法,我不想把它分解成多個更小的語法。但生成的Lexer文件給出以下錯誤:方法specialStateTransition的代碼(INT,IntStream)被超過65535個字節
The code of method specialStateTransition(int, IntStream) is exceeding the 65535 bytes
我正在使用ANTLR-3.2。請告訴我如何刪除此編譯器錯誤。
感謝
Preeti
您不能:你將不得不重構你的代碼。這個限制是Java類文件固有的。
從Section 4.10 (Limitations of the Java Virtual Machine) of the VM specification:
The amount of code per non-native, non-abstract method is limited to 65536 bytes by the sizes of the indices in the exception_table of the Code attribute (§4.7.3), in the LineNumberTable attribute (§4.7.8), and in the LocalVariableTable attribute (§4.7.9).
最近我有同樣的問題,並設法通過更改ANTLR的代碼生成工具的選項來解決它..
C: java org.antlr.Tool –Xmaxinlinedfastates [a number less than 60] grammar.g
使用此選項強制代碼生成器來創建DFA狀態,而不是許多嵌套if
聲明
的表法specialStateTransition
並不總是g^enerated。它可能與某些與其他標記共享公共前綴的標記有關。
請參閱this question/answer對於specialStateTransition
通過重新構造一個此類令牌而完全消失的情況。