![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| setq |
|
|||
|
Unregistered |
написал на питоне лексический анализатор. (как говорится "ещё один"). сейчас буду на его примере учиться создавать "устанавливающийся пакет".
оставляю здесь для интересующихся. (советы всегда интересны) Это сообщение отредактировал(а) setq - 28.12.2005, 03:16 Присоединённый файл ( Кол-во скачиваний: 44 )
scanner.rar 2,97 Kb |
|||
|
||||
| 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 |
|||
|
||||
![]()
|
| 1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Python: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |