Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Python: Общие вопросы > написал лексический анализатор


Автор: setq 28.12.2005, 03:11
написал на питоне лексический анализатор. (как говорится "ещё один"). сейчас буду на его примере учиться создавать "устанавливающийся пакет".

оставляю здесь для интересующихся.

(советы всегда интересны)

Автор: bialix 5.1.2006, 23:11
а что такое "устанавливающийся пакет"?

Автор: setq 6.1.2006, 00:28
ну. который грамотно прописывает себя в site-packages/ . в общем, на самом деле хотелось бы познакомиться с пакетом distutils (кажется так называется).

Автор: cardinal 6.1.2006, 03:23
А что без установки работать не будет? И где .exe в архиве? Хотел запустить, а запускать нечего... smile Видать потому, что это какая-нибудь особенность Python'а.

Автор: setq 6.1.2006, 10:55
анализатор представляет из себя модуль на языке Python (scan.py) smile

.exe пока нет

Автор: svg 6.1.2006, 16:35
Спасибо, посмотрел, только это несколько не то, что обычно понимают под
лексическим анализом, хотя в его основе обычно тоже лежит регулярная
грамматика. С помощью "чистых" регулярных выражений можно сканировать
только весьма простые грамматики, да и слишком медленно это.

Ежели интересуетесь вопросом, то лучше всего найдите "dragon book" Ахо,
она есть в продаже. Кнут тоже ничего, но Ахо гораздо понятнее и конкретнее
(для меня по крайней мере).

Google можно попытать на предмет "deterministic finite automata" и
"nondeterministic finite automata".

Вторые проще кодировать и легче генерировать, первые - на несколько
порядков быстрее.

Есть и нерегулярные лексеры (в ANTLR, например), кодируются как
LALR парсеры, но я такие никогда сам не программировал.

Автор: Sardar 6.1.2006, 17:18
Питон - переполнен магией smile
Из недостатков вижу, что требуеться постоянно подгружать модуль с классами-правилами, хотя это не проблема. Более серьёзная проблема в подходе к лексическому анализу, у тебя это список регов, что один за другим применяються к строке.
Во первых постоянное сканирование подстроки это не эффективно, во вторых нет проверки на ошибки регов. Представь что вышестоящий рег полностью включает в себя диапазон строк нижестоящего рега, тем самым нижестоящий рег никогда не будет найден. Это конечно проблема многих лексеров (и компиляторов формальных грамматик вообще), но они строят общий ДКА, в котором такая бага всё равно может быть найдена и компилер ругнёться. Иначе можно часами думать почему же лексема не приходит, а виной тому опечатка smile

Это не фича лексеров вообще, но хорошая спосбность flex'а (потомок lex'а, лексер на C) держать состояния. Состояние можно представить как некий механизм пространств имён. Каждый рег может находиться в одном или нескольких пространствах имён. На каждом шаге текущим может быть только одно пространство имён. Таким образом доступное множество регов включает в себя только те реги, что находяться в текущем пространстве имён, сменив состояние (=сменив пространство имён) мы получаем возможно уже другие реги.
Это очень удобно, например для PHP выделять два режима строк: 'одинарные кaвычки' - где пермеенные не парсяться и "двойные кaвычки {$variable}" где парсяться переменные и большинство escape цепочек (\n и т.д.). Тем самым облегчаем реализацию синтаксического анализатора smile

А вообще классная вещь, нравиться мне когда малым кодом получаeться мощный софт smile

Сам буквально на днях написал синтаксический анализатор для SAX XML парсера. Идея в том что бы парсить большие XML получая "высокоуровневые события" типа "создать ресурс", "добавить значение" и т.д., а не SAX события "открываемый тег", "закрываемый тег" и "текст". Анализатор на магазинном автомате, немного разбухший на вид (ибо строки, PHP), если интересно, выложу smile

Автор: setq 6.1.2006, 20:50
выкладывай %)

Автор: Sardar 7.1.2006, 04:13
Выложил здесь: http://forum.vingrad.ru/index.php?showtopic=77053&hl= smile
Это иодин из многих парсеров.

Автор: bialix 19.1.2006, 02:47
Ребяты. Все украдено до нас.
Смотрите и выбирайте на любой вкус:
http://www.nedbatchelder.com/text/python-parsers.html

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)