openC++

ViGvo

скачал и сей час разбираюсь -- что это такое, как работает.
есть у кого-то опыт работы с ним? если да -- можете как то прокоментировать? :%)

Chupa

расширяемый парсер C++
осуществляет разбор языка и позволяет задавать некоторые преобразования над текстом программы
OpenC++ is source-to-source translator facilitating development of C++ language extensions, domain specific compiler optimizations and runtime metaobject protocols. OpenC++ is also a perfect code base for projects requiring C++ parser and static analyzer.

ViGvo

а есть на русском какая либо хрень на тему ?:%)
я вот например сей час собрал проект, и хочу посмотреть на синтаксическое дерево строчки (int i = a + b;) но вот сделать это ... :%) никак

Chupa

по-русски не встречал
дерево разбора должен давать по ключу -s
PS можно примерчики поразглядывать отсюда: http://www.csg.is.titech.ac.jp/~chiba/opencxx/tutorial.pdf

ViGvo

сей час не могу понять -- в каком виде у него можно взять промежуточное представление? дело в том, что мне нужно по распарсенному коду построить некое другое представление (написать визуализатор -- там будут показанны какие есть функции, какие переменные, и тд) по идее, перед асемблером у него должно быть какое то внутренние представление, бд, ну или xml ник какой нибудь, но найти его пока ... никак ты не в курсе ?:%)

ViGvo

а строчка
% occ -m -- -g VerboseClass.mc
вообще осталась для меня "вещью в себе" -- не могу найти компоненту occ

Chupa

куски дерева он отдаёт в виде PTree* соответствующим обработчикам событий

ViGvo

а для чего используется Environment ?:%)
ты если в гз появляешься -- может пересечемся? а то так много не понятного:%)

ppplva

К нему есть дока, где кратко описаны методы PTree, Method, TypeInfo, Environment. Читал ?

ViGvo

если которая на
http://www.csg.is.titech.ac.jp/~chiba/opencxx/html/
то читал, и то, что мне посоветовали здесь -- тоже.
мне надо было ответить на такой вопрос -- можно ли проект использоват для разработки визуализатора. визуализатор кода должен отоброжать для заданной проекта {файлы (со включениями); функции; переменные}. я так покопался, подумал -- нашел, что в OpenC++ в качестве промежуточного представления есть только {код препроцессирования (как раз по ключу -s выдается) и дерево исходника} ни системы типов, ни дополнительной информации о классах, ни таблицы файлов. вобщем -- или я плохо искал, или там этого просто нет. на мысль о том, что этого там наверное и нет наталкивает то, что
"The base-level program is first preprocessed by the C++ preprocessor, and then divided into small pieces of code. These pieces of code are translated by class metaobjects and assembled again into a complete C++ program. "
те, фактически, это просто надстройка над плюсовым компилятором, препроцессор для МетаКода. если на выходе плюсовый код, то ему нахрен не нужно все, что мне необходимо.
или я что то не так понимаю?:%)

ViGvo

и по поводу sourcenavigator'a -- :%) такие же вопросы -- где взять что то похожие на маны почитать?:%) может есть у когото ?:%)

Chupa

> те, фактически, это просто надстройка над плюсовым компилятором,
> препроцессор для МетаКода. если на выходе плюсовый код, то ему нахрен
> не нужно все, что мне необходимо.
> или я что то не так понимаю?:%)
Всё так, он выполняет ненужную для твоей задачи работу
(генерация модифицированного кода) и может не выполнять чего-то нужного,
но вся информация в каком-то виде у него присутствует или может
быть получена с помощью соответствующих изменений.
Сложность этих изменений пока тяжело определить, надо в коде ковыряться
и в документации.

ViGvo

>но вся информация в каком-то виде у него присутствует или может
>быть получена с помощью соответствующих изменений.
так нет :%) я как раз и миел ввиду, что у него многого нет потому что это ему и не нужно. у меня правда пока не получилось запустить файл на выполнение (если бы подсказал как -- или occ файл -- конечный продукт т.е. получить что то большее чем дерево проги (+=код препроцесирования). у меня просто при виде обьема кода в 400к возникли сильные сомнения, что в нем есть хоть что то стоящее. мне вот допустим просто не обойтись без таблицы классов, информации о файлах.
понимаешь, основной вопрос в том могу ли я это сделать в принципе. пока такое мнение, что нет -- опенС++ для этого не подходит -- легче писать с нуля ( :% ) или найти что то другое (сей час я с надеждой смотрю на навигатор)

Chupa

>> но вся информация в каком-то виде у него присутствует или может
>> быть получена с помощью соответствующих изменений.
> так нет :%) я как раз и миел ввиду, что у него многого нет потому что это ему и не нужно.
Он не знает, что ему нужно, так как предоставляет позможность расширения пользователем.
Там дофига вещей, которые никак не используются в нормальном режиме,
но доступны для модулей.
> у меня правда пока не получилось запустить файл на выполнение
> (если бы подсказал как -- или occ файл -- конечный продукт
Если просто запустить, то "occ <имя_файла>".
Для расширений нужно писать модуль, компилировать его "occ -m module.cc"
и юзать "occ -Smodule <имя_файла>".
> т.е. получить что то большее чем дерево проги (+=код препроцесирования).
> у меня просто при виде обьема кода в 400к возникли сильные сомнения,
> что в нем есть хоть что то стоящее. мне вот допустим просто не обойтись
> без таблицы классов, информации о файлах.
Таблицу классов и инфу о файлах вытащить можно.
Первое можно вытащить, унаследовавшись от Class и переопределив,
например, TranslateClass, для второго нужно лезть в исходник и обрабатывать
инфу о номерах строк и именах файлов, оставшуюся после препроцессора
(occ это игнорирует).
> понимаешь, основной вопрос в том могу ли я это сделать в принципе.
> пока такое мнение, что нет -- опенС++ для этого не подходит -- легче писать с нуля ( :% )
Не уверен, что написать парсер c++ с нуля будет проще, слишком уж извратный язык.
Посмотреть на альтернативы можно. Сам я столкнулся с occ исключительно по необходимости,
пришлось поковыряться в сделанной на нём проге.

ViGvo

никак не пойму, что такое значат цифры (до и после включения) -- понятно, что они как то коррелируют с исходным кодом. а можно из них вытащить [кто включает файл, номер строки включения]
# 1 "C:/MinGWStudio/MinGW/include/stdio.h" 1 3
# 35 "C:/MinGWStudio/MinGW/include/stdio.h" 3
# 1 "C:/MinGWStudio/MinGW/include/_mingw.h" 1 3
# 36 "C:/MinGWStudio/MinGW/include/stdio.h" 2 3
по идее тут нужна дока на препроцессор MinGW
Оставить комментарий
Имя или ник:
Комментарий: