Русский
Русский
English
Статистика
Реклама

Recovery mode Про LL-парсинг Предложение по расширению грамматик для генераторов парсеров

В некоторых генераторах нисходящего(LL) синтаксического анализа с увеличением объема текста исходного кода время парсинга увеличивается в более чем арифметической прогрессии.


Идея состоит в том, чтобы ввести в самом парсере понятие препарсинга разбиение текста исходной программы на блоки для отдельного парсинга.

Тексты программ имеют блочную структуру.
к примеру
1 уровень namespace
2 уровень классы
3 уровень методы и свойства
и т.д.

Для Си-подобных языков блоки это просто {}

В языке же Clipper, например,
1 уровень процедуры/функции/методы, классы, директивы

правило начала процедуры/функции:
funcProc
: funScope? (FUNCTION | PROCEDURE) identName ('(' params? ')')? crlfStmnt
;

funScope
: STATIC
| INIT
| EXIT
;

Окончанием процедуры/функции может быть
RETURN ( expression )? crlfStmnt

но RETURN может и отсутствовать, тогда окончанием будет EOF или начало блока первого уровня.

В генераторе парсеров ANTLR для грамматики можно устанавливать опции.

Т.е. мы можем определить
options { PreParse=ON; }

и после этого для правил указывать атрибуты, например:
[PreParseLevel = 1]
funcProcSection
: funcProcHead
statements
;

Также некоторые конструкции такие как лямбды/анонимные функции могут быть тоже выделены для отдельного парсинга. Для них можно установить PreParseLevel = 0.

Целью синтаксического анализа является построение дерева синтаксического разбора(abstract syntax tree (AST)). В процессе парсинга мы будем получать для каждого блока свое дерево, которое потом можно прицепить к основному дереву.

Конечно, кто-то использует парсер-комбинаторы и для него это все понятно и так.

Хотелось бы увидеть комментарии о данной концепции.

Разумно ли все это?
Применялось ли где?
Применяли ли вы в своей работе?
Стоит ли выносить это на обсуждение в англоязычном сообществе?

With best regards
Источник: habr.com
К списку статей
Опубликовано: 13.10.2020 08:16:54
0

Сейчас читают

Комментариев (0)
Имя
Электронная почта

Алгоритмы

Компиляторы

Программирование

Синтаксический анализ

Ll

Парсинг

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru