Парсинг Си++ файла
От: adontz Грузия http://adontz.wordpress.com/
Дата: 06.04.06 01:23
Оценка:
Есть задача частично (что значит частично, сейчас поймёте) распарсить Си++ файл.

То есть, пусть есть файл вида
template <typename T>
class A
{
 private:
  int a;
  B<x> b;
 public:
  A()
  {
    float x = 5.6;
    cout<<""countructor! wow!";
  }
  int verycoolmethod(char * some_parameter, const int & another_param)
  {
    return 37;
  }
}

Надо получить информацию вида
class|A|T
  field|int|a|private
  field|B<x>|b|private
  method|.ctor|void
    variable|x|float
  method|verycoolmethod|int
    parameter|some_parameter|char *
    parameter|another_parameter|const int &

то есть фактически выдрать все описания. Как/чем это проще всего сделать?
приблуды от MS типа
class A
{
  int _i;
  void putprop(int i)
  { 
     _i = i;
  }

  int getprop()
  {
    return _i;
  }

  __declspec(property(get = getprop, put = putprop)) int the_prop;
};

будут

Тыканье в документацию и ссылки на готовые решения приветствуется.

Глобальная задача — сделать вменяемую подсветку синтаксиса и автокомплит для языка очень похожего на Си++.
A journey of a thousand miles must begin with a single step © Lau Tsu
Re: Парсинг Си++ файла
От: sinnus  
Дата: 06.04.06 02:27
Оценка: 36 (1)
http://www.antlr.org/
Re[2]: Парсинг Си++ файла
От: adontz Грузия http://adontz.wordpress.com/
Дата: 06.04.06 09:18
Оценка:
Здравствуйте, sinnus, Вы писали:

S>http://www.antlr.org/


Я так понял он на Яве, а на Си++/C# ничего нет?
A journey of a thousand miles must begin with a single step © Lau Tsu
Re[3]: Парсинг Си++ файла
От: megawatt Россия http://ruby.inuse.ru
Дата: 06.04.06 10:35
Оценка:
Здравствуйте, adontz, Вы писали:

A>Здравствуйте, sinnus, Вы писали:


S>>http://www.antlr.org/


A>Я так понял он на Яве, а на Си++/C# ничего нет?


Плохо понял, antlr написан на java, но парсер генерится в виде кода на C++
Re[4]: Парсинг Си++ файла
От: adontz Грузия http://adontz.wordpress.com/
Дата: 06.04.06 10:40
Оценка:
Здравствуйте, megawatt, Вы писали:

A>>Я так понял он на Яве, а на Си++/C# ничего нет?

M>Плохо понял, antlr написан на java

Ну вот это мне и не нравится, вокруг людей знающих Яву нет. Мало ли что, даже спросить не у кого. Файла не хватит или строчки в конфиге, а я кучу времени потрачу.

M>но парсер генерится в виде кода на C++


А есть такая штука чтобы сама была на Си++/C# и генерировала C# (Даже С# 2.0)? Или я уже много хочу?

Да и ещё, я тут прочитал про всякие Yacc/Bison и как я понял у них проблемы с многопоточночтью и запуском сразу нескольких парсеров. Это правда?
A journey of a thousand miles must begin with a single step © Lau Tsu
Re[5]: Парсинг Си++ файла
От: megawatt Россия http://ruby.inuse.ru
Дата: 06.04.06 11:12
Оценка: 36 (1)
Здравствуйте, adontz, Вы писали:

A>Здравствуйте, megawatt, Вы писали:


A>Ну вот это мне и не нравится, вокруг людей знающих Яву нет. Мало ли что, даже спросить не у кого. Файла не хватит или строчки в конфиге, а я кучу времени потрачу.


Хм... В данном случае Вы выступаете как пользователь конечного продукта, какая разница начем он написан? А весь процесс
инсталяции описан на сайте

A>Да и ещё, я тут прочитал про всякие Yacc/Bison

