После неудачной попытки реализации динамического парсера, а именно очень медленный был, да и других проблем хватало. Написал генератор парсера, который на выход дает с++ код самого парсера. Пока-что там можно делать только след., пишем EBNF грамматику, генерируем парсер, затем запускаем и даем парсеру входящий текст(в sample.cc есть пример), далее он пройдется по входящему тексту и скажет что все "ок" или скажет на какой строчке входящего текста его вынесло... В ближайшее время планирую добавить токены(привет boost::regex ). Также буду переходить на шаблоны(а именно итераторы), чтобы можно было использовать не только std::string, но и допустим QString или еще что-нибуть поддерживающее итераторы. Буду очень благодарен если найдутся желающие протестировать генератор на наличии ошибок и/или его некорректной работы. Как самому кажется вроде и так все залатал, но как всегда что-нибудь обязательно найдется. Да и ещё, генератор генерирует доп. правила которые на самом деле далеко не всегда нужны, из-за этого генерируемый код может казаться слишком большим, но с этим я уже борюсь и надеюсь что скоро разберусь. =] Как я уже писал в названии темы это только пре-альфа, соответственно во многих местах код написан по принципу "главное что работает" . Скоро будет просто альфа, а потом и уже бета - с человеческим кодом и нормальной документацией(которой пока к сожалению нету). исходник http://www.sendspace.com/file/zi4yhe
Хорошая новость, смог избавиться от генерации лишних правил(они будут генерироваться, но только там где это действительно необходимо), так-что теперь генерируемый код намного компактней, соответственно производительность может на капельку увеличится. Также в процессе токены, думаю что к вечеру доделаю.
Вот и обновление, версия 0.0.1 Добавлена возможность использовать токены, в "grammar.txt" есть пример. Улучшен алгоритм генерации, как я уже выше писал , ну и по мелочам кое где поправил, убрал лишнее и.т.д. исходники v0.0.1 http://www.sendspace.com/file/igeuyj
Стесняюсь спросить, и зачем он нужен? если я правильно понимаю он генерирует код синтаксического анализатора но зачем изобретать велосипед, когда есть проверенный временем bison в общем где может понадобиться этот генератор?
да, верно, только у меня не конечный автомат, но думаю в ближайшее время начну переделывать ну это понятно что я никогда не доберусь до уровня и близкого к bison/antlr... в принципе и не собираюсь =] так чисто попрактиковаться + вдруг кому-нибуть понадобится где нужно парсить там он может и понадобится, будь то скрипт. язык или ещё что-нибудь з.ы. я никого не заставляю им пользоваться =] з.ы.ы на подходе так называемые "semantic actions"