Здравствуйте, 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 для своих внутренних нужд, но где она, в каких классах, я не нашёл
А эту ссылочку смотрел?
http://dobrokot.nm.ru/WinnieColorizer.html... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Здравствуйте, Left2, Вы писали:
L>http://dobrokot.nm.ru/WinnieColorizer.html
Так я вообще без парсера могу. Мне надо классы, структуры, методы и переменные красить разными цветами. когоче что-то уровня VisualAssist.
A>Так я вообще без парсера могу. Мне надо классы, структуры, методы и переменные красить разными цветами. когоче что-то уровня VisualAssist.
Простого решения не получится
![](/Forum/Images/frown.gif)
К сожалению, с С++ не выйдет поддерживать "только классы, структуры методы и переменные". Его прийдётся парсить целиком
![](/Forum/Images/frown.gif)
Вон VisualAssist-у уже лет 8, наверное, а всё ещё далеко не везде он корректно работает. При том что всю свою историю он довольно активно развивается.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Здравствуйте, adontz, Вы писали:
A>Есть задача частично (что значит частично, сейчас поймёте) распарсить Си++ файл.
Если до сей поры не имел дела с построителями парсеров, рекомендую начать с CoCo/R. Он без наворотов, зато с ним легко разобраться. Если не хватит функционала, и руками конфликты слишком много разруливать, то переходи, как советовали, на antlr. Очень не рекомендовал бы использовать Yacc и прочие LR(1) парсеры, тяжело будет подстраивать под свои нужды (в частности крайне трудно будет сделать восстановление после ошибок, а эта фича в комплите обязательная).
Теперь о собственно грамматике. Классическая грамматика тебе не подойдет, потому что, во-первых, анализ идет снизу вверх (а тебе нужно наоборот, сверху вниз), а во-вторых нужно парсить и текст с ошибками. Для того чтобы разрулить подобные ситуации часто используют различные рукописные эвристики. Например, насколько мне известно, решарпер, при наличии ошибок, начинает считать скобки и пропускает scope с ошибками. Тот же самый прием прокатывает, если нужно парсить только декларации. Т.е. допарсиваешь до самого нижнего уровня, который тебе нужен, потом находишь открывающую и закрывающую скобки. Все, что внутри них игнорируешь (лексер при этом должен уметь пропускать неверные лексемы).
... << RSDN@Home 1.2.0 alpha rev. 646 on Windows XP 5.1.2600.131072>>
Здравствуйте, dmz, Вы писали:
dmz>А что, если попробовать gccxml,
dmz>потом взять генеримый xml и из него сгенерить что угодно?
Я тоже столкнулся с подобной задачей -- выцепить определения классов и объявления функций. Как я понял, gccxml для этой задачи все-таки плохо подходит, поскольку не выводит неинстанциированные шаблоны.
![](/Forum/Images/frown.gif)
Кто-нибудь встречал инструмент, свободный от этого недостатка?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Здравствуйте, little_alex, Вы писали:
Кстати, куда копать, если стоит задача обеспечения функций Visual Assist для языка отличного от С++. Например какого-нибудь скриптового. Интересуют общие подходы, алгоритмы ...
Заранее благодарен