Antlr4: синтаксический анализ тега JSP с вложенным тегом в значении атрибута - PullRequest
0 голосов
/ 10 мая 2018

Мне нужно проанализировать несколько файлов JSP.В JSP есть специальное правило, которое отличается от обычного HTML:

Значение атрибута (строка в кавычках) может содержать встроенный тег, например, допустимы следующие случаи:

  1. <a value="<b v="123"/>"></a> вложенные теги
  2. <a value="List<String>"></a> нормальное значение атрибута: List<String>
  3. <a value="<"></a> нормальное значение атрибута: <

Я пытался использоватьрежим лексера, который может обрабатывать случай 1, но не может обрабатывать случаи 2 и 3.

Можно ли использовать Antrl4 для анализа такого текста?

ОБНОВЛЕНИЕ

Упрощенная версия моего лексера:

lexer grammar JSPLexer;

@members{
    private int tagNestLevel;
}

TAG_OPEN            :   '<' { tagNestLevel = 0; }   -> pushMode(TAG_MODE);
TAG_CLOSE_SLASH     :   '</'                        -> pushMode(TAG_MODE);

mode TAG_MODE;

TAG_SLASH_CLOSE     :   '/>'                        -> popMode;
TAG_NEST_OPEN       :   '<' { tagNestlevel++; }     -> type(TAG_OPEN), pushMode(TAG_MODE)
TAG_CLOSE           :   '>' { tagNestLevel == 0 }?  -> popMode;
EQ                  :   '=';
NAME                :   [a-zA-Z] [a-zA-Z0-9_.:-]*;
DOUBLE_QUOTE_OPEN   :   '"'                         -> pushMode(DOUBLE_STRING_MODE);
WS_TAG              :   [ \t\r\n]+                  -> channel(HIDDEN)

mode DOUBLE_STRING_MODE;

DOUBLE_QUOTE_CLOSE  :   '"'                         -> popMode;
DOUBLE_QUOTE_STRINGTAG_CLOSE_SLASH : '</'           -> type(TAG_CLOSE_SLASH), pushMode    (TAG_MODE);
DOUBLE_QUOTE_STRING_TAG_OPEN :  '<' { tagNestLevel = 0; } ->type(TAG_OPEN), pushMode    (TAG_MODE);
DOUBLE_QUOTE_TEXT   :   ~["<]+;                     
...