Разбор без сканирования

редактировать

В информатике, разбор без сканирования (также называемый анализ без лексического анализа ) выполняет токенизацию (разбиение потока символов на слова) и синтаксический анализ (упорядочивание слов по фразам) за один шаг, а не разбивает его на конвейер из лексер , за которым следует анализатор , выполняющий одновременно. Грамматика языка не требует сканирования, если в ней используется единый формализм для выражения как лексической (уровень слов), так и структуры уровня фразы языка.

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

Содержание
  • 1 Преимущества
  • 2 Недостатки
  • 3 Реализации
  • 4 Примечания
  • 5 Дополнительная литература
Преимущества
  • Только один метаязык необходим
  • Необычная лексическая структура легко обрабатывается
  • «Классификация токенов» не нужна, что устраняет необходимость в конструктивных приспособлениях, таких как «взлом лексера "и язык зарезервированные слова (например," while "в C )
  • Грамматики могут быть композиционными (могут быть объединены без вмешательства человека)
Недостатки
  • Поскольку лексическое сканирование и синтаксический синтаксический анализ объединены, результирующий синтаксический анализатор имеет тенденцию быть более сложным и, следовательно, сложнее для понимания и отладки . То же самое будет справедливо для связанной грамматики, если грамматика используется для генерации синтаксический анализатор.
  • Результирующий синтаксический анализатор обычно значительно менее эффективен, чем конвейер лексического анализатора, в отношении как времени, так и памяти .
Реализации
  • SGLR является синтаксическим анализатором для модульного формализма определения синтаксиса SDF и является частью мета-среды ASF + SDF и системы преобразования программ Stratego / XT.
  • JSGLR, чистая реализация Java SGLR, также основанный на SDF.
  • TXL, поддерживает синтаксический анализ на уровне символов.
  • dparser генерирует код ANSI C для безсканирующих анализаторов GLR.
  • Spirit позволяет синтаксический анализ без сканирования и на основе сканера.
  • SBP - это анализатор без сканирования для логических грамматик (надмножество контекстно-свободных грамматик), написанных на Java.
  • Laja - это двухфазный генератор синтаксического анализатора без сканирования с поддержкой отображения правил грамматики в объекты, написанный на Java.
  • Raku Grammars особенность языка программирования общего назначения Raku.
  • PyParsing - синтаксический анализатор без сканирования, написанный на чистом Python.
  • META II Имеет встроенный токен функции синтаксического анализатора.
  • TREE-META Подобно META II также не требует сканирования и имеет встроенные функции лексического анализатора.
  • CWIC Компилятор для написания и реализации компиляторов. Имеет правила токена как часть своего языка. Правила в CWIC были скомпилированы в логические функции, возвращающие успех или неудачу.
Примечания
  • ^Это связано с тем, что синтаксический анализ на уровне символов делает язык, распознаваемый анализатором, единственным контекстно-свободным языком, определенным для символов, в отличие от контекстно-свободного языка последовательностей строк в обычных языках. Некоторые лексерные анализаторы обрабатывают весь класс контекстно-свободных языков, который закрыт композицией.
Дополнительная литература
  • Visser, E. (август 1997). Бесканерный разбор Generalized-LR. Нидерланды: Амстердамский университет. CiteSeerX 10.1.1.37.7828.
  1. ^Экономопулос, Джорджиос; Клинт, Пол; Винджу, Юрген (2009). «Ускоренный анализ GLR без сканирования» (PDF). Конструкция компилятора. 5501 : 126–141. doi :10.1007/978-3-642-00722-4_10.
Последняя правка сделана 2021-06-07 04:36:19
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте