Как стать автором
Обновить
132
0
Александр Смаль @avsmal

преподаватель

Отправить сообщение
Буст очень разнообразный: есть сложные вещи вроде spirit и bgl, а есть совсем простые вроде optional и scoped_ptr.
must have не достаточно! must read!
Ну там и грамматика, вероятно, сложнее. И пример намного сильно оторванный от жизни. Вероятно из языков в качестве примера больше бы подошло какое-нибудь подмножество SQL.
Сериализация немного другая тема — там важна поддержка параметров разных типов. Если же ограничиться строчными параметрами, то на C++ это бы выглядело так:

void serialize( std::ostream & os, IniData const & data )
{
  for ( IniData::const_iterator it = data.begin(); it != data.end(); ++it )
  {
   os << '[' << it->first << "]\n";
   for ( Entries::const_iterator p = it->second.begin(); p != it->second.end(); ++p )
    os << p->first << '=' << p->second << '\n';
 }
}


На Haskell (правда тут на стандартный вывод, но можно и на файл переделать)
printIni sl = mapM_ printSection sl
 where
  printSection (n, el) = putStrLn ( "[" ++ n ++ "]" ) >> mapM_ printEntry el
  printEntry (k, v) = putStr k >> putStr "=" >> putStrLn v

Да, я не ограничиваю идентификатор. Я встречал названия секций вроде .default или #config.
А вы знаете аналог Boost Spirit на ПЛ/0 (хотя, честно говоря, я слышал только про ПЛ/1)?

Это не чисто академический пример. На его основе этой статьи можно, к примеру, написать парсер для текстовых запросов к своей информационной системе. Или свой DSL. Или ещё что-то.

Да, кстати, пресловутые конфиги таким образом тоже можно парсить (не обязательно ini файлы) =)
Есть классическая книжка Введение в теорию автоматов, языков и вычислений (Хопкрофт, Мотвани, Ульман). Дальше, если заинтересуетесь разбором грамматик, почитайте книжку с драконом.
Статья просто показывает как при помощи boost spirit на основе некоторой грамматики написать парсер. Это не обязательно парсер конфигов — ini файлы просто достаточно простой пример.
Это надо для того, чтобы на основе этой грамматики написать парсер (как и показано в соответствующих статьях).
Никто не спорит с тем, что сама грамматика ничего не делает. Вопрос в том, что грамматику задавать естественнее, чем описывать некоторый автомат. И в том, что обычные средства для разбора работают с грамматиками.
Конечные автоматы по определению «справляются» за один проход =)
Я согласен, что автомат тут справится, но, ИМХО, описание грамматикой намного естественнее и проще. К тому же для таких описаний есть готовые инструменты (будь это yacc или parsec).
Спасибо за критику. Идея удалять комментарии «ручками» связана с упрощением грамматики. Хотя, вероятно, это не особо изменилобы общую картину.
Ага, можно. Но надо понимать, что это можно сделать далеко не для всех КС-грамматик =)
«грамматика автоматная» = «задаёт автоматный язык»
Я просто не очень понял, что вы имеете ввиду… Может вы просто хотели сказать, что данная грамматика автоматная?
Какой автомат?
Есть у Мейрса, у Саттера, у Александреску, и у Саттера и Александреску =).
Спасибо, не знал о функциях lines/unlines.
Поправил, спасибо.
Ок. Про поинтеры у меня где-то валялся набросок. Может ещё про что-нибудь напишу.

Информация

В рейтинге
Не участвует
Откуда
Санкт-Петербург, Санкт-Петербург и область, Россия
Дата рождения
Зарегистрирован
Активность