Ресурсы для lexing, маркируя и анализируя в Python

Вы можете использовать pd.Timedelta:

df["NEW_DATE"] = df["ACC_DATE"] - pd.Timedelta(days=365) 

Или заменить:

df["NEW_DATE"] = df["ACC_DATE"].apply(lambda x: x.replace(year=x.year - 1))

Но ни один из них не будет ловить високосные годы, чтобы вы могли использовать dateutil.relativedelta:

from dateutil.relativedelta import  relativedelta

df["NEW_DATE"] = df["ACC_DATE"].apply(lambda x: x - relativedelta(years=1))
56
задан Hamish Downer 7 October 2008 в 20:19
поделиться

6 ответов

Для средних сложных грамматик PyParsing является блестящим. Можно определить грамматики непосредственно в коде Python, никакой потребности в генерации кода:

>>> from pyparsing import Word, alphas
>>> greet = Word( alphas ) + "," + Word( alphas ) + "!" # <-- grammar defined here
>>> hello = "Hello, World!"
>>>> print hello, "->", greet.parseString( hello )
Hello, World! -> ['Hello', ',', 'World', '!']

(Пример, взятый от домашней страницы PyParsing).

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

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

17
ответ дан Torsten Marek 7 November 2019 в 16:44
поделиться

Я - счастливый пользователь СГИБ . Это - реализация чистого Python Lex & Yacc, с большим количеством маленьких тонкостей, которые делают его вполне Pythonic и простой в использовании. Начиная с Lex & Yacc являются самым популярным lexing & парсинг инструментов и используется для большинства проектов, СГИБ имеет преимущество положения на плечах гигантов. Большое знание существует онлайн на Lex & Yacc, и можно свободно применить его для СЛОЖЕНИЯ.

СГИБ также имеет пользу страница документации с некоторыми простыми примерами для запущения Вас.

Для списка большого количества инструментов парсинга Python, см. это .

35
ответ дан Eli Bendersky 7 November 2019 в 16:44
поделиться

Вот несколько вещей получить Вас, начал (примерно с simplest-to-most-complex, least-to-most-powerful):

http://en.wikipedia.org/wiki/Recursive_descent_parser

http://en.wikipedia.org/wiki/Top-down_parsing

http://en.wikipedia.org/wiki/LL_parser

http://effbot.org/zone/simple-top-down-parsing.htm

http://en.wikipedia.org/wiki/Bottom-up_parsing

http://en.wikipedia.org/wiki/LR_parser

http://en.wikipedia.org/wiki/GLR_parser

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

Это не книга, которую я использовал, но это довольно хорошо: Принципы Дизайна .

Компилятора, Надо надеяться, этого достаточно для запущения Вас:)

5
ответ дан Tony Arkles 7 November 2019 в 16:44
поделиться

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

5
ответ дан nilamo 7 November 2019 в 16:44
поделиться

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

, Если Вы хотите все питание полного решения для lexing/parsing, , ANTLR может генерировать Python также.

4
ответ дан PW. 7 November 2019 в 16:44
поделиться

Я предлагаю http://www.canonware.com/Parsing/ , так как это - чистый Python, и Вы не должны изучать грамматику, но это широко не используется и имеет сравнительно мало документации. Тяжеловес является ANTLR и PyParsing. ANTLR может генерировать Java и синтаксические анализаторы C++ также и ходоков AST, но необходимо будет учиться что суммы новому языку.

3
ответ дан nimish 7 November 2019 в 16:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: