| PMG https://www.forum.pmg.org.ru/ |
|
| Написание Parser'а(разборщика) конфигураций https://www.forum.pmg.org.ru/viewtopic.php?f=4&t=171 |
Страница 1 из 1 |
| Автор: | eNrix [ 05 дек 2005 12:49 ] |
| Заголовок сообщения: | Написание Parser'а(разборщика) конфигураций |
Помогите Please написать самый оптимальный Parser для разбора файла с параметрами окна и клавишами. |
|
| Автор: | ypp [ 05 дек 2005 13:46 ] |
| Заголовок сообщения: | |
Вот стандарные способы: 1) Написать парсер с нуля, ручками. Долго, трудно, да и не очень-то и нужно. 2) Использовать программу типа Yacc. Здесь нужно будет только спец. образом описать синтаксис языка, который нужно парсить (обычно в форме Бекуса-Наура). Потом скармливаешь описание етой программе и... вуаля, у тебя есть готовый парсер. 3) На данный момент у меня именно так: в состав Boost (http://www.boost.org) входит превосходная библиотека для создания парсеров - Spirit. Здесь систаксис языка описывается в форме EBNF (Extended Backus Normal Form) c использований конструкций C++. Единственное - требуется достаточно хорошее знание С++ и, особенно, темплейтов. 4) Есть такой паттерн проектирования - Active File (или что-то в етом роде). Суть в следующем: на спец. языке пишеться файл конфигурации, а потом он не парсится, а просто запускается на выполнение (т.е. интерпретируется). Обычно таковым языком берут Lua или Python. (В будущем собираюсь использовать именно етот способ). Как говорится, выбор за Вами.
|
|
| Автор: | MagicWolf [ 05 дек 2005 15:02 ] |
| Заголовок сообщения: | |
Если в качестве файла cfg использовать xml, то есть либы для его разбора. В win есть функции разбора ini-файлов. Можно написать простейшую функцию разбора cdf файлов, если например, в нем используются конструкции типа PARAM1=10.0. Для этого всего лишь надо составить список лексем (таких как PARAM1=) и заставить функцию их искать вначале каждой строки, а потом просто вызыват функцию обработки этих лексем. Но в любом случае xml многие рекомендуют. |
|
| Автор: | fourfold [ 05 дек 2005 15:32 ] |
| Заголовок сообщения: | |
2 ypp: Что за паттерн такой - Цитата: Active File (или что-то в етом роде) ?
всем: ИМХО, если писать парсер ручками: - замучаешь ручки
- напишешь компактный и быстрый парсер (если грамотно писать) При использовании Spirit: - просто написать парсер - большой объем исполнимого модуля - долго компилится - ИМХО, медленный парсер получится PS: xml - хороший формат для конфига... |
|
| Автор: | MagicWolf [ 05 дек 2005 17:02 ] |
| Заголовок сообщения: | |
Lua действительно часто используют для сложных cfg файлов. Собственно говоря это уже и не cfg файлы, а часть кода. |
|
| Автор: | ypp [ 06 дек 2005 18:57 ] |
| Заголовок сообщения: | |
fourfold писал(а): 2 ypp: Что за паттерн такой - Цитата: Active File (или что-то в етом роде) ?А Google для чего сделан? fourfold писал(а): ИМХО, если писать парсер ручками: - замучаешь ручки ![]() - напишешь компактный и быстрый парсер (если грамотно писать) + несколько недель/месяцев/лет работы fourfold писал(а): При использовании Spirit: - просто написать парсер - большой объем исполнимого модуля А ты проверял? Получается около 50-100 Кб. Много? fourfold писал(а): - долго компилится Ага, 1 сек. Еще есть пример (из Spirit FAQ) парсера языка С++, который компилилися 2 часа(!), но это из-за _неправильного_ использования библиотеки. fourfold писал(а): - ИМХО, медленный парсер получится А что есть практические доказательства? Результаты тестов? Почитай что умные люди пишут об этот библиотеке и темплейтах вообще. Тогда и ответов дурацких меньше будет.fourfold писал(а): PS:
xml - хороший формат для конфига... При умоминаниях об XML вспоминается очень правильная фраза (видел на сайте Борескова): XML is a great step in no direction! Переводить, надеюсь, не нужно. |
|
| Автор: | eNrix [ 06 дек 2005 19:37 ] |
| Заголовок сообщения: | |
Урр, может простой парсер писать ? Сколько нужно времени, что бы описать синтаксис языка в Spirit ? Скачал boost 1.33.exe щас посмотрю. |
|
| Автор: | fourfold [ 06 дек 2005 20:56 ] |
| Заголовок сообщения: | |
ypp, это всё ИМХО
Зачем юзать Спирит, если человеку нужно прочитать с конфига параметры окна и номера клавиш? Тут вообще можно бинарный формат конфига использовать
PS: Я не гоню на Спирит, метапрограммирование мне даже интересно. Может просто еще не дорос до таких высот и потому так считаю. Вот раньше я, например STL презирал
|
|
| Автор: | eNrix [ 06 дек 2005 23:24 ] |
| Заголовок сообщения: | |
fourfold я тоже так думаю, а Спирит думаю в будущем можно использовать для скриптига различного оружия, менюшек. Мне просто наверное можно считать файл в строку, удалить все пробелы считывать разные символы до таких символов как "{" (начало) или "=" (параметру присваивание) или ";" (значение для присваивания). |
|
| Автор: | MagicWolf [ 07 дек 2005 10:11 ] |
| Заголовок сообщения: | |
XML is a great step in no direction! - странно, xml - это простой текстовый формат, для описания данных в иерархическом виде. Огромное количество разработчиков используют именно его, например, Visual C++ там файлы *.vcproj тоже xml, за что им огромное спасибо, это несколько раз меня выручало в безисходных ситуациях. Мне кажется не стоит убеждать кого-то что xml - это хорошо, потому что очевидно ...
Парсер о котором спрашивает eNrix написать за пару дней - нет проблем. Да и его не надо писать, можно использовать функции Win API - GetPrivateProfileString, GetPrivateProfileInt. Еще лучше работать с РЕЕСТРОМ!!! Если вы программируете в Win, надо и жить по законам Win. Хотя желаемая переносимость ...
И пожалуйста не ругайтесь! Вы же умные люди! Если такой простой вопрос вызывает такие слова как "дурак", то как же работать в команде, решать что-то сложное, быстро и в срок?! Все мы люди, надо беречь друг друга, если не нравиться замечание лучше на него отвечать, не стоит тратить на это свое время и силы. Высказал свое мнение, пускай за это спасибо скажут. Не поняли, не разобрались - это их проблема. Кстати, что интересно ypp и fourfold пишут с одного IP. |
|
| Автор: | ypp [ 07 дек 2005 15:14 ] |
| Заголовок сообщения: | |
MagicWolf писал(а): Еще лучше работать с РЕЕСТРОМ!!! Если вы программируете в Win, надо и жить по законам Win. Хотя желаемая переносимость ...Довольно спорное утвержение. Реестр... он сегодня есть, а завтра может и не быть. Конфиг файлы для того и делаются в текстовом формате чтоб их править/дебажить ручками легче было. MagicWolf писал(а): И пожалуйста не ругайтесь! Вы же умные люди! Если такой простой вопрос вызывает такие слова как "дурак", то как же работать в команде, решать что-то сложное, быстро и в срок?! Все мы люди, надо беречь друг друга, если не нравиться замечание лучше на него отвечать, не стоит тратить на это свое время и силы. Высказал свое мнение, пускай за это спасибо скажут. Не поняли, не разобрались - это их проблема. Согласен, немного погарячился. Просто нелюблю когда люди говорят о том, о чем не знают. А завтра зайдет на форум очередной новичок и, не разобравшись, примет все это за чистую правду. И кто тогда пострадает? MagicWolf писал(а): Кстати, что интересно ypp и fourfold пишут с одного IP.
Мы из одного универа в Инет выходим. |
|
| Автор: | eNrix [ 07 дек 2005 19:27 ] |
| Заголовок сообщения: | |
Интересный формат xml хотелось бы научиться с ним работать. Какие сайты или книги можете предложить для скачивания. Получается, что xml можно использовать для описания мешей? - хотя пожалуй я бы лучше использовал уже изветсные форматы md2, md3, mdl и еще быть может .3ds. Как мне показалось этих форматов хватит с головой для всего, что может потребоваться от моделей с анимацией в игре, а вообще лучше создать свой формат(посути самый простой в котором все хранилось в обычном виде или бинарном) и во время загрузки просто переконвектировать(выделять память для структур вершин и остального, заполнять их). Вот такие вот дела.
|
|
| Автор: | MagicWolf [ 08 дек 2005 11:59 ] |
| Заголовок сообщения: | |
xml это не формат, это мне кажется это язык для описания данных и хранения их в одном файле. Меши в нем никто не хранит, но ничто не мешает. Библиотек для работы с xml много, всех не упомнить. Есть что-то вроде TinyXML, вот в Irrlicht есть два класса для работы с xml. |
|
| Автор: | ypp [ 13 фев 2006 22:10 ] |
| Заголовок сообщения: | |
Цитата: Зачем юзать Спирит, если человеку нужно прочитать с конфига параметры окна и номера клавиш? Тут вообще можно бинарный формат конфига использовать
![]() Тогда можно Boost::program_options использовать. Она как раз для этого и придумана
|
|
| Страница 1 из 1 | Часовой пояс: UTC + 3 часа [ Летнее время ] |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|