Уведомления

Группа в Telegram: @pythonsu

#1 Март 27, 2012 23:52:08

aliens
От:
Зарегистрирован: 2007-08-14
Сообщения: 135
Репутация: +  1  -
Профиль   Отправить e-mail  

использование лексического анализатора для markdown?

Здравствуйте

Решился написать парсер markdown подобного языка разметки (точнее переписать старую версию), решил взять для этого лесический анализатор (вроде так правильно) вместо регулярок.
Нашел pyparsing и LEPL, выбрал второй. На протяжении двух вечеров читал доку, но не понял, как сделать парсер большого текста, а не только строк особового вида.

Например, вообще непонятно, как в 1 строке вытащить все совпадения, для примера:
в строке

"example *text* with *strong*
вытащить все блоки *…*

Стоит ли заморачиваться или на регулярках разбор не структурированного текста проще? (текст - сообщения в бложеке)



Офлайн

#2 Март 28, 2012 11:56:52

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

использование лексического анализатора для markdown?

aliens
вытащить все блоки *…*
Это не понятно. Что должно получиться при разборе
“** *aaa*bbb* **”
Сложные парсеры нужны если вы хотите использовать рекурсивные определения, например для вложеных скобок

aliens
на регулярках разбор не структурированного текста проще?
В парсерах на уровне лексического анализа обычно и используются регулярки (см например доку по lex). Помоему оно не проще, оно просто первый и неизбежный этап синтаксического анализа.



Отредактировано doza_and (Март 28, 2012 11:59:53)

Офлайн

#3 Март 28, 2012 13:40:37

aliens
От:
Зарегистрирован: 2007-08-14
Сообщения: 135
Репутация: +  1  -
Профиль   Отправить e-mail  

использование лексического анализатора для markdown?

doza_and
Это не понятно. Что должно получиться при разборе
“** *aaa*bbb* **”
Из текста вычленить блоки *example1*, *example2* (* в markdown используется для выделения текста)

doza_and
В парсерах на уровне лексического анализа обычно и используются регулярки
Да, это я знаю (и по доки LEPL там понятно про это).

Как-бы основная проблема, как заставить (и можно ли вообще) обрабатывать любой текст и доставать блоки по определенной логике (идущие друг за другом, рекурсивные), а не только определенный DSL, каждая стркоа которого, соответствует полностью “матчеру”



Офлайн

#4 Март 28, 2012 21:52:15

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

использование лексического анализатора для markdown?

А вы http://code.google.com/p/python-markdown2/ смотрели? Я не очень понимаю в чем проблема. У вас текст очень большой и не лезет в память? Мне это трудно представить.

aliens
доставать блоки по определенной логике
. Т.е. проблема в том что долго идет разбор и вы хотите парсить не все, например делать поиск шаблона? На счет LEPL не знаю (похоже там этого нет) а в pyparsing реализован поиск в строке. По моему опыту регулярки обеспечивают быстродействие на порядки больше чем парсеры на интерпретируемых языках.



Отредактировано doza_and (Март 28, 2012 21:54:33)

Офлайн

#5 Март 29, 2012 13:31:46

aliens
От:
Зарегистрирован: 2007-08-14
Сообщения: 135
Репутация: +  1  -
Профиль   Отправить e-mail  

использование лексического анализатора для markdown?

doza_and
А вы http://code.google.com/p/python-markdown2/ смотрели? Я не очень понимаю в чем проблема. У вас текст очень большой и не лезет в память? Мне это трудно представить
Да, эту реализацию я знаю, она, к сожалению, мало кастомизируется, к тому же хочется свое.
Проблемы как-бы нет, просто хотел использовать лексический анализатор для этого, но не понимаю, реально ли на такой вещи сделать.

Думаю можно закрыть тему :)
Буду брать регулярки для своей задачи



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version