Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > анализ кода языка Си или C++


Автор: dershokus 28.2.2013, 19:20
 Здравствуйте. Требуется разобрать исходник c/c++ файла. Есть лексические (lex,flex,ragel) и синтаксические (yacc, bison) анализаторы, но тогда мне пидется описать всю лексику и граматику. Если для Си это я еще себе представляю, то для С++ - сомнительно smile.
 Знаю про Clang API, но мне желательно иметь кросс-платформенную либу, которую сможет юзать другое приложение.
 Извиняюсь, если запостил не туда, не нашел подходящего места.

Автор: Amp 28.2.2013, 20:20
Цитата(dershokus @  28.2.2013,  19:20 Найти цитируемый пост)
 Знаю про Clang API, но мне желательно иметь кросс-платформенную либу, которую сможет юзать другое приложение.

Так он же кроссплатформенный. И в том числе в виде библиотеки.

Автор: dershokus 1.3.2013, 09:51
Всеже интересно, есть ли *.l или *.rl и прочее для си и си++?

Автор: bsa 1.3.2013, 11:14
dershokus, для С есть, для С++ нет. Почитай статью http://www.arbinada.com/main/node/54

Автор: dershokus 1.3.2013, 12:01
 bsa, может быть это наивный вопрос, но почему их нет? Я много искал что-то такое, но тоже ничерта не находил. Си++ такой синтаксически сложный язык?

Автор: bsa 1.3.2013, 13:27
Цитата(dershokus @  1.3.2013,  13:01 Найти цитируемый пост)
Си++ такой синтаксически сложный язык? 
Невероятно. Почитай статью. Читается, как роман.

Автор: dershokus 1.3.2013, 13:50
bsa, большое спасибо за обьяснение smile

Автор: kamre 2.3.2013, 16:58
Цитата(dershokus @ 1.3.2013,  12:01)
Си++ такой синтаксически сложный язык?

Конечно, сложный. До сих пор ни одна IDE для C++ не умеет делать корректно такой рефакторинг как rename.

Автор: SaDFromSpb 6.3.2013, 18:23
Цитата(kamre @  2.3.2013,  16:58 Найти цитируемый пост)
До сих пор ни одна IDE для C++ не умеет делать корректно такой рефакторинг как rename. 

Eclipse (Juno) справляется с rename'ом. Пользовался не раз. Не могу точно утверждать, что проблем не было никогда (может не помню), но обычно прекрасно работает. Вообще она на удивление хорошо с синтаксисом справляется. С++11 лямбды понимает, подсказывает, что виртуальный деструтор нужно бы добавить в базовый класс и все такое...
Одна из самых приятных вещей - на лету (по наведению мыши) разворачивает заумные финты на препроцессоре. А то мы с коллегами иногда любим на BOOST_PP наворотить зла =)

Автор: kamre 6.3.2013, 19:44
Цитата(SaDFromSpb @ 6.3.2013,  18:23)
Eclipse (Juno) справляется с rename'ом.

Сам пользуюсь CDT (ничего лучше пока не нашел для себя), так что точно знаю, что некорректно rename делается. На тривиальном коде с препроцессором/шаблонами молча ломает код при rename до не компилируемого состояния.

Код

#define call_func(x) x.func();

template <typename T>
void call_func_templ(T t) { t.func(); }

struct A {
  void func() {}  // <== rename this function
};

struct B {
  void func() {}
};

int main()
{
  A a;
  B b;
  call_func(a);
  call_func(b);
  call_func_templ(a);
  call_func_templ(b);
}

Автор: SaDFromSpb 7.3.2013, 12:12
kamre
Ах он сволочь! В дефайне переименовал тоже! Не ожидал.
Теперь согласен! =)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)