То, о чем вы спрашиваете, называется островная грамматика .Идея состоит в том, что вы определяете синтаксический анализатор для той части языка, которая вас интересует («остров») со всеми классическими токенизациями, необходимыми для этой части, и что вы определяете крайне небрежный синтаксический анализатор для пропуска остальной части («океан»)в который остров встроен).Один из распространенных способов сделать это - определить соответственно небрежные лексеры, которые собирают огромное количество материала (чтобы пропустить HTML-код во встроенном коде, вы можете попробовать пропустить все, что не похоже на тег сценария в лексере, дляпример).
На сайте ANTLR даже обсуждаются некоторые связанные проблемы , но, в частности, говорится, что есть примеры, включенные в ANTLR.У меня нет опыта работы с ANTLR, поэтому я не знаю, насколько полезна эта конкретная информация.
Создав много инструментов, использующих анализаторы для анализа / преобразования кода (проверьте мою биографию), я немного пессимистоб общей полезности островных грамматик.Если ваша цель не состоит в том, чтобы сделать что-то довольно тривиальное с разобранным островом, вам нужно будет собрать значение всех идентификаторов, которые он использует прямо или косвенно ... и большинство из них, к сожалению, для вас определены в океане.Так что ИМХО вам в значительной степени придется разбирать океан тоже, чтобы пройти тривиальные задачи.У вас будут и другие проблемы, убедившись, что вы действительно пропустили вещи острова;это в значительной степени означает, что ваш океанский лексер знает о пробелах, комментариях и всем придирчивом синтаксисе символьных строк (это сложнее, чем это выглядит в современных языках), так что они должным образом пропускаются.YMMV.