анализаторы/парсеры C или C++
Для Си можно взять описание стандарта в формате для lexx/yacc, только дерево придётся делать самостоятельно.
Для Си++ найти нормальный парсер очень тяжело, почти все они коммерческие. Как вариант - брать исходники gcc. Или в гугл, первая ссылка на шокала: http://www.cs.berkeley.edu/~smcpeak/elkhound/
Для Си++ найти нормальный парсер очень тяжело, почти все они коммерческие. Как вариант - брать исходники gcc. Или в гугл, первая ссылка на шокала: http://www.cs.berkeley.edu/~smcpeak/elkhound/
без анализа семантики не получится отделить глобальные и локальные переменные.
нужно будет полноценный анализатор писать.
Мы делаем кое-что подобное. если интересно - в приват.
нужно будет полноценный анализатор писать.
Мы делаем кое-что подобное. если интересно - в приват.
Да, я все понимаю, взять там antlr и нагенерировать сколько угодно. Не хотелось.
elsa и oink - как раз используют elkhound.
C++ в общем-то и не нужен, к счастью.
elsa и oink - как раз используют elkhound.
C++ в общем-то и не нужен, к счастью.
Для Си++ найти нормальный парсер очень тяжело, почти все они коммерческие.Их мало, но elsa очень радует. Она умеет через typechecking разрюхивать неоднозначности и даже находит все instantiation шаблонов.
Жестокая штука.
глянь что там в eclipse cdt натворили, когда я писал диплом там уже много что было, AST там точно есть а семантика тогда только там появлялась. но код там конечно монстроидный слегка, IBM всё-таки =)
из gcc ничего выковырять точно не получится, оно там надёжно привязано чтоб не упёрли.
из gcc ничего выковырять точно не получится, оно там надёжно привязано чтоб не упёрли.
на всякий случай напомню про CIL
о, на этого зверя еще не натыкался, спасибо.
antlr C не распарсит, кажися, - грамматика LR.
на сайте antlr есть грамматики и для C и для C++.
Оставить комментарий
shlyumper
Нужен анализатор С или C++, который было бы не очень сложно дополнить своей функциональностью. Задача достаточно простая: промаркировать все функции в исходниках в зависимости от каких-то их свойств (например, наличие обращения к глобальным переменным). Писать свой парсер совершенно не хочется. Соответственно, вопрос: можете посоветовать какие-нибудь готовые парсеры для C или C++, которые на выходе бы давали AST. Лучше, чтобы сам парсер был на чем-либо более читаемом, типа python, perl, lisp, ML... (то есть elsa/oink можно не советовать).