В этом ответе я буду держаться подальше от «Контекстно-зависимого», потому что эта фраза имеет значение в Теории языка.
PEG прекрасно способен анализировать субязык (скажем, выражения форматирования строк Python)на другом языке.
Фактически, исходное определение PEG не использует токенизатор, потому что грамматики PEG могут анализировать подязык токена.
Если вы думаете оподпрограмм, то контекст обеспечивается правилом, которое знает, что подграмма должна быть вызвана.
В TatSu есть функции, позволяющие выполнять токенизацию перед синтаксическим анализом (класс Buffer
) для эффективности и удобства, но использование этих функций не является обязательным.
Единственные случаи, которые не могут быть легко обработаны как грамматика внутри грамматики, - это предварительная обработка с возможностями макросов, потому что те требуют фазы интерпретациипрежде чем текст для внутренней грамматики может быть проанализирован.