Введение

Алгоритм, выполняющий токенизацию и разбор в один шаг.

В информатике, разбор без сканера (также называемый лексически-независимым разбором) выполняет токенизацию (разбиение потока символов на токены) и разбор (организация токенов во фразы) за один шаг, вместо разделения на конвейер из лексера и парсера, работающих последовательно. Грамматика языка считается лексически-независимой, если она использует единый формализм для описания как лексического (уровня токенов), так и синтаксического (уровня фраз) строения языка. Разделение обработки на лексер и парсер обеспечивает большую модульность; разбор без сканера обычно применяется, когда чёткое разделение между лексером и парсером не требуется или нежелательно. Примеры, когда это целесообразно, включают TeX, большинство грамматик вики-разметки, makefiles, простые специализированные языки сценариев и Raku.

Недостатки

Поскольку лексическое сканирование и синтаксический анализ объединены, результирующий анализатор, как правило, оказывается более сложным и, следовательно, труднее для понимания и отладки. То же самое справедливо и для соответствующей грамматики, если она используется для генерации анализатора. Результирующий анализатор, как правило, значительно менее эффективен по времени и потреблению памяти, чем конвейер "лексер-анализатор".

Реализация

SGLR — это парсер для модульного формализма определения синтаксиса (SDF), являющийся частью метасреды ASF+SDF и системы преобразования программ Stratego/XT. JSGLR — это чистая Java-реализация SGLR, также основанная на SDF. TXL поддерживает разбор на уровне символов. dparser генерирует код ANSI C для GLR-парсеров без сканера. Spirit позволяет выполнять как бессканерный, так и сканерный разбор. SBP — бессканерный парсер для булевых грамматик (супермножество контекстно-свободных грамматик), написанный на Java. Laja — двухфазный генератор бессканерного парсера с поддержкой отображения правил грамматики в объекты, написанный на Java. Система грамматик Raku является особенностью языка программирования общего назначения Raku. PyParsing — бессканерный парсер, написанный на чистом Python. META II имеет встроенные функции парсинга токенов. TREE META, как и META II, также является бессканерным и имеет встроенные функции лексера. CWIC — компилятор для разработки и реализации компиляторов, включающий правила для токенов в свой язык. Правила в CWIC компилировались в булевы функции, возвращающие значение "успех" или "неудача".