PMG

Форумы по созданию игр
Текущее время: 23 апр 2024 12:07

Часовой пояс: UTC + 3 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 14 ] 
Автор Сообщение
 Заголовок сообщения: Написание Parser'а(разборщика) конфигураций
СообщениеДобавлено: 05 дек 2005 12:49 
Не в сети
Опытный
Аватара пользователя

Зарегистрирован: 11 дек 2004 22:33
Сообщения: 112
Откуда: Ханты-Мансийск
Помогите Please написать самый оптимальный Parser для разбора файла с параметрами окна и клавишами.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 05 дек 2005 13:46 
Не в сети
Опытный
Аватара пользователя

Зарегистрирован: 13 ноя 2004 13:09
Сообщения: 113
Вот стандарные способы:
1) Написать парсер с нуля, ручками. Долго, трудно, да и не очень-то и нужно.
2) Использовать программу типа Yacc. Здесь нужно будет только спец. образом описать синтаксис языка, который нужно парсить (обычно в форме Бекуса-Наура). Потом скармливаешь описание етой программе и... вуаля, у тебя есть готовый парсер.
3) На данный момент у меня именно так: в состав Boost (http://www.boost.org) входит превосходная библиотека для создания парсеров - Spirit. Здесь систаксис языка описывается в форме EBNF (Extended Backus Normal Form) c использований конструкций C++. Единственное - требуется достаточно хорошее знание С++ и, особенно, темплейтов.
4) Есть такой паттерн проектирования - Active File (или что-то в етом роде). Суть в следующем: на спец. языке пишеться файл конфигурации, а потом он не парсится, а просто запускается на выполнение (т.е. интерпретируется). Обычно таковым языком берут Lua или Python. (В будущем собираюсь использовать именно етот способ).

Как говорится, выбор за Вами. ;)

_________________
"I just don't give a f..." Eminem


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 05 дек 2005 15:02 
Не в сети
Гуру
Аватара пользователя

Зарегистрирован: 03 авг 2004 10:37
Сообщения: 2694
Если в качестве файла cfg использовать xml, то есть либы для его разбора. В win есть функции разбора ini-файлов. Можно написать простейшую функцию разбора cdf файлов, если например, в нем используются конструкции типа PARAM1=10.0. Для этого всего лишь надо составить список лексем (таких как PARAM1=) и заставить функцию их искать вначале каждой строки, а потом просто вызыват функцию обработки этих лексем.

Но в любом случае xml многие рекомендуют.

_________________
С уважением, Сергей


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 05 дек 2005 15:32 
Не в сети
Любитель

Зарегистрирован: 21 ноя 2005 19:12
Сообщения: 12
Откуда: rv.ua
2 ypp:
Что за паттерн такой -
Цитата:
Active File (или что-то в етом роде)
?

всем:

ИМХО, если писать парсер ручками:
- замучаешь ручки =)
- напишешь компактный и быстрый парсер (если грамотно писать)

При использовании Spirit:
- просто написать парсер
- большой объем исполнимого модуля
- долго компилится
- ИМХО, медленный парсер получится

PS:
xml - хороший формат для конфига...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 05 дек 2005 17:02 
Не в сети
Гуру
Аватара пользователя

Зарегистрирован: 03 авг 2004 10:37
Сообщения: 2694
Lua действительно часто используют для сложных cfg файлов. Собственно говоря это уже и не cfg файлы, а часть кода.

_________________
С уважением, Сергей


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 06 дек 2005 18:57 
Не в сети
Опытный
Аватара пользователя

Зарегистрирован: 13 ноя 2004 13:09
Сообщения: 113
fourfold писал(а):
2 ypp:
Что за паттерн такой -
Цитата:
Active File (или что-то в етом роде)
?


А Google для чего сделан?

fourfold писал(а):
ИМХО, если писать парсер ручками:
- замучаешь ручки =)
- напишешь компактный и быстрый парсер (если грамотно писать)


+ несколько недель/месяцев/лет работы

fourfold писал(а):
При использовании Spirit:
- просто написать парсер
- большой объем исполнимого модуля


А ты проверял? Получается около 50-100 Кб. Много?

fourfold писал(а):
- долго компилится


Ага, 1 сек. Еще есть пример (из Spirit FAQ) парсера языка С++, который компилилися 2 часа(!), но это из-за _неправильного_ использования библиотеки.

fourfold писал(а):
- ИМХО, медленный парсер получится


А что есть практические доказательства? Результаты тестов? Почитай что умные люди пишут об этот библиотеке и темплейтах вообще. :evil: Тогда и ответов дурацких меньше будет.

fourfold писал(а):
PS:
xml - хороший формат для конфига...


При умоминаниях об XML вспоминается очень правильная фраза (видел на сайте Борескова):

XML is a great step in no direction!

Переводить, надеюсь, не нужно.

_________________
"I just don't give a f..." Eminem


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 06 дек 2005 19:37 
Не в сети
Опытный
Аватара пользователя

Зарегистрирован: 11 дек 2004 22:33
Сообщения: 112
Откуда: Ханты-Мансийск
Урр, может простой парсер писать ? Сколько нужно времени, что бы описать синтаксис языка в Spirit ? Скачал boost 1.33.exe щас посмотрю.

_________________
С уважением, Владислав


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 06 дек 2005 20:56 
Не в сети
Любитель

Зарегистрирован: 21 ноя 2005 19:12
Сообщения: 12
Откуда: rv.ua
ypp, это всё ИМХО :oops:

