[c++] Генератор парсера(Pre-Alpha).

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by rudvil, 10 Jul 2010.

  1. rudvil

    rudvil Elder - Старейшина

    Joined:
    25 Aug 2008
    Messages:
    200
    Likes Received:
    29
    Reputations:
    0
    После неудачной попытки реализации динамического парсера, а именно очень медленный был, да и других проблем хватало.

    Написал генератор парсера, который на выход дает с++ код самого парсера.
    Пока-что там можно делать только след., пишем EBNF грамматику, генерируем парсер, затем запускаем и даем парсеру входящий текст(в sample.cc есть пример), далее он пройдется по входящему тексту и скажет что все "ок" или скажет на какой строчке входящего текста его вынесло...

    В ближайшее время планирую добавить токены(привет boost::regex :)).

    Также буду переходить на шаблоны(а именно итераторы), чтобы можно было использовать не только std::string, но и допустим QString или еще что-нибуть поддерживающее итераторы.

    Буду очень благодарен если найдутся желающие протестировать генератор на наличии ошибок и/или его некорректной работы.
    Как самому кажется вроде и так все залатал, но как всегда что-нибудь обязательно найдется.

    Да и ещё, генератор генерирует доп. правила которые на самом деле далеко не всегда нужны, из-за этого генерируемый код может казаться слишком большим, но с этим я уже борюсь и надеюсь что скоро разберусь. =]

    Как я уже писал в названии темы это только пре-альфа, соответственно во многих местах код написан по принципу "главное что работает" :).

    Скоро будет просто альфа, а потом и уже бета - с человеческим кодом и нормальной документацией(которой пока к сожалению нету).

    исходник http://www.sendspace.com/file/zi4yhe
     
    #1 rudvil, 10 Jul 2010
    Last edited: 11 Jul 2010
    2 people like this.
  2. rudvil

    rudvil Elder - Старейшина

    Joined:
    25 Aug 2008
    Messages:
    200
    Likes Received:
    29
    Reputations:
    0
    Хорошая новость, смог избавиться от генерации лишних правил(они будут генерироваться, но только там где это действительно необходимо), так-что теперь генерируемый код намного компактней, соответственно производительность может на капельку увеличится.
    Также в процессе токены, думаю что к вечеру доделаю.
     
  3. rudvil

    rudvil Elder - Старейшина

    Joined:
    25 Aug 2008
    Messages:
    200
    Likes Received:
    29
    Reputations:
    0
    Вот и обновление, версия 0.0.1

    Добавлена возможность использовать токены, в "grammar.txt" есть пример.

    Улучшен алгоритм генерации, как я уже выше писал
    , ну и по мелочам кое где поправил, убрал лишнее и.т.д.

    исходники v0.0.1 http://www.sendspace.com/file/igeuyj
     
  4. Gar|k

    Gar|k Moderator

    Joined:
    20 Mar 2009
    Messages:
    1,166
    Likes Received:
    266
    Reputations:
    82
    Стесняюсь спросить, и зачем он нужен?

    если я правильно понимаю он генерирует код синтаксического анализатора
    но зачем изобретать велосипед, когда есть проверенный временем bison

    в общем где может понадобиться этот генератор?
     
    _________________________
  5. rudvil

    rudvil Elder - Старейшина

    Joined:
    25 Aug 2008
    Messages:
    200
    Likes Received:
    29
    Reputations:
    0
    да, верно, только у меня не конечный автомат, но думаю в ближайшее время начну переделывать
    ну это понятно что я никогда не доберусь до уровня и близкого к bison/antlr... в принципе и не собираюсь =] так чисто попрактиковаться + вдруг кому-нибуть понадобится
    где нужно парсить там он может и понадобится, будь то скрипт. язык или ещё что-нибудь

    з.ы. я никого не заставляю им пользоваться =]

    з.ы.ы на подходе так называемые "semantic actions"
     
    #5 rudvil, 14 Jul 2010
    Last edited: 14 Jul 2010