Comments 25
А еще можно построить автомат для этой грамматики.
0
Какой автомат?
0
Я просто не очень понял, что вы имеете ввиду… Может вы просто хотели сказать, что данная грамматика автоматная?
0
Действительно автомат в данном случае будет эффективнее и проще, поскольку рекурсивный нисходящий парсер используется для разбора составных выражений, которые в ini файлах просто не предусмотрены.
Автомат справится с задачей в 1 проход.
Автомат справится с задачей в 1 проход.
+1
Конечные автоматы по определению «справляются» за один проход =)
Я согласен, что автомат тут справится, но, ИМХО, описание грамматикой намного естественнее и проще. К тому же для таких описаний есть готовые инструменты (будь это yacc или parsec).
Я согласен, что автомат тут справится, но, ИМХО, описание грамматикой намного естественнее и проще. К тому же для таких описаний есть готовые инструменты (будь это yacc или parsec).
-1
Описывая грамматику вы задаете автомат, т.к. есть известные алгоритмы построения по классам грамматик детерминированные автоматы. Грамматика это формализм и сама по себе разбор не делает — разбор делает сгенерированный по грамматике автомат.
+1
логика непонятна :) если Вы пишете BNF, то логичней было бы сравнивать lex/yacc с alex/happy. зачем описывать BNF для реализации с помощью комбинаторных парсеров?
хотя сама идея серии подобных статей интересна, да
хотя сама идея серии подобных статей интересна, да
0
А у вас случаем статьи, посвященной алгоритму пузырьковой сортировки, нет? Всему хабрасообществу было бы очень интересно и познавательно узнать и оценить все тонкости этого процесса.
-7
С формой БНФ сталкивался лет пять назад, но вот это:
ident = identChar, {identChar}.
identChar = letter | digit…
насторожило.
Если не ошибаюсь, идентификатор в данном случае может начинаться с любого знака, а не только с буквы?
ident = identChar, {identChar}.
identChar = letter | digit…
насторожило.
Если не ошибаюсь, идентификатор в данном случае может начинаться с любого знака, а не только с буквы?
0
Можете посоветовать какой-нибудь материал по грамматикам, для ознакомления?
0
Есть классическая книжка Введение в теорию автоматов, языков и вычислений (Хопкрофт, Мотвани, Ульман). Дальше, если заинтересуетесь разбором грамматик, почитайте книжку с драконом.
+1
ням :)
еще бы могли дальше развить эту тему — сериализатор ini-файлов
еще бы могли дальше развить эту тему — сериализатор ini-файлов
0
Сериализация немного другая тема — там важна поддержка параметров разных типов. Если же ограничиться строчными параметрами, то на C++ это бы выглядело так:
На Haskell (правда тут на стандартный вывод, но можно и на файл переделать)
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
0
Only those users with full accounts are able to leave comments. Log in, please.
Создаём парсер для ini-файлов. Теория