Зачем юзать Спирит, если человеку нужно прочитать с конфига параметры окна и номера клавиш? Тут вообще можно бинарный формат конфига использовать =)

PS:
Я не гоню на Спирит, метапрограммирование мне даже интересно. Может просто еще не дорос до таких высот и потому так считаю. Вот раньше я, например STL презирал =)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 06 дек 2005 23:24 
Не в сети
Опытный
Аватара пользователя

Зарегистрирован: 11 дек 2004 22:33
Сообщения: 112
Откуда: Ханты-Мансийск
fourfold я тоже так думаю, а Спирит думаю в будущем можно использовать для скриптига различного оружия, менюшек. Мне просто наверное можно считать файл в строку, удалить все пробелы считывать разные символы до таких символов как "{" (начало) или "=" (параметру присваивание) или ";" (значение для присваивания).

_________________
С уважением, Владислав


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 07 дек 2005 10:11 
Не в сети
Гуру
Аватара пользователя

Зарегистрирован: 03 авг 2004 10:37
Сообщения: 2694
XML is a great step in no direction! - странно, xml - это простой текстовый формат, для описания данных в иерархическом виде. Огромное количество разработчиков используют именно его, например, Visual C++ там файлы *.vcproj тоже xml, за что им огромное спасибо, это несколько раз меня выручало в безисходных ситуациях. Мне кажется не стоит убеждать кого-то что xml - это хорошо, потому что очевидно ... :?

Парсер о котором спрашивает eNrix написать за пару дней - нет проблем. Да и его не надо писать, можно использовать функции Win API - GetPrivateProfileString, GetPrivateProfileInt. Еще лучше работать с РЕЕСТРОМ!!! Если вы программируете в Win, надо и жить по законам Win. Хотя желаемая переносимость :P ...

И пожалуйста не ругайтесь! Вы же умные люди! Если такой простой вопрос вызывает такие слова как "дурак", то как же работать в команде, решать что-то сложное, быстро и в срок?! Все мы люди, надо беречь друг друга, если не нравиться замечание лучше на него отвечать, не стоит тратить на это свое время и силы. Высказал свое мнение, пускай за это спасибо скажут. Не поняли, не разобрались - это их проблема.

Кстати, что интересно ypp и fourfold пишут с одного IP.

_________________
С уважением, Сергей


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 07 дек 2005 15:14 
Не в сети
Опытный
Аватара пользователя

Зарегистрирован: 13 ноя 2004 13:09
Сообщения: 113
MagicWolf писал(а):
Еще лучше работать с РЕЕСТРОМ!!! Если вы программируете в Win, надо и жить по законам Win. Хотя желаемая переносимость :P ...


Довольно спорное утвержение. Реестр... он сегодня есть, а завтра может и не быть. Конфиг файлы для того и делаются в текстовом формате чтоб их править/дебажить ручками легче было.

MagicWolf писал(а):
И пожалуйста не ругайтесь! Вы же умные люди! Если такой простой вопрос вызывает такие слова как "дурак", то как же работать в команде, решать что-то сложное, быстро и в срок?! Все мы люди, надо беречь друг друга, если не нравиться замечание лучше на него отвечать, не стоит тратить на это свое время и силы. Высказал свое мнение, пускай за это спасибо скажут. Не поняли, не разобрались - это их проблема.


Согласен, немного погарячился. Просто нелюблю когда люди говорят о том, о чем не знают. А завтра зайдет на форум очередной новичок и, не разобравшись, примет все это за чистую правду. И кто тогда пострадает?

MagicWolf писал(а):
Кстати, что интересно ypp и fourfold пишут с одного IP.


Мы из одного универа в Инет выходим.

_________________
"I just don't give a f..." Eminem


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 07 дек 2005 19:27 
Не в сети
Опытный
Аватара пользователя

Зарегистрирован: 11 дек 2004 22:33
Сообщения: 112
Откуда: Ханты-Мансийск
Интересный формат xml хотелось бы научиться с ним работать. Какие сайты или книги можете предложить для скачивания. Получается, что xml можно использовать для описания мешей? - хотя пожалуй я бы лучше использовал уже изветсные форматы md2, md3, mdl и еще быть может .3ds. Как мне показалось этих форматов хватит с головой для всего, что может потребоваться от моделей с анимацией в игре, а вообще лучше создать свой формат(посути самый простой в котором все хранилось в обычном виде или бинарном) и во время загрузки просто переконвектировать(выделять память для структур вершин и остального, заполнять их). Вот такие вот дела. 8)

_________________
С уважением, Владислав


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 08 дек 2005 11:59 
Не в сети
Гуру
Аватара пользователя

Зарегистрирован: 03 авг 2004 10:37
Сообщения: 2694
xml это не формат, это мне кажется это язык для описания данных и хранения их в одном файле. Меши в нем никто не хранит, но ничто не мешает. Библиотек для работы с xml много, всех не упомнить. Есть что-то вроде TinyXML, вот в Irrlicht есть два класса для работы с xml.

_________________
С уважением, Сергей


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 13 фев 2006 22:10 
Не в сети
Опытный
Аватара пользователя

Зарегистрирован: 13 ноя 2004 13:09
Сообщения: 113
Цитата:
Зачем юзать Спирит, если человеку нужно прочитать с конфига параметры окна и номера клавиш? Тут вообще можно бинарный формат конфига использовать =)


Тогда можно Boost::program_options использовать. Она как раз для этого и придумана ;)

_________________
"I just don't give a f..." Eminem


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 14 ] 

Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB