|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Ноя 12, 2004 22:15:04 Есть у мя проект на жабе... (Quantum, кстати, спасибо за идею с архитектурой!) Дык вот, есть текстовый файл примерно такого вида:
%objects
{
BIND-Condition(1)
BIND-loc-siteA(1)
BIND-loc-siteB(1)
}
%common=5
{
Author (vasya, pupkin, organization|ATP|Toronto|zzz|Canada|some street|me@here.com|123-456-789|321-654-987|M2Z 45F)
Author (fedya, NULL, NULL)
BIND_pub_object (1, 12457)
BIND_pub_object (2, 4576)
BIND_Interaction_division(metazoa)
}
%keywords = 23
{
BINDObjectTypeId
Org_ref
BINDObject_short_label
BINDObject_other_names
BINDObject_descr
BIND_other_db
BIND_loc_site
BIND_loc_site_source
BIND_id_Geninfo_id
BINDObjectTypeId
BINDObject_short_label
BINDObject_other_names
BINDObject_descr
BIND_other_db
BIND_loc_site
BIND_loc_site_source
BIND_id_Geninfo_id
BIND_condition_system
BIND_condition_general
BIND_condition_descr
BINDdescr_simple_descr
BIND_condition_bait_condition
BIND_condition_source
}
(A)protein (A)280|Xanthobacter autotrophicus (A)short_label (A)aaa|bbb (A)some shit (A)EntrezGeneID|5089|NULL (A)(0)58-169|NULL (A)(0)2|12457 (A)4545 6787 (B)protein (B)short_label (B)aaa|bbb (B)some shit (B)EntrezGeneID|5089|NULL (B)(0)58-169|NULL (B)(0)2|12457 (B)4545 6787 (0)1 (0)0 (0)some desc some description of the interaction (0)0 (0)2|4576
Задача. Пропарсить такой файл. После последней закрывающей фигурной скобки идут данные - таких строк может быть от 1 до нескольких десятков тысяч. Парсер обрабатывает txt файл и, юзая чудовищно огромную API, выдает XML-файл согласно некоторой спецификации. На данный момент я парсаю файл в лоб. При помощи регулярок, построчной обработкой и т.п. Основной минус такого подхода - это то, что какая-нибудь чукча просто постоянно вставит где-нибудь лишний пробельчик, символ табуляции, левую запятую и все грохается к херам. И мне приходится то регулярки править, то еще чего-нибудь в этом же роде. Надоело! Есть же компиляторы. Есть же у них синтаксические анализаторы. И вполне успешно справляются с тупыми ошибками. Во всяком случае, лишней запятой или пробелом их не прибить ;) Хочу что-то такое подобное. Просто в голове пока каша, может быть, ваши ответы ее смогут упорядочить... |
|
|
Дата: Ноя 12, 2004 22:16:17 Тьфу, не синтаксические, а лексические. Мне нужно что-то вроде лексического анализатора... Типа какой-нибудь такой парсер + внутренняя таблица символов... Наверное... Мнения? |
|
|
Дата: Ноя 12, 2004 23:26:31 volodya Привет! Неужели регулярные выражения не могут отсеить лишний пробельчик, символ табуляции, левую запятую? |
|
|
Дата: Ноя 12, 2004 23:31:58 Могут, но ты представляешь с какой тщательностью их приходится выбирать? Я уже очумел их переделывать! |
|
|
Дата: Ноя 12, 2004 23:32:44 душа чего-то такого эдакого просит :) |
|
|
Дата: Ноя 12, 2004 23:36:53 · Поправил: Sten volodya imho, гну-шный flex создан специально для твоего случая. :)) А если скрестить его с bison для грамматического анализа тогда у-у.. будет сообще супер. :) P.S. упс. Проглядел что проект на жабе. Тогда не знаю, быть может написать парзер все-таки на C (flex+bison)? :) |
|
|
Дата: Ноя 12, 2004 23:58:48 Да нет, вот это уже будет чересчур :) Парсер на жабе, а не на С. Пардон :) Что-то свое написать с нуля... Ладно, на выходных почитаю драконовскую книжку и чем-нибудь своим с нуля разрожусь за недельку... |
|
|
Дата: Ноя 13, 2004 04:08:15 volodya Драконовская книжка помогает понять принцип работы старых компилеров, но на базе голой теории разродиться чем-нибудь своим... эт будет очень сложно, IMHO. Кстати, про С vs. Java, не забывай что жаба имеет JNI, т.е. интерфейс для нативного кода. |
|
|
Дата: Ноя 13, 2004 12:34:25 · Поправил: Valery угу. на что-то похожее наткнулся недавно. представь себе файл из неск тыс ПОЛУвыровненных (по шаблону) сиквенсов. Парсятся без проблем. И вдруг огромный кусок файла совсем битый - не только выравнивание полностью поехало но и разделители нестандартные. Т.е. не то что бы битый - просто первый кусок сгенерил такой же идиот, но это был ДРУГОЙ идиот с другими условностями. Я офигел и перетащил этот кусок в sql, запросами разобрал 100 случаев совсем офигел и тогда скормил все сям - просто уничтожил нафиг все полувыравнивание (шаблонное) и ровнял уже заново все. |
|
|
Дата: Ноя 14, 2004 06:58:43 До сих пор непонятно, что нужно? -- игнорировать мусор -- обнаруживать и тыкать юзера носом в мусор -- преобразовывать кавычку в "e; и т. п. |
|
|
Дата: Ноя 14, 2004 19:09:38 Володя, у нас сейчас идет курс "теория языков программирования". На лабах мы как раз анализаторы делаем. Есть сносная теория по вопросу - лекции в электронном виде. Мне удалось разобраться без посещения лекций вообще, так что думаю они могут тебе помочь. Это, конечно, если решишь с нуля писать. Если заинтересовал, могу выслать. Или можно в онлайне увидеть тут: ermak.cs.nstu.ru/trans/ |
|
|
Дата: Ноя 14, 2004 19:11:34 captain cobalt Это не существенно. Это семантика, а интересует в первую очередь лексика, ведь так? |
|
|
Дата: Ноя 14, 2004 19:15:28 Есть куча или несколько ;-) книг(лекций ввиде книг) по написанию компиляторов, там рассматривается теория разработки лексических анализаторов. |
|
|
Дата: Ноя 14, 2004 19:32:07 n0p> Это семантика, а интересует в первую очередь лексика, ведь так? В том то и дело, что проблема как следует не поставлена. Возможно, лексическим анализатором тут не отделаться. ;) |
|
|
Дата: Ноя 14, 2004 19:48:34 captain cobalt Я не пытаюсь ставить проблему. И не выдаю ТЗ. Это мой проект, который я делаю сам. Просто, читая посты, я пытаюсь собрать мысли в кучу. Вот и все :) Теперь немножко более детально. Секции "%keywords" и "%common" содержат имена хендлеров, которые подключаются через reflection. Порядок расположения хендлеров в "%keywords" определяет расположение элементов собственно тела файла (строк с данными, которых может быть от 1 до десятков тысяч). Т.о. от анализатора файла мне требуется следующее: 1) Получить имя хендлера без пробелов и любого другого мусора. 2) В случае секций "%common" и "%objects" получить имя хендлера + данные, несмотря на возможные лишние пробелы и т.п. 3) При парсе собственно тела файла (не заголовка) лишние табы должны игнорироваться. 4) Секции "%common", "%objects", "%keywords" могут следовать в произвольном порядке 5) Если файл где-то сформирован неверно - надо уведомить юзверя об ошибках Примерно так :) n0p Хорошо. Давай. Мыло знаешь. Спасибо. |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.098 |