![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
setq |
|
|||
Unregistered |
написал на питоне лексический анализатор. (как говорится "ещё один"). сейчас буду на его примере учиться создавать "устанавливающийся пакет".
оставляю здесь для интересующихся. (советы всегда интересны) Это сообщение отредактировал(а) setq - 28.12.2005, 03:16 Присоединённый файл ( Кол-во скачиваний: 44 ) ![]() |
|||
|
||||
bialix |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 28 Регистрация: 4.7.2005 Репутация: нет Всего: нет |
а что такое "устанавливающийся пакет"?
|
|||
|
||||
setq |
|
|||
Unregistered |
ну. который грамотно прописывает себя в site-packages/ . в общем, на самом деле хотелось бы познакомиться с пакетом distutils (кажется так называется).
|
|||
|
||||
cardinal |
|
|||
![]() Инженер ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6003 Регистрация: 26.3.2002 Где: Германия Репутация: нет Всего: 99 |
А что без установки работать не будет? И где .exe в архиве? Хотел запустить, а запускать нечего...
![]() -------------------- Немецкая оппозиция потребовала упростить натурализацию иммигрантов В моем блоге: Разные истории из жизни в Германии "Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино". А. и Б. Стругацкие |
|||
|
||||
setq |
|
|||
Unregistered |
анализатор представляет из себя модуль на языке Python (scan.py)
![]() .exe пока нет |
|||
|
||||
svg |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 53 Регистрация: 13.4.2005 Репутация: 1 Всего: 18 |
Спасибо, посмотрел, только это несколько не то, что обычно понимают под
лексическим анализом, хотя в его основе обычно тоже лежит регулярная грамматика. С помощью "чистых" регулярных выражений можно сканировать только весьма простые грамматики, да и слишком медленно это. Ежели интересуетесь вопросом, то лучше всего найдите "dragon book" Ахо, она есть в продаже. Кнут тоже ничего, но Ахо гораздо понятнее и конкретнее (для меня по крайней мере). Google можно попытать на предмет "deterministic finite automata" и "nondeterministic finite automata". Вторые проще кодировать и легче генерировать, первые - на несколько порядков быстрее. Есть и нерегулярные лексеры (в ANTLR, например), кодируются как LALR парсеры, но я такие никогда сам не программировал. |
|||
|
||||
Sardar |
|
|||
![]() Бегун ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6986 Регистрация: 19.4.2002 Где: Нидерланды, Groni ngen Репутация: 2 Всего: 317 |
Питон - переполнен магией
![]() Из недостатков вижу, что требуеться постоянно подгружать модуль с классами-правилами, хотя это не проблема. Более серьёзная проблема в подходе к лексическому анализу, у тебя это список регов, что один за другим применяються к строке. Во первых постоянное сканирование подстроки это не эффективно, во вторых нет проверки на ошибки регов. Представь что вышестоящий рег полностью включает в себя диапазон строк нижестоящего рега, тем самым нижестоящий рег никогда не будет найден. Это конечно проблема многих лексеров (и компиляторов формальных грамматик вообще), но они строят общий ДКА, в котором такая бага всё равно может быть найдена и компилер ругнёться. Иначе можно часами думать почему же лексема не приходит, а виной тому опечатка ![]() Это не фича лексеров вообще, но хорошая спосбность flex'а (потомок lex'а, лексер на C) держать состояния. Состояние можно представить как некий механизм пространств имён. Каждый рег может находиться в одном или нескольких пространствах имён. На каждом шаге текущим может быть только одно пространство имён. Таким образом доступное множество регов включает в себя только те реги, что находяться в текущем пространстве имён, сменив состояние (=сменив пространство имён) мы получаем возможно уже другие реги. Это очень удобно, например для PHP выделять два режима строк: 'одинарные кaвычки' - где пермеенные не парсяться и "двойные кaвычки {$variable}" где парсяться переменные и большинство escape цепочек (\n и т.д.). Тем самым облегчаем реализацию синтаксического анализатора ![]() А вообще классная вещь, нравиться мне когда малым кодом получаeться мощный софт ![]() Сам буквально на днях написал синтаксический анализатор для SAX XML парсера. Идея в том что бы парсить большие XML получая "высокоуровневые события" типа "создать ресурс", "добавить значение" и т.д., а не SAX события "открываемый тег", "закрываемый тег" и "текст". Анализатор на магазинном автомате, немного разбухший на вид (ибо строки, PHP), если интересно, выложу ![]() -------------------- Опыт - сын ошибок трудных © А. С. Пушкин Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik Оценить мои качества можно тут. |
|||
|
||||
setq |
|
|||
Unregistered |
выкладывай %)
|
|||
|
||||
Sardar |
|
|||
![]() Бегун ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6986 Регистрация: 19.4.2002 Где: Нидерланды, Groni ngen Репутация: 2 Всего: 317 |
-------------------- Опыт - сын ошибок трудных © А. С. Пушкин Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik Оценить мои качества можно тут. |
|||
|
||||
bialix |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 28 Регистрация: 4.7.2005 Репутация: нет Всего: нет |
Ребяты. Все украдено до нас.
Смотрите и выбирайте на любой вкус: http://www.nedbatchelder.com/text/python-parsers.html |
|||
|
||||
![]() ![]() ![]() |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Python: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |