2013-02-14 3 views
3

Я пытаюсь импортировать грамматику лексера в другую грамматику лексера. Импортированная грамматика использует разные режимы (в режимах примера XMLLexer INSIDE и PROC_INSTR).Импорт ANTLR4 лексической грамматики, которая использует разные режимы

lexer grammar HTMLLexer; 
import XMLLexer; 

При компиляции я получаю сообщение об ошибке, что переменная, соответствующая имени режима, не определена.

В качестве конкретного примера я образующий HTMLLexer на вершине XMLLexer (от antlr4 книги) и получить следующую ошибку:

C:\Users\<user>\AppData\Local\Temp\TestRigTask-1360839400637\HTMLLexer.java:143: 
    error: cannot find symbol 
    case 6: more(); pushMode(PROC_INSTR); break; 
         ^
    symbol: variable PROC_INSTR 
    location: class HTMLLexer 
1 error 

я могу преодолеть эту ошибку redifining режимов в верхнем level lexer с дополнительными токенами, но затем импортированные токены внутри других режимов, как и по умолчанию, не распознаются.

Парсер работает, если я встроил импортированную часть в определение основного лексера, но я хотел бы использовать функцию импорта, чтобы иметь чистое разделение. (Не для примера xml/html, но в другом случае.)

Можно ли заставить его работать с использованием импорта или это ограничение antlr4?

ответ

4

Импорт многорежимный лексер грамматик пока не поддерживается в ANTLR 4. Следующий вопрос будет отслеживать ход выполнения этой функции:

Support importing multi-mode lexer grammars

Смежные вопросы