Лексические правила "смешивания" довольно распространены.Рассмотрим обработку обратной косой черты, которую вы можете сделать более или менее одинаково в различных синтаксисах цитирования и даже в литералах регулярных выражений.Но они, вероятно, будут объединены явно.
В качестве лишь немного надуманного примера использования неявной комбинации с состоянием INITIAL рассмотрим лексический анализ языка, подобного Python, с контекстно-значимым начальным пробелом.Здесь есть два почти идентичных лексических контекста: нормальный контекст, в котором символ новой строки является синтаксическим маркером, а начальные пробелы должны быть превращены в последовательности INDENT / DEDENT, и контекст в скобках, в котором символы новой строки и начальные пробелы являются простопробелы, которые не передаются парсеру.Эти контексты будут отличаться только парой паттернов;Подавляющее большинство правил будут распространены.Поэтому наличие включающего состояния, которое содержит только что-то вроде:
<IN_PAREN>[[:space:]]+ /* Ignore all whitespace */
, может быть простым решением.Конечно, это правило должно быть помещено перед обычной обработкой пробелов, чтобы оно переопределялось, когда IN_PAREN
активно.