For faster navigation, this Iframe is preloading the Wikiwand page for Синтаксический анализ.

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

Материал из Википедии — свободной энциклопедии

Синтакси́ческий ана́лиз (или разбор, жарг. па́рсингангл. parsing) в лингвистике и информатике — процесс сопоставления линейной последовательности лексем (слов, токенов) естественного или формального языка с его формальной грамматикой. Результатом обычно является дерево разбора (синтаксическое дерево). Обычно применяется совместно с лексическим анализом.

Синтаксический анализатор (жарг. па́рсерангл. parser) — это программа или часть программы, выполняющая синтаксический анализ.

Пример разбора выражения с преобразованием его структуры из линейной в древовидную.

В ходе синтаксического анализа исходный текст преобразуется в структуру данных, обычно — в дерево, которое отражает синтаксическую структуру входной последовательности и хорошо подходит для дальнейшей обработки.

Как правило, результатом синтаксического анализа является синтаксическое строение предложения, представленное либо в виде дерева зависимостей, либо в виде дерева составляющих, либо в виде некоторого сочетания первого и второго способов представления.

Область применения

[править | править код]

Всё что угодно, имеющее «синтаксис», поддается автоматическому анализу.

Типы алгоритмов

[править | править код]

Восстановление после ошибок

[править | править код]

Простейший способ реагирования на некорректную входную цепочку лексем — завершить синтаксический анализ и вывести сообщение об ошибке. Однако часто оказывается полезным найти за одну попытку синтаксического анализа как можно больше ошибок. Именно так ведут себя трансляторы большинства распространённых языков программирования.

Таким образом, перед обработчиком ошибок синтаксического анализатора стоят следующие задачи:

  • он должен ясно и точно сообщать о наличии ошибок;
  • он должен обеспечивать быстрое восстановление после ошибки, чтобы продолжать поиск других ошибок;
  • он не должен существенно замедлять обработку корректной входной цепочки.

Ниже описаны наиболее известные стратегии восстановления после ошибок.

Восстановление в режиме паники

[править | править код]

При обнаружении ошибки синтаксический анализатор пропускает входные лексемы по одной, пока не будет найдена одна из специально определённого множества синхронизирующих лексем. Обычно такими лексемами являются разделители, например: ;, ) или }. Набор синхронизирующих лексем должен определять разработчик анализируемого языка. При такой стратегии восстановления может оказаться, что значительное количество символов будут пропущены без проверки на наличие дополнительных ошибок. Данная стратегия восстановления наиболее проста в реализации.

Восстановление на уровне фразы

[править | править код]

Иногда при обнаружении ошибки синтаксический анализатор может выполнить локальную коррекцию входного потока так, чтобы это позволило ему продолжать работу. Например, перед точкой с запятой, отделяющей различные операторы в языке программирования, синтаксический анализатор может закрыть все ещё не закрытые круглые скобки. Это более сложный в проектировании и реализации способ, однако в некоторых ситуациях, он может работать значительно лучше восстановления в режиме паники. Естественно, данная стратегия бессильна, если настоящая ошибка произошла до точки обнаружения ошибки синтаксическим анализатором.

Продукции ошибок

[править | править код]

Знание наиболее распространённых ошибок позволяет расширить грамматику языка продукциями, порождающими ошибочные конструкции. При срабатывании таких продукций регистрируется ошибка, но синтаксический анализатор продолжает работать в обычном режиме.

Средства разработки анализаторов

[править | править код]

Отдельные этапы разработки и построения трансляторов могут быть автоматизированы и выполнены компьютером.

Вот некоторые из наиболее известных средств разработки анализаторов[2]:

  • ANTLR — генератор парсеров
  • Bison — генератор парсеров
  • Coco/R — генератор сканера и парсера
  • GOLD — парсер
  • JavaCC — генератор парсеров для языка Java
  • Lemon Parser — генератор парсеров
  • Lex — генератор сканеров
  • Ragel — генератор встраиваемых парсеров
  • Spirit Parser Framework — генератор парсеров
  • SYNTAX
  • Syntax Definition Formalism[англ.]
  • UltraGram
  • VivaCore
  • Yacc — генератор парсеров

См. также сравнение генераторов парсеров[англ.].

Примечания

[править | править код]
  1. Тим Джонс М. Извлечение информация из Интернета при использовании языка Ruby. (22 мая 2014). Дата обращения: 13 декабря 2019. Архивировано 13 декабря 2019 года.
  2. Ela Kumar. Natural Language Processing. — I. K. International Pvt Ltd, 2011. — P. 100. — ISBN 978-93-80578-77-4.

Литература

[править | править код]
  • А. Ахо, Дж. Ульман. Теория синтаксического анализа, перевода и компиляции. Т. 1. Пер. с англ. В. Н. Агафонова под ред. В. М. Курочкина. М.: Мир, 1978. 614 с.
  • А. Ахо, Дж. Ульман. Теория синтаксического анализа, перевода и компиляции. Т. 2. Пер. с англ. А. Н. Бирюкова и В. А. Серебрякова под ред. В. М. Курочкина. М.: Мир, 1978. 487 с.
  • Альфред В. Ахо, Моника С. Лам, Рави Сети, Джеффри Д. Ульман. Компиляторы: принципы, технологии и инструментарий = Compilers: Principles, Techniques, and Tools. — 2-е изд. — М.: Вильямс, 2008. — ISBN 978-5-8459-1349-4.
  • Робин Хантер. Основные концепции компиляторов = The Essence of Compilers. — М.: «Вильямс», 2002. — 256 с. — ISBN 5-8459-0360-2.
Для улучшения этой статьи желательно: Проверить достоверность указанной в статье информации. На странице обсуждения должны быть пояснения.Исправить статью согласно стилистическим правилам Википедии.Проставить сноски, внести более точные указания на источники.После исправления проблемы исключите её из списка. Удалите шаблон, если устранены все недостатки.
{{bottomLinkPreText}} {{bottomLinkText}}
Синтаксический анализ
Listen to this article

This browser is not supported by Wikiwand :(
Wikiwand requires a browser with modern capabilities in order to provide you with the best reading experience.
Please download and use one of the following browsers:

This article was just edited, click to reload
This article has been deleted on Wikipedia (Why?)

Back to homepage

Please click Add in the dialog above
Please click Allow in the top-left corner,
then click Install Now in the dialog
Please click Open in the download dialog,
then click Install
Please click the "Downloads" icon in the Safari toolbar, open the first download in the list,
then click Install
{{::$root.activation.text}}

Install Wikiwand

Install on Chrome Install on Firefox
Don't forget to rate us

Tell your friends about Wikiwand!

Gmail Facebook Twitter Link

Enjoying Wikiwand?

Tell your friends and spread the love:
Share on Gmail Share on Facebook Share on Twitter Share on Buffer

Our magic isn't perfect

You can help our automatic cover photo selection by reporting an unsuitable photo.

This photo is visually disturbing This photo is not a good choice

Thank you for helping!


Your input will affect cover photo selection, along with input from other users.

X

Get ready for Wikiwand 2.0 🎉! the new version arrives on September 1st! Don't want to wait?