Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Парсер на Си


Автор: oleg200095 10.7.2012, 22:48
Доброго времени суток.
Мне понадобилось написать парсер html/xml на чистом Си. Хотелось бы узнать, какие алгоритмы/теории нужно знать что бы эффективно выполнить эту работу? Заранее спасибо за ответ

Автор: boostcoder 10.7.2012, 22:49
flex/bison

Автор: math64 11.7.2012, 08:03
Есть готовые парсеры xml на чистом C - поищи в инете.
Если писать самому - да, flex/bison, но писать полный парсер это работа не для новичка.

Автор: baldina 11.7.2012, 10:56
Цитата(oleg200095 @  10.7.2012,  22:48 Найти цитируемый пост)
какие алгоритмы/теории нужно знать

синтаксический анализ

Автор: EvilsInterrupt 11.7.2012, 11:04
oleg200095, Лучше воспользуйся готовыми решениями, а так есть книга Ахо про компиляторы. Но прежде чем хоть что-то вменяемое напишешь пройдет достаточно много времени, имеет ли смысл?

Автор: xvr 11.7.2012, 12:22
Цитата(oleg200095 @  10.7.2012,  22:48 Найти цитируемый пост)
Хотелось бы узнать, какие алгоритмы/теории нужно знать что бы эффективно выполнить эту работу?

Вам шашечки, или ехать? Если второе, то возьмите libxml2 и не парьтесь
А если первое, то для xml теории синтаксического анализа будут чересчур - у него грамматика простая как сапог  smile 

Автор: oleg200095 11.7.2012, 14:38
Мне и шашечки и ехать, с одной стороны его нужно использовать в проекте, а с другой хотелось бы и научиться. 

Автор: baldina 11.7.2012, 17:39
Цитата(xvr @  11.7.2012,  12:22 Найти цитируемый пост)
 для xml теории синтаксического анализа будут чересчур - у него грамматика простая как сапог

да, его http://www.opennet.ru/docs/RUS/XML/ всего-то 1000 с небольшим строк.

Добавлено через 3 минуты и 8 секунд
а http://mailman.ic.ac.uk/pipermail/xml-dev/1997-March/000143.html порядка 200 занимает, с пустыми строками.

Добавлено через 5 минут и 59 секунд
Цитата(oleg200095 @  11.7.2012,  14:38 Найти цитируемый пост)
 с одной стороны его нужно использовать в проекте, а с другой хотелось бы и научиться

разделите это на две задачи smile 
научиться цель благородная, но сильно затормозит Ваш проект. так что почитайте про лексический и синтаксический анализ вобщем, поймите как устроен построитель компиляторов типа flex/bison, а для проекта возьмите специализированную библиотеку

Автор: xvr 11.7.2012, 22:12
Цитата(baldina @  11.7.2012,  17:39 Найти цитируемый пост)
да, его описание всего-то 1000 с небольшим строк.

Это не значит, что  и парсер на 1000 строк будет

Цитата(baldina @  11.7.2012,  17:39 Найти цитируемый пост)
а bnf порядка 200 занимает, с пустыми строками.

А не надо в одном bnf смешивать лексику и семантику.  Да и DTD ТС видимо не нужен (я так подозреваю)  smile 

Чистый bnf на семантику там будет строк на 20 максимум. И требование к совпадению открывающих и закрывающих тегов, а так же к уникальности атрибутов вообще в bnf не выражается  smile 


Цитата(baldina @  11.7.2012,  17:39 Найти цитируемый пост)
так что почитайте про лексический и синтаксический анализ вобщем, поймите как устроен построитель компиляторов типа flex/bison, а для проекта возьмите специализированную библиотеку

Это всегда полезно, но для парсинга XML это из пушки по воробьям (хотя flex можно задействовать)

Автор: magesi 11.7.2012, 22:22
oleg200095, да не надо всякие Бауэра и Замельзона или Рутисхаузера учить по разбору выражений, ты сразу генетические алгоритмы бери  smile а то всякой 50летней давности классики насоветуют, которая неспособна к самоанализу и измененеиям ( полный полиморфизм, включащий в себя другие морфичные структуры )  smile это для 1-ой части "для себя", которую тебе советуют, а для 2-ой, как сказали полно всего готового, то мне больше XmlLite 

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