Парсинг  , анализ синтаксиса или синтаксический анализ является процессом анализа строки из символов , либо на естественном языке , компьютерных языках или структуры данных , в соответствии с правилами в формальных грамматиках . Термин синтаксический анализ происходит от латинских пар ( orationis ), что означает часть (речи) . 

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

В рамках вычислительной лингвистики этот термин используется для обозначения формального анализа компьютером предложения или другой строки слов в его составных частях, в результате чего дерево синтаксического разбора , которое может также содержать семантическую и другую информацию как парсер olx ua.

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

Парсер –Анализатор

Парсер  представляет собой программный компонент , который принимает входные данные (часто текст) и строит структуру данных – часто своего рода дерево разбора , абстрактного синтаксического дерева или другой иерархической структуры, что дает структурное представление ввода при проверке правильности синтаксиса. Синтаксическому разбору может предшествовать или следовать другим шагам, или они могут быть объединены в один шаг. Парсер часто предшествует отдельный лексический анализатор , который создает маркеры из последовательности входных символов; альтернативно, их можно комбинировать при разборчике без сканера . Парсеры могут быть запрограммированы вручную или могут автоматически или полуавтоматически генерироваться генератором синтаксического анализатора, Разбор дополняет шаблонизацию , которая производит форматированный вывод. Они могут применяться к разным доменам, но часто появляются вместе, например, пара scanf / printf или этапы обработки входного (front end parsing) и вывода (back end code generation) компилятора.

Ввод парсера часто является текстом на каком-либо компьютерном языке , но может также быть текстом на естественном языке или менее структурированными текстовыми данными, и в этом случае обычно извлекаются только определенные части текста, а не построенное дерево разбора. Parsers варьируются от очень простых функций, таких как scanf , до сложных программ, таких как интерфейс компилятора C ++ или анализатор HTML в веб-браузере . Важный класс простого разбора выполняется с использованием регулярных выражений , в которых группа регулярных выражений определяет регулярный языки механизм регулярного выражения, автоматически генерирующий парсер для этого языка, позволяющий сопоставлять шаблоны и извлекать текст. В других контекстах регулярные выражения используются вместо синтаксического анализа как шаг лексинга, выход которого затем используется парсером.

Использование парсеров варьируется в зависимости от ввода. В случае языков данных парсер часто определяется как средство чтения файлов программы, например чтение в HTML или XML- тексте; эти примеры – языки разметки . В случае языков программирования парсер является компонентом компилятора или интерпретатора , который анализирует исходный код языка компьютерного программирования для создания некоторой формы внутреннего представления; синтаксический анализатор является ключевым шагом в интерфейсе компилятора . Языки программирования, как правило, указываются в терминах детерминированной контекстно-свободной грамматикипотому что для них могут быть написаны быстрые и эффективные парсеры. Для компиляторов сам анализ может быть выполнен за один проход или несколько проходов – см. Однопроходный компилятор и многопроходный компилятор .

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

Контекстно-свободные грамматики ограничены в том объеме, в котором они могут выражать все требования языка. Неформально, причина в том, что память такого языка ограничена. Грамматика не может запомнить наличие конструкции над сколь угодно длинным входом; это необходимо для языка, на котором, например, должно быть объявлено имя до его ссылки. Однако более мощные грамматики, которые могут выразить это ограничение, не могут быть эффективно проанализированы. Таким образом, это общая стратегия создания расслабленного парсера для контекстно-свободной грамматики, которая принимает надмножество желаемых языковых конструкций (то есть принимает некоторые недопустимые конструкции); позже нежелательные конструкции могут быть отфильтрованы на этапе семантического анализа(контекстный анализ).