В поисках решения моей проблемы я получил этот вопрос , предлагая составные грамматики, чтобы избавиться от code too large
. Проблема там, я уже использую импорт грамматики, но когда я продолжаю расширять одну из импортированных грамматик, грамматика корневого парсера показывает ошибку. По-видимому, проблема заключается во многих определениях токенов и DFA, которые ANTLR генерирует после анализа всей грамматики. Есть ли способ / как это предлагается, чтобы избавиться от этой проблемы? Является ли он масштабируемым, т. Е. Не зависит от того, какие части были изменены из-за того, что обходной путь достаточно мал?
РЕДАКТИРОВАТЬ: Чтобы прояснить это (связанный вопрос не прояснил): Ошибка code too large
- это ошибка компилятора в сгенерированном коде синтаксического анализатора, на мой взгляд, обычно вызванная грамматикой настолько большой, что некоторый код больше, чем предел спецификации Java. В моем случае это статический инициализатор корневого класса синтаксического анализатора, который содержит тонны переменных предпросмотра DFA, и все это приводит к коду в инициализаторе. Таким образом, в идеале, ANTLR должна быть в состоянии разделить это на случай, если грамматика слишком велика / пользователь говорит ANTLR сделать это. Есть ли такая опция?
(Должен признать, у автора вопроса, связанного с вопросом, было ... интересное правило, которое приводило к тому, что его грамматика раздваивалась, и это может быть моей ошибкой и здесь. Но возможность это не ошибка автора грамматики (в любой большой грамматике), так что я вижу это как правильный, не относящийся к грамматике вопрос ANTLR)
РЕДАКТИРОВАТЬ КОНЕЦ
Моя грамматика разбирает текст правил "Магическое Собрание" и доступна здесь (git). Проблема, в частности, возникает при замене строки 33 на 34-36 в этом файле . Я использую Maven и antlr3-maven-plugin для сборки, поэтому в идеале, обходной путь выполним с помощью плагина, но если это не так, это меньшая проблема, чем у меня сейчас ...
Большое спасибо, и я надеюсь, что я не наблюдал ни одной очевидной документации, которая бы мне помогла.