Re[3]: Парсинг Си++ файла
От: adontz Грузия http://adontz.wordpress.com/
Дата: 07.04.06 13:50
Оценка:
Здравствуйте, Left2, Вы писали:

L>Я бы оценил сложность создания парсера для С++ на основе ANTLR в человеко-годы.


Это я как раз прекрасно понимаю. Дело в том что не нужно писать компилятор. Мне нужна только подстветка синтаксиса и автокомплит.
То есть в случае
template <typename T>
class A
{
 public:
  T sum(const T & x, const T & y, const T & z)
  {
   return x + y + z;
  }
}


Мне не надо разбираться что делает строка "return x + y + z;" тем более проверять что при описании A<B> у класса B определён оператор сложения. Мне нужно только описания (declarations) выдрать.

Аноним судя по всему намекал что в .Net Framework есть интерфейс ICodeParser, но он для [Managed] Си++ не реализован. Судя по тому, что я нагуглил есть какая-то реализация в Visual Studio для своих внутренних нужд, но где она, в каких классах, я не нашёл
A journey of a thousand miles must begin with a single step © Lau Tsu
Re[4]: Парсинг Си++ файла
От: Left2 Украина  
Дата: 07.04.06 14:22
Оценка:
А эту ссылочку смотрел?

http://dobrokot.nm.ru/WinnieColorizer.html
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[5]: Парсинг Си++ файла
От: adontz Грузия http://adontz.wordpress.com/
Дата: 07.04.06 15:05
Оценка:
Здравствуйте, Left2, Вы писали:

L>http://dobrokot.nm.ru/WinnieColorizer.html


Так я вообще без парсера могу. Мне надо классы, структуры, методы и переменные красить разными цветами. когоче что-то уровня VisualAssist.
A journey of a thousand miles must begin with a single step © Lau Tsu
Re[6]: Парсинг Си++ файла
От: Left2 Украина  
Дата: 07.04.06 15:57
Оценка:
A>Так я вообще без парсера могу. Мне надо классы, структуры, методы и переменные красить разными цветами. когоче что-то уровня VisualAssist.

Простого решения не получится
К сожалению, с С++ не выйдет поддерживать "только классы, структуры методы и переменные". Его прийдётся парсить целиком
Вон VisualAssist-у уже лет 8, наверное, а всё ещё далеко не везде он корректно работает. При том что всю свою историю он довольно активно развивается.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re: Парсинг Си++ файла
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 08.04.06 11:37
Оценка: 36 (1)
Здравствуйте, adontz, Вы писали:

A>Есть задача частично (что значит частично, сейчас поймёте) распарсить Си++ файл.


Если до сей поры не имел дела с построителями парсеров, рекомендую начать с CoCo/R. Он без наворотов, зато с ним легко разобраться. Если не хватит функционала, и руками конфликты слишком много разруливать, то переходи, как советовали, на antlr. Очень не рекомендовал бы использовать Yacc и прочие LR(1) парсеры, тяжело будет подстраивать под свои нужды (в частности крайне трудно будет сделать восстановление после ошибок, а эта фича в комплите обязательная).
Теперь о собственно грамматике. Классическая грамматика тебе не подойдет, потому что, во-первых, анализ идет снизу вверх (а тебе нужно наоборот, сверху вниз), а во-вторых нужно парсить и текст с ошибками. Для того чтобы разрулить подобные ситуации часто используют различные рукописные эвристики. Например, насколько мне известно, решарпер, при наличии ошибок, начинает считать скобки и пропускает scope с ошибками. Тот же самый прием прокатывает, если нужно парсить только декларации. Т.е. допарсиваешь до самого нижнего уровня, который тебе нужен, потом находишь открывающую и закрывающую скобки. Все, что внутри них игнорируешь (лексер при этом должен уметь пропускать неверные лексемы).
... << RSDN@Home 1.2.0 alpha rev. 646 on Windows XP 5.1.2600.131072>>
AVK Blog
Re[10]: Парсинг Си++ файла
От: Anton V. Kolotaev  
Дата: 09.04.06 08:21
Оценка:
Здравствуйте, dmz, Вы писали:

dmz>А что, если попробовать gccxml,

dmz>потом взять генеримый xml и из него сгенерить что угодно?

Я тоже столкнулся с подобной задачей -- выцепить определения классов и объявления функций. Как я понял, gccxml для этой задачи все-таки плохо подходит, поскольку не выводит неинстанциированные шаблоны. Кто-нибудь встречал инструмент, свободный от этого недостатка?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re: Парсинг Си++ файла
От: little_alex  
Дата: 09.04.06 09:47
Оценка: 42 (2)
Здравствуйте, adontz, Вы писали:

A>Глобальная задача — сделать вменяемую подсветку синтаксиса и автокомплит для языка очень похожего на Си++.


http://www.nobugs.org/developer/parsingcpp/
http://www.cs.berkeley.edu/~smcpeak/elkhound/
http://opencxx.sourceforge.net/
http://citeseer.ist.psu.edu/251920.html
Re[2]: Парсинг Си++ файла
От: Аноним  
Дата: 09.04.06 10:48
Оценка:
Здравствуйте, little_alex, Вы писали:

Кстати, куда копать, если стоит задача обеспечения функций Visual Assist для языка отличного от С++. Например какого-нибудь скриптового. Интересуют общие подходы, алгоритмы ...
Заранее благодарен
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.