Yacc морально устарел, более функциональный аналог flex

A> и как я понял у них проблемы с многопоточночтью и запуском сразу нескольких парсеров. Это правда?

Да правда, но различными костылями лечится
Re[6]: Парсинг Си++ файла
От: Сергей Туленцев Россия http://software.tulentsev.com
Дата: 06.04.06 11:18
Оценка: +1
Здравствуйте, megawatt, Вы писали:

A>>Да и ещё, я тут прочитал про всякие Yacc/Bison

M>Yacc морально устарел, более функциональный аналог flex

Вообще-то это разные вещи. Yacc — юниксовый построитель компиляторов. Для него нужен построитель
лексических анализаторов — Lex.

А Bison/Flex — это GNU'тые клоны вышеуказанных утилит.
--
Re[6]: Парсинг Си++ файла
От: adontz Грузия http://adontz.wordpress.com/
Дата: 06.04.06 11:38
Оценка:
Здравствуйте, megawatt, Вы писали:

M>Хм... В данном случае Вы выступаете как пользователь конечного продукта, какая разница начем он написан?


Разница такая, что последняя версия в исходниках и я понятия не имею что с ними делать

M>Да правда, но различными костылями лечится


А у того что генерирует antlr как с многопоточность и запуском нескольких копий?

Я ещё
http://www.hwaci.com/sw/lemon/
http://www.ssw.uni-linz.ac.at/Research/Projects/Coco/#CS
Нашёл про них что?

Вообще где бы про всё это почитать так чтобы для новичков, доступно с примерами?
A journey of a thousand miles must begin with a single step © Lau Tsu
Re[6]: Парсинг Си++ файла
От: adontz Грузия http://adontz.wordpress.com/
Дата: 06.04.06 11:44
Оценка:
Здравствуйте, megawatt, Вы писали:

M>Хм... В данном случае Вы выступаете как пользователь конечного продукта, какая разница начем он написан? А весь процесс

M>инсталяции описан на сайте

Ну вот Exception in thread "main" java.lang.NoClassDefFoundError: Files\Antlr-2/7/5\lib\antlr/jar и чё мне с ним делать?
Не-не, давайте что-то такое в чём я понимаю
A journey of a thousand miles must begin with a single step © Lau Tsu
Re[7]: Парсинг Си++ файла
От: megawatt Россия http://ruby.inuse.ru
Дата: 06.04.06 11:55
Оценка:
Здравствуйте, Сергей Туленцев, Вы писали:

СТ>А Bison/Flex — это GNU'тые клоны вышеуказанных утилит.



отпечатался, конечно же:
Yacc/Lex
Bison/Flex
Re[7]: Парсинг Си++ файла
От: megawatt Россия http://ruby.inuse.ru
Дата: 06.04.06 12:03
Оценка: 36 (1)
Здравствуйте, adontz, Вы писали:

A>Здравствуйте, megawatt, Вы писали:


M>>Хм... В данном случае Вы выступаете как пользователь конечного продукта, какая разница начем он написан? А весь процесс

M>>инсталяции описан на сайте

A>Ну вот Exception in thread "main" java.lang.NoClassDefFoundError: Files\Antlr-2/7/5\lib\antlr/jar и чё мне с ним делать?

A>Не-не, давайте что-то такое в чём я понимаю

Под маздай самы удобный вариант ИМХО: http://www.antlr.org/download/antlr-2.7.5.exe
Re[7]: Парсинг Си++ файла
От: megawatt Россия http://ruby.inuse.ru
Дата: 06.04.06 12:07
Оценка:
Здравствуйте, adontz, Вы писали:

A>А у того что генерирует antlr как с многопоточность и запуском нескольких копий?

Отлично, прадва перфоманс по сравнению с bison/flex страдает
Re[8]: Парсинг Си++ файла
От: adontz Грузия http://adontz.wordpress.com/
Дата: 06.04.06 12:24
Оценка:
Здравствуйте, megawatt, Вы писали:

