Список доступных вкладок с настройками изменяется после выбора типа парсера. Для разных типов парсера доступны соответствующие вкладки с настройками. Их общий список:
Режим парсера переключается между вариантами debug и work. Вариант work в демо-режиме недоступен. Debug предназначен для настройки и тестирования парсера, он обрабатывает первых 3 товара с каждой из первых 3 страниц.
Флажок активен позволяет включать или отключать автоматический запуск парсера без его удаления.
Параметры сортировка, категория и название парсера не влияют на его работу, но определяют порядок отображения парсеров в списке административной части сайта. Каталоги всегда отображаются выше парсеров, независимо от значения поля «сортировка».
ID инфоблока-каталога определяет основные настройки парсера, после изменений этого поля примените настройки.
URL страницы, RSS канал, URL файла — та страница сайта-донора или тот файл, с которым будет работать парсер. Указывается без дополнительных параметров, постраничная навигация настраивается отдельно в соответствующей вкладке. Если нужно указать несколько похожих страниц или файлов, сделать это можно в поле дополнительные урлы . Каждая ссылка должна располагаться в отдельной строке.
Парсеры типов RSS и page загружают данные в один раздел, XML и CSV работают с данными по разделам из файла, а для парсера типа «catalog» доступно сопоставление разделов сайта и инфблока. Если необходимо загружать данные из разных разделов каталога в разные разделы инфоблока, нужно нажать кнопку добавить, а затем для каждого URL выбрать раздел из выпадающего списка.
Кодировка сайта должна определиться автоматически. В случае несоответствия выбирается установленное значение из поля.
Количество товаров, выгружаемых за один шаг парсера — опция, которая игнорируется в debug-режиме. Позволяет разбивать обработку данных на части, актуально в случае ограничения ресурсов.
Живой пример заполнения этой вкладки можно увидеть в видеоролике Парсер контента: Предварительная настройка парсера
Описание курса Настройка модуля Визуальный редактор
Оставьте заявку и мы свяжемся с вами!
parser
— Доступ к деревьям синтаксического анализа PythonМодуль parser
предоставляет интерфейс для внутреннего синтаксического
анализатора Python и компилятора байт-кода. Основная цель этого интерфейса —
позволить коду Python редактировать дерево синтаксического анализа выражения
Python и создавать из него исполняемый код. Это лучше, чем пытаться разобрать и
изменить произвольный фрагмент кода Python в виде строки, потому что разбор
выполняется способом, идентичным коду, формирующему приложение. Это также
быстрее.
Примечание
Начиная с Python 2.5 и далее гораздо удобнее вмешиваться на этапе генерации
и компиляции абстрактного синтаксического дерева (AST) с помощью модуля ast
.
Следует отметить несколько моментов, касающихся этого модуля, которые важны для
использования созданных структур данных. Это не учебник по редактированию
деревьев синтаксического анализа для кода Python, но представлены некоторые
примеры использования модуля parser
.
Самое главное, требуется хорошее понимание грамматики Python, обрабатываемой
внутренним парсером. Полную информацию о синтаксисе языка см. в статье
Справочник по языку Python. Сам синтаксический анализатор создаётся из спецификации
грамматики, определённой в файле Grammar/Grammar
в стандартном
дистрибутиве Python. Деревья синтаксического анализа, хранящиеся в ST объектах,
созданных этим модулем, являются фактическими выходными данными внутреннего
парсера при создании с помощью функций
или suite()
, описанных ниже. Объекты ST, созданные с помощью sequence2st()
, точно имитируют данные структуры. Имейте в виду, что
значения последовательностей, которые считаются «правильными», будут
варьироваться от одной версии Python к другой по мере пересмотра формальной
грамматики языка. Однако перенос кода из одной версии Python в другую в виде
исходного текста всегда позволяет создавать правильные деревья синтаксического
анализа в целевой версии, с единственным ограничением, заключающимся в том, что
переход на более старую версию интерпретатора не будет поддерживать более новые
языковые конструкции. Деревья синтаксического анализа обычно несовместимы от
одной версии к другой, хотя исходный код обычно был совместим с предыдущими
версиями в рамках основной серии релизов.
Каждый элемент последовательностей, возвращаемых st2list()
или st2tuple()
, имеет простую форму. Последовательности, представляющие
нетерминальные элементы в грамматике, всегда имеют длину больше единицы. Первый
элемент — это целое число, которое идентифицирует произведение в грамматике.
Этим целым числам даны символические имена в заголовочном файле C Include/graminit.h
и модуле Python symbol
. Каждый дополнительный
элемент последовательности представляет собой компонент продукции, распознанный
во входной строке: это всегда последовательности, имеющие ту же форму, что и
родительская. Важным аспектом этой структуры, который следует отметить,
является то, что ключевые слова, используемые для идентификации типа
родительского узла, такие как ключевое if
в if_stmt
, включаются в дерево узлов без какой-либо специальной
обработки. Например, ключевое if
представлено кортежем (1, 'if')
, где 1
— числовое значение, связанное со всеми токенами
, включая имена переменных и функций, определённые пользователем. В альтернативной форме, возвращаемой при запросе информации о номере строки,
тот же токен может быть представлен как (1, 'if', 12)
, где 12
представляет номер строки, в которой был найден завершающий символ.
Завершающие элементы представлены почти таким же образом, но без каких-либо
дочерних элементов и добавления исходного текста, который был идентифицирован.
Пример ключевого слова if
выше является показательным. Различные
типы завершающих символов определены в заголовочном файле C Include/token.h
и модуле Python token
.
Объекты ST не требуются для поддержки функциональности этого модуля, но предоставляются для трех целей: позволить приложению амортизировать стоимость обработки сложных деревьев синтаксического анализа, обеспечить представление дерева синтаксического анализа, которое экономит место в памяти по сравнению с Python представление списка или кортежа, а также для облегчения создания дополнительных модулей в C, которые манипулируют деревьями синтаксического анализа.
В Python можно создать простой класс-оболочку, чтобы скрыть использование ST объектов.Модуль parser
определяет функции для нескольких различных целей.
Наиболее важными целями являются создание ST объектов и преобразование объектов
ST в другие представления, такие как деревья синтаксического анализа и объекты
скомпилированного кода, но существуют также функции, которые служат для запроса
типа дерева синтаксического анализа, представленного ST объектом.
См.также
symbol
token
Объекты ST могут быть созданы из исходного кода или из дерева синтаксического
анализа. При создании объекта ST из исходного кода используются разные функции
для создания форм 'eval'
и 'exec'
.
parser.
expr
(source)Функция expr()
анализирует параметр source, как если бы он был
входом для compile(source, 'file.py', 'eval')
. Если парсинг завершается
успешно, создаётся объект ST для хранения внутреннего представления дерева
синтаксического анализа, в противном случае возникает соответствующее
исключение.
parser.
suite
(source)Функция suite()
анализирует параметр source, как если бы он был
входом для compile(source, 'file.py', 'exec')
. Если парсинг завершается
успешно, создаётся объект ST для хранения внутреннего представления дерева
синтаксического анализа, в противном случае возникает соответствующее
исключение.
parser.
sequence2st
(sequence)Данная функция принимает дерево синтаксического анализа, представленное в
виде последовательности, и строит внутреннее представление, если это
возможно. Если он может подтвердить, что дерево соответствует грамматике
Python и все узлы являются допустимыми типами узлов в основной версии
Python, объект ST создаётся из внутреннего представления и возвращается в
вызываемый объект. Если возникает проблема с созданием внутреннего
представления или если дерево не может быть проверено, возникает исключение ParserError
. Нельзя предполагать, что объект ST, созданный таким
образом, правильно компилируется; обычные исключения, вызванные компиляцией,
все ещё могут быть инициированы, когда объект ST передаётся в compilest()
. Это может указывать на проблемы, не связанные с
синтаксисом (например, исключение MemoryError
), но также может быть
связано с такими конструкциями, как результат синтаксического анализа del
f(0)
, который ускользает от синтаксического анализатора Python, но
проверяется компилятором байт-кода.
Последовательности, представляющие завершающие токены, могут быть
представлены либо в виде двухэлементных списков формы (1, 'name')
, либо
в виде трехэлементных списков формы (1, 'name', 56)
. Если присутствует
третий элемент, предполагается, что это допустимый номер строки. Номер
строки может быть указан для любого подмножества терминальных символов во
входном дереве.
parser.
tuple2st
(sequence)Это та же функция, что и у sequence2st()
. Точка входа
поддерживается для обратной совместимости.
Объекты ST, независимо от входных данных, использованных для их создания, могут быть преобразованы в деревья синтаксического анализа, представленные в виде деревьев списков или кортежей, или могут быть скомпилированы в исполняемые объекты кода. Деревья синтаксического анализа могут быть извлечены с информацией о нумерации строк или без неё.
parser.
st2list
(st, line_info=False, col_info=False)Данная функция принимает объект ST от вызывающего объекта в st и
возвращает список Python, представляющий эквивалентное дерево
синтаксического анализа. Результирующее представление списка можно
использовать для проверки или создания нового дерева синтаксического анализа
в форме списка. Данная функция не завершается ошибкой, пока доступна память
для построения представления списка. Если дерево синтаксического анализа
будет использоваться только для проверки, вместо этого следует использовать st2tuple()
, чтобы уменьшить потребление памяти и фрагментацию. Когда
требуется представление списка, данная функция работает значительно быстрее,
чем получение представления кортежа и преобразование его во вложенные
списки.
Если line_info имеет значение истина, информация о номере строки будет включена для всех завершающих токенов в качестве третьего элемента списка, представляющего токен. Обратите внимание, что предоставленный номер строки указывает строку, в которой находится токен ends. Информация пропускается, если флаг ложный или пропущен.
parser.
st2tuple
(st, line_info=False, col_info=False)Данная функция принимает объект ST от вызывающего объекта в st и
возвращает кортеж Python, представляющий эквивалентное дерево
синтаксического анализа. За исключением возврата кортежа вместо списка,
данная функция идентична st2list()
.
Если line_info имеет значение истина, информация о номере строки будет включена для всех токенов терминала в качестве третьего элемента списка, представляющего токен. Данная информация пропускается, если флаг ложный или пропущен.
parser.
compilest
(st, filename='<syntax-tree>’)Байтовый компилятор Python можно вызвать для объекта ST для создания
объектов кода, которые можно использовать как часть вызова встроенных
функций exec()
или eval()
. Данная функция предоставляет
интерфейс для компилятора, передавая внутреннее дерево синтаксического
анализа из st в синтаксический анализатор, используя имя исходного файла,
указанное параметром filename. Значение по умолчанию для filename указывает, что источником был объект ST.
Компиляция объекта ST может привести к исключениям, связанным с компиляцией;
примером может быть SyntaxError
, вызванный деревом синтаксического
анализа для del f(0)
: это утверждение считается допустимым в рамках
формальной грамматики Python, но не является допустимой языковой
конструкцией. Вызывается SyntaxError
, для этого условия, на самом деле
обычно генерируется байтовым компилятором Python, поэтому на этом этапе он
может быть вызван модулем parser
. Большинство причин сбоя компиляции
можно диагностировать программно путём проверки дерева синтаксического
анализа.
Предусмотрены две функции, которые позволяют приложению определить, было ли ST
создано как выражение или множество. Ни одна из данных функций не может
использоваться для определения того, было ли ST создано из исходного кода через expr()
или suite()
или из дерева синтаксического анализа через sequence2st()
.
parser.
isexpr
(st)Когда st представляет форму 'eval'
, данная функция возвращает True
, в противном случае она возвращает False
. Это полезно,
поскольку объекты кода обычно не могут быть запрошены для получения этой
информации с помощью существующих встроенных функций. Обратите внимание, что
объекты кода, созданные compilest()
, также нельзя запрашивать таким
образом, и они идентичны объектам, созданным встроенной функцией compile()
.
parser.
issuite
(st)Данная функция отражает isexpr()
в том смысле, что она сообщает,
представляет ли объект ST форму 'exec'
, широко известную как
«множество». Небезопасно предполагать, что данная функция эквивалентна not
isexpr(st)
, т. к. в будущем могут поддерживаться дополнительные
синтаксические фрагменты.
Модуль анализатора определяет одно исключение, но может также передавать другие встроенные исключения из других частей среды выполнения Python. См. каждую функцию для получения информации об исключениях, которые она может вызвать.
parser.
ParserError
Исключение возникает при сбое в модуле синтаксического анализатора. Обычно
это создаётся для ошибок проверки, а не для встроенного SyntaxError
,
возникающего во время обычного синтаксического анализа. Аргумент исключения
— это либо строка, рассказывающая о причине сбоя, либо кортеж, содержащий
последовательность, вызвавшую сбой, из дерева синтаксического анализа,
переданного в sequence2st()
, и поясняющую строку. Вызовы sequence2st()
должны иметь возможность обрабатывать исключения любого
типа, в то время как вызовы других функций в модуле должны учитывать только
простые строковые значения.
Обратите внимание, что функции compilest()
, expr()
и suite()
могут вызывать исключения, которые обычно возникают в процессе синтаксического
анализа и компиляции. К ним относятся встроенные исключения MemoryError
, OverflowError
, SyntaxError
и SystemError
. В данных случаях
данные исключения несут все значения, обычно связанные с ними. Подробную
информацию см. в описаниях каждой функции.
Упорядоченные сравнения и сравнения на равенство поддерживаются между объектами
ST. Также поддерживается пиклинг ST объектов (с использованием модуля pickle
).
parser.
STType
Тип объектов, возвращаемых expr()
, suite()
и sequence2st()
.
Объекты ST имеют следующие методы:
ST.
compile
(filename='<syntax-tree>’)То же, что и compilest(st, filename)
.
ST.
isexpr
()То же, что и isexpr(st)
.
ST.
issuite
()То же, что и issuite(st)
.
ST.
tolist
(line_info=False, col_info=False)То же, что и st2list(st, line_info, col_info)
.
ST.
totuple
(line_info=False, col_info=False)То же, что и st2tuple(st, line_info, col_info)
.
Хотя между синтаксическим анализом и генерацией байт-кода может выполняться
много полезных операций, самая простая операция — ничего не делать. Для этой
цели использование модуля parser
для создания промежуточной структуры
данных эквивалентно коду
>>> code = compile('a + 5', 'file.py', 'eval') >>> a = 5 >>> eval(code) 10
Эквивалентная операция с использованием модуля parser
несколько длиннее
и позволяет сохранить промежуточное внутреннее дерево синтаксического анализа в
качестве ST объекта:
>>> import parser >>> st = parser.expr('a + 5') >>> code = st.compile('file.py') >>> a = 5 >>> eval(code) 10
Приложение, которое нуждается как в ST объектах, так и в коде, может упаковать данный код в готовые функции:
import parser def load_suite(source_string): st = parser. suite(source_string) return st, st.compile() def load_expression(source_string): st = parser.expr(source_string) return st, st.compile()
« предыдущий | следующий »
Парсер Модуль синтаксического анализатора
обеспечивает интерфейс к внутреннему синтаксическому анализатору Python и
компилятор байт-кода. Основная цель этого интерфейса — позволить Python
код для редактирования дерева синтаксического анализа выражения Python и создания исполняемого кода
из этого. Это лучше, чем пытаться разобрать и изменить произвольный код Python.
фрагмент кода в виде строки, потому что синтаксический анализ выполняется способом, идентичным
код, формирующий приложение. Это также быстрее.
Note
Начиная с версии Python 2.5 гораздо удобнее врезаться в Abstract
Этап генерации и компиляции синтаксического дерева (AST) с использованием ast
модуль.
Есть несколько вещей, на которые следует обратить внимание в отношении этого модуля, которые важны для создания
использование созданных структур данных. Это не учебник по редактированию синтаксического анализа
деревья для кода Python, но некоторые примеры использования модуля синтаксического анализатора
:
представлены.
Самое главное, хорошее понимание грамматики Python, обрабатываемой
требуется внутренний парсер. Полную информацию о синтаксисе языка см.
к Справочнику по языку Python. Парсер
сам создается из спецификации грамматики, определенной в файле Grammar/Grammar
в стандартном дистрибутиве Python. Деревья синтаксического анализа
хранящиеся в объектах ST, созданных этим модулем, являются фактическими выходными данными из
внутренний синтаксический анализатор при создании функциями expr()
или suite()
,
описано ниже. Объекты ST, созданные с помощью sequence2st()
точно
имитировать эти структуры. Имейте в виду, что значения последовательностей, которые
считается «правильным», будет варьироваться от одной версии Python к другой, поскольку
формальная грамматика языка пересмотрена. Однако перенос кода из одного
Версия Python на другую в качестве исходного текста всегда будет позволять правильные деревья синтаксического анализа
быть создан в целевой версии, с единственным ограничением, что
переход на более старую версию интерпретатора не будет поддерживать более новую
языковые конструкции. Деревья синтаксического анализа обычно несовместимы из одного
версию на другую, хотя исходный код обычно был совместим с предыдущими версиями в пределах
крупная серия релизов.
Каждый элемент последовательностей, возвращаемых st2list()
или st2tuple()
имеет простую форму. Последовательности, представляющие нетерминальные элементы в грамматике
всегда имеют длину больше единицы. Первый элемент представляет собой целое число, которое
определяет произведение в грамматике. Этим целым числам даны символические имена
в заголовочном файле C Include/graminit.h
и модуль Python символ
. Каждый дополнительный элемент последовательности представляет компонент
продукции, распознанной во входной строке: это всегда последовательности
которые имеют ту же форму, что и родитель. Важным аспектом этой структуры
следует отметить, что ключевые слова, используемые для идентификации типа родительского узла,
например ключевое слово если
в if_stmt
включены в
дерево узлов без какой-либо специальной обработки. Например, ключевое слово , если
.
представлен кортежем (1, 'if')
, где 1
— числовое значение
связан со всеми токенами NAME
, включая имена переменных и функций
определяется пользователем. В альтернативной форме возвращается, когда информация о номере строки
запрашивается, тот же токен может быть представлен как (1, 'if', 12)
, где 12
представляет собой номер строки, в которой был найден терминальный символ.
Терминальные элементы представлены почти так же, но без дочерних элементов.
элементы и добавление исходного текста, который был идентифицирован. Пример
из , если приведенное выше ключевое слово
является репрезентативным. Различные типы
терминальные символы определены в заголовочном файле C Include/token.h
и
токен модуля Python .
Объекты ST не требуются для поддержки функциональности этого модуля, но предоставляются для трех целей: позволить приложению амортизировать стоимость обработки сложных деревьев синтаксического анализа, чтобы обеспечить представление дерева синтаксического анализа который экономит место в памяти по сравнению со списком или кортежем Python представление и облегчить создание дополнительных модулей на C, которые манипулировать деревьями синтаксического анализа. В Python можно создать простой класс-оболочку для скрыть использование объектов ST.
Модуль анализатора
определяет функции для нескольких различных целей. наиболее важными целями являются создание объектов ST и преобразование объектов ST в
другие представления, такие как деревья синтаксического анализа и объекты скомпилированного кода, но
также являются функциями, которые служат для запроса типа дерева синтаксического анализа, представленного
СТ объект.
См. также
symbol
Полезные константы, представляющие внутренние узлы дерева разбора.
токен
Полезные константы, представляющие конечные узлы дерева синтаксического анализа и функции для проверка значений узлов.
Объекты ST могут быть созданы из исходного кода или дерева синтаксического анализа. При создании
объект ST из исходного кода, для создания 'eval'
используются разные функции
и 'exec'
форм.
парсер.
выражение
( источник ) Функция expr()
анализирует параметр source , как если бы это был вход
в компиляция (источник, 'file. py', 'eval')
. Если синтаксический анализ успешен, объект ST
создается для хранения внутреннего представления дерева синтаксического анализа, в противном случае
возникает соответствующее исключение.
парсер.
набор
( источник ) Функция suite()
анализирует параметр source как будто это ввод
в компиляция (источник, 'file.py', 'exec')
. Если синтаксический анализ успешен, объект ST
создается для хранения внутреннего представления дерева синтаксического анализа, в противном случае
возникает соответствующее исключение.
парсер.
последовательность 2-я
( последовательность ) Эта функция принимает дерево синтаксического анализа, представленное в виде последовательности, и строит
внутреннее представительство, если возможно. Если он может подтвердить, что дерево соответствует
к грамматике Python, и все узлы являются допустимыми типами узлов в основной версии
Python объект ST создается из внутреннего представления и возвращается
к вызываемому. Если возникла проблема с созданием внутреннего представления или
если дерево не может быть проверено, Возникает исключение ParserError
. Ан
Объект ST, созданный таким образом, не должен считаться корректно компилируемым; нормальный
исключения, вызванные компиляцией, все еще могут быть инициированы, когда объект ST
передан в compilest()
. Это может указывать на проблемы, не связанные с синтаксисом
(например, исключение MemoryError
), но также может быть связано с такими конструкциями, как
в результате синтаксического анализа del f(0)
, который ускользает от синтаксического анализатора Python, но
проверяется компилятором байт-кода.
Последовательности, представляющие терминальные токены, могут быть представлены как двухэлементными
списки вида (1, 'имя')
или трехэлементные списки вида (1, 'имя')
'имя', 56)
. Если присутствует третий элемент, он считается допустимым.
номер строки. Номер строки может быть указан для любого подмножества терминала
символов во входном дереве.
парсер.
tuple2st
( последовательность ) Это та же функция, что и последовательность2st()
. Эта точка входа
поддерживается для обратной совместимости.
Объекты ST, независимо от исходных данных, использованных для их создания, могут быть преобразованы в деревья синтаксического анализа, представленные в виде деревьев списков или кортежей, или могут быть скомпилированы в объекты исполняемого кода. Деревья синтаксического анализа могут быть извлечены со строкой или без нее. информация о нумерации.
парсер.
st2list
( st , line_info=False , col_info = Ложь ) Эта функция принимает объект ST от вызывающего объекта в st и возвращает
Список Python, представляющий эквивалентное дерево синтаксического анализа. Полученный список
представление можно использовать для проверки или создания нового дерева синтаксического анализа в
форма списка. Эта функция не дает сбоев, пока доступна память для сборки
представление списка. Если дерево синтаксического анализа будет использоваться только для проверки, Вместо этого следует использовать st2tuple()
, чтобы уменьшить потребление памяти и
фрагментация. Когда требуется представление списка, эта функция
значительно быстрее, чем извлечение представления кортежа и преобразование этого
во вложенные списки.
Если line_info истинно, информация о номере строки будет включена для всех токены терминала в качестве третьего элемента списка, представляющего токен. Примечание что предоставленный номер строки указывает строку, на которой маркер заканчивается . Эта информация опускается, если флаг ложный или опущен.
парсер.
st2tuple
( st , line_info=False , col_info=False ) Эта функция принимает объект ST от вызывающей программы в st и возвращает
Кортеж Python, представляющий эквивалентное дерево синтаксического анализа. Кроме возврата
кортеж вместо списка, эта функция идентична st2list()
.
Если line_info истинно, информация о номере строки будет включена для всех токены терминала в качестве третьего элемента списка, представляющего токен. Этот информация опускается, если флаг ложен или опущен.
парсер.
компилятор
( st , имя_файла='<синтаксическое дерево>' ) Компилятор байтов Python может быть вызван для объекта ST для создания объектов кода
который можно использовать как часть вызова встроенной функции exec()
или eval()
функции. Эта функция предоставляет интерфейс компилятору, передавая
внутреннее дерево синтаксического анализа от st до синтаксического анализатора, используя имя исходного файла
указывается параметром имя файла . Значение по умолчанию для имя файла указывает, что источником был объект ST.
Компиляция объекта ST может привести к исключениям, связанным с компиляцией; ан
примером может быть SyntaxError
, вызванная деревом синтаксического анализа для del f(0)
:
это утверждение считается допустимым в рамках формальной грамматики Python, но
не юридическая языковая конструкция. SyntaxError
поднят для этого
условие обычно генерируется байтовым компилятором Python, что
почему он может быть поднят в этот момент на 9Модуль парсера 0004 . Большинство причин
Ошибка компиляции может быть диагностирована программно путем проверки синтаксического анализа.
дерево.
Предусмотрены две функции, которые позволяют приложению определить, было ли
созданный как выражение или набор. Ни одна из этих функций не может быть использована для
определить, было ли ЗП создано из исходного кода с помощью expr()
или suite()
или из дерева синтаксического анализа через sequence2st()
.
парсер.
исэкспр
( ст ) Когда st представляет форму 'eval'
, эта функция возвращает True
, в противном случае
он возвращает False
. Это полезно, поскольку объекты кода обычно не могут быть запрошены. для получения этой информации с помощью существующих встроенных функций. Обратите внимание, что код
объекты, созданные compilest()
, также не могут быть запрошены таким образом, и
идентичны созданным встроенными функция compile()
.
парсер.
issuite
( ст ) Эта функция повторяет isexpr()
в том, что она сообщает, является ли объект ST
представляет форму 'exec'
, широко известную как «набор». Это не безопасно
предположим, что эта функция эквивалентна , а не isexpr(st)
, как дополнительная
синтаксические фрагменты могут поддерживаться в будущем.
Модуль синтаксического анализатора определяет одно исключение, но может также передавать другие встроенные исключения из других частей среды выполнения Python. Посмотреть каждый функцию для получения информации об исключениях, которые она может вызвать.
парсер.
Ошибка синтаксического анализа
Исключение возникает при сбое в модуле анализатора. Это
обычно производится для ошибок проверки, а не для встроенного Синтаксическая ошибка
возникает при обычном разборе. Аргумент исключения
либо строка, описывающая причину сбоя, либо кортеж, содержащий
последовательность, вызвавшая сбой, из дерева синтаксического анализа, переданного в sequence2st()
и поясняющая строка. Вызовы sequence2st()
должны иметь возможность
обрабатывать любой тип исключения, в то время как вызовы других функций в модуле
нужно будет знать только простые строковые значения.
Обратите внимание, что функции compilest()
, expr()
и suite()
может
вызывать исключения, которые обычно возникают при разборе и компиляции
процесс. К ним относятся встроенные исключения MemoryError
, OverflowError
, SyntaxError
и SystemError
. В этих
случаях эти исключения имеют все значения, обычно связанные с ними.
Подробную информацию см. в описаниях каждой функции.
Упорядоченные сравнения и сравнения на равенство поддерживаются между объектами ST. Маринование
ST-объекты (используя pickle
модуль) также поддерживается.
парсер.
STТип
Тип объектов, возвращаемых expr()
, suite()
и последовательность2st()
.
Объекты ST имеют следующие методы:
СТ.
компиляция
( имя файла = ‘<синтаксическое дерево>‘ ) То же, что и compilest(st, имя файла)
.
СТ.
isexpr
() То же, что и isexpr(st)
.
СТ.
issuite
() То же, что и issuite(st)
.
СТ.
tolist
( line_info=False , col_info=False ) То же, что и st2list(st, line_info, col_info)
.
СТ.
всего
( line_info = False , col_info = False ) То же, что и st2tuple(st, line_info, col_info)
.
compile()
Хотя между синтаксическим анализом и байт-кодом может выполняться множество полезных операций.
генерации, самая простая операция — ничего не делать. С этой целью с помощью
модуль парсера
для создания промежуточной структуры данных эквивалентен
к коду
>>> code = compile('a + 5', 'file.py', 'eval') >>> а = 5 >>> оценка(код) 10
Эквивалентная операция с использованием модуля анализатора
несколько длиннее, и
позволяет сохранить промежуточное внутреннее дерево синтаксического анализа как объект ST:
>>> парсер импорта >>> st = parser. expr('a + 5') >>> code = st.compile('file.py') >>> а = 5 >>> оценка(код) 10
Приложение, которое нуждается как в объектах ST, так и в коде, может упаковать этот код в легкодоступные функции:
парсер импорта защита load_suite (исходная_строка): ул = parser.suite (исходная_строка) вернуть st, st.compile() def load_expression (исходная_строка): st = parser.expr(исходная_строка) вернуть st, st.compile()Парсер Python
В этой статье синтаксический анализ определяется как обработка фрагмента программы Python и преобразование этих кодов в машинный язык. В общем, можно сказать, что parse — это команда для разделения заданного программного кода на небольшой кусок кода для анализа правильного синтаксиса. В Python есть встроенный модуль parse, который обеспечивает интерфейс между внутренним парсером Python и компилятором, где этот модуль позволяет программе Python редактировать небольшие фрагменты кода и создавать исполняемую программу из этого отредактированного дерева разбора Python. код. В Python есть еще один модуль, известный как argparse, для анализа параметров командной строки.
В этой статье синтаксический анализатор Python в основном используется для преобразования данных в требуемый формат, этот процесс преобразования известен как синтаксический анализ. Поскольку во многих различных приложениях полученные данные могут иметь разные форматы данных, и эти форматы могут не подходить для конкретного приложения, здесь используется парсер, что означает, что в таких ситуациях необходим синтаксический анализ. Таким образом, синтаксический анализ обычно определяется как преобразование данных из одного формата в какой-либо другой формат, известный как синтаксический анализ. Парсер состоит из двух частей: лексера и парсера, а в некоторых случаях используются только парсеры.
Синтаксический анализ Python выполняется с использованием различных способов, таких как использование модуля синтаксического анализатора, синтаксический анализ с использованием регулярных выражений, синтаксический анализ с использованием некоторых строковых методов, таких как split() и strip(), синтаксический анализ с использованием панд, таких как чтение файла CSV в текст с помощью чтения . csv и т. д. Существует также концепция анализа аргументов, которая означает, что в Python у нас есть модуль с именем argparse, который используется для анализа данных с одним или несколькими аргументами из терминала или командной строки. Существуют и другие различные модули для работы с разбором аргументов, такие как модули getopt, sys и argparse. Теперь давайте рассмотрим демонстрацию парсера Python. В Python синтаксический анализатор также может быть создан с использованием нескольких инструментов, таких как генераторы синтаксических анализаторов, и существует библиотека, известная как комбинаторы синтаксических анализаторов, которые используются для создания синтаксических анализаторов.
Теперь давайте посмотрим на приведенном ниже примере, как модуль синтаксического анализатора используется для анализа данных выражений.
Код:
анализатор импорта print("Программа для демонстрации модуля парсера в Python") печать("\n") ехр = "5 + 8" print("Данное выражение для разбора выглядит следующим образом:") печать (эксп) печать("\n") print("Синтаксический анализ данного выражения приводит к следующему результату: ") ст = парсер. выражение (выражение) печать (ст) печать("\n") print("Разобранный объект преобразуется в кодовый объект") код = ст.компиляция() распечатать (код) печать("\n") print("Результат вычисления данного выражения выглядит следующим образом:") res = оценка (код) печать (разрешение)
Вывод:
В приведенной выше программе нам сначала нужно импортировать модуль анализатора, а затем мы объявили выражение для вычисления, и для анализа этого выражения мы должны использовать функцию parser.expr(). Затем мы можем оценить данное выражение, используя функцию eval().
В Python иногда мы получаем данные в формате даты и времени, которые могут быть в формате CSV или в текстовом формате. Таким образом, для анализа таких форматов в надлежащих форматах даты и времени Python предоставляет функцию parse_dates(). Предположим, у нас есть файл CSV, содержащий данные, а сведения о времени данных разделены запятой, что затрудняет чтение, поэтому для таких случаев мы используем parse_dates(), но перед этим мы должны импортировать pandas, поскольку эта функция предоставляется pandas .
В Python мы также можем анализировать параметры и аргументы командной строки, используя модуль argparse, который очень удобен для интерфейса командной строки. Предположим, у нас есть команды Unix для выполнения через интерфейс командной строки Python, такой как ls, в котором перечислены все каталоги на текущем диске, и также потребуется много разных аргументов, поэтому для создания такого интерфейса командной строки мы используем модуль argparse в Python. . Поэтому для создания интерфейса командной строки в Python нам нужно сделать следующее; во-первых, мы должны импортировать модуль argparse, затем мы создаем объект для хранения аргументов, используя ArgumentParser() через модуль argparse, позже мы можем добавить аргументы в объект ArgumentParser(), который будет создан, и мы можем запускать любые команды в команде Python линия. Обратите внимание, что запуск любых команд, кроме команды справки, не является бесплатным. Итак, вот небольшой фрагмент кода о том, как написать код Python для создания интерфейса командной строки с использованием модуля argparse.
import argparse
Теперь мы создали объект с помощью ArgumentParser(), а затем можем проанализировать аргументы с помощью функции parser.parse_args().
парсер = argparse.ArgumentParser() parser.parse_args()
Чтобы добавить аргументы, мы можем использовать add_argument() вместе с передачей аргумента этой функции, такой как parser.add_argument(“ls”). Итак, давайте посмотрим на небольшой пример ниже.
Код:
import argparse синтаксический анализатор = argparse.ArgumentParser() parser.add_argument("ls") аргументы = парсер.parse_args() печать (args.ls)
Вывод:
Таким образом, в приведенной выше программе мы можем видеть снимок экрана вывода, поскольку мы не можем использовать какие-либо другие команды, поэтому это выдаст ошибку, но когда у нас есть модуль argparse, мы можем запустить команды в оболочке Python следующим образом:
$ python ex_argparse. py --help использование: ex_argparse.py [-h] echo
Позиционные аргументы:
echo
Дополнительные аргументы:
-h, --helpпоказать это справочное сообщение и выйти $ python ex_argparse.py Обучение Эдукба
В этой статье мы делаем вывод, что Python предоставляет концепцию синтаксического анализа. В этой статье мы увидели, что процесс синтаксического анализа очень прост, что в целом представляет собой процесс разделения большой строки одного типа формата для преобразования этого формата в другой требуемый формат, известный как синтаксический анализ. Это делается разными способами в Python, используя строковые методы Python, такие как split() или strip(), используя python pandas для преобразования файлов CSV в текстовый формат. Здесь мы увидели, что можем даже использовать модуль синтаксического анализатора для использования его в качестве интерфейса командной строки, где мы можем легко запускать команды с помощью модуля argparse в Python.