M>Под маздай самы удобный вариант ИМХО: http://www.antlr.org/download/antlr-2.7.5.exe


О! Круто, даже что-то сгенерировалось. Нашёл какую-то грамматику для Си++, буду мучать
A journey of a thousand miles must begin with a single step © Lau Tsu
Re[8]: Парсинг Си++ файла
От: adontz Грузия http://adontz.wordpress.com/
Дата: 06.04.06 12:27
Оценка:
Здравствуйте, megawatt, Вы писали:

A>>А у того что генерирует antlr как с многопоточность и запуском нескольких копий?

M>Отлично, прадва перфоманс по сравнению с bison/flex страдает

Ну для меня это не очень критично, в конце концов код набирается не так быстро, чтоб я его не успел распарсить. К тому же наверное можно хитрить, перепарсивать только при наборе/стирании } или ;
A journey of a thousand miles must begin with a single step © Lau Tsu
Re[8]: Парсинг Си++ файла
От: adontz Грузия http://adontz.wordpress.com/
Дата: 06.04.06 12:43
Оценка:
Здравствуйте, megawatt, Вы писали:

А aNTLR точно умеет C# код генерировать? а то я сделал
options
{
language = "CSharp";
}
и в результате всё равно какое-то typedef, define в сгенерированном коде
A journey of a thousand miles must begin with a single step © Lau Tsu
Re[9]: Парсинг Си++ файла
От: dmz Россия  
Дата: 06.04.06 12:47
Оценка: 1 (1)
A>А aNTLR точно умеет C# код генерировать? а то я сделал
A>options
A>{
A> language = "CSharp";
A>}
A>и в результате всё равно какое-то typedef, define в сгенерированном коде

А что, если попробовать gccxml,
потом взять генеримый xml и из него сгенерить что угодно?
Re[10]: Парсинг Си++ файла
От: adontz Грузия http://adontz.wordpress.com/
Дата: 06.04.06 12:49
Оценка:
Здравствуйте, dmz, Вы писали:


dmz>А что, если попробовать gccxml, потом взять генеримый xml и из него сгенерить что угодно?


Проблема в том, что это Язык похожий на Си++, но уж точно не то что можно скомпилировать MSVC или GCC
A journey of a thousand miles must begin with a single step © Lau Tsu
Re: Парсинг Си++ файла
От: Аноним  
Дата: 07.04.06 06:12
Оценка:
Здравствуйте, adontz, Вы писали:


A>Тыканье в документацию и ссылки на готовые решения приветствуется.

вот действительно откройте документацию по .NET и почитайте внимательно
A>Глобальная задача — сделать вменяемую подсветку синтаксиса и автокомплит для языка очень похожего на Си++.
Re[2]: Парсинг Си++ файла
От: adontz Грузия http://adontz.wordpress.com/
Дата: 07.04.06 10:51
Оценка:
Здравствуйте, Аноним, Вы писали:

A>>Тыканье в документацию и ссылки на готовые решения приветствуется.

А>вот действительно откройте документацию по .NET и почитайте внимательно

И чё?
A journey of a thousand miles must begin with a single step © Lau Tsu
Re[2]: Парсинг Си++ файла
От: Left2 Украина  
Дата: 07.04.06 11:56
Оценка: 1 (1)
Здравствуйте, sinnus, Вы писали:

S>http://www.antlr.org/


Я бы оценил сложность создания парсера для С++ на основе ANTLR в человеко-годы (или, может быть, даже десятки человеко-лет). Кстати, давненько уж видел такой проект (ЕМНИП, именно на ANTLR) — он был даже в исходниках. Но попытки запустить его на сколько-либо отличном от тривиального коде ни к чему не привели . Да и в самом описании проекта говорилось о том что они ещё очень далеки от полноценной поддержки стандарта.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.