Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> модификация кода с помощью gcc_xml 
V
    Опции темы
ElKa
Дата 9.7.2010, 12:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 300
Регистрация: 1.2.2006

Репутация: нет
Всего: 4



подскажите плиз как это можно реализовать

например, в следующем коде мне нужно заменить + на - и  int a,b; на float a,b;

Код

struct EmptyClass {};

int a, b;
a = 3;
b = 2;

int a_function(float f, EmptyClass e)
{
   return a+b;
}
 
int main(void)
{
  return 0;
}


я парсаю его с gcc_xml 
gccxml_cc1plus sample.cpp -fxml=sample.xml

и получаю такой XML код

Код

<?xml version="1.0"?>
<GCC_XML>
  <Namespace id="_1" name="::" members="_3 _4 _5 _6 _7 "/>
  <Namespace id="_2" name="std" context="_1" members=""/>
  <Function id="_3" name="main" returns="_8" context="_1" location="f0:13"/>
  <Function id="_4" name="a_function" returns="_8" context="_1" location="f0:8">
    <Argument name="f" type="_9"/>
    <Argument name="e" type="_7"/>
  </Function>
  <Variable id="_5" name="b" type="_8" init="2" context="_1" location="f0:5"/>
  <Variable id="_6" name="a" type="_8" init="3" context="_1" location="f0:4"/>
  <Struct id="_7" name="EmptyClass" context="_1" location="f0:1" members="_10 _11 " bases=""/>
  <FundamentalType id="_8" name="int"/>
  <FundamentalType id="_9" name="float"/>
  <Constructor id="_10" name="EmptyClass" context="_7" location="f0:1">
    <Argument name="_ctor_arg" type="_12"/>
  </Constructor>
  <Constructor id="_11" name="EmptyClass" context="_7" location="f0:1"/>
  <ReferenceType id="_12" type="_7c"/>
  <File id="f0" name="sample.cpp"/>
</GCC_XML>


как с его помощью можно модифицировать код? и можно ли вообще? 
может быть можно более подробный исходящий код получить? 
какие вообще возможности дает этот парсер для модификации кода? 


Это сообщение отредактировал(а) ElKa - 9.7.2010, 12:12
PM   Вверх
Ockonal
Дата 11.7.2010, 06:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Smile
*


Профиль
Группа: Участник
Сообщений: 219
Регистрация: 9.7.2007
Где: Ukraine::Nikolaev ;

Репутация: нет
Всего: 3



Я думаю, вам нужно использовать "отражение", когда программа использует и обрабатывает команды как данные. Там можно делать динамический код. Проблема в том, что на С++ это пока невозможно стандартными средствами, но где-то валялась библиотека такая. Не знаю на счёт её работоспособности.

upd
CAMP и есть эта библиотека. Ещё пару ссылок в догонку: как добавить отражение в с++что это вообще такое и как его используют в других языках.
Гугли по теме c++ reflection.

Это сообщение отредактировал(а) Ockonal - 11.7.2010, 06:42
--------------------
Ум заключается не только в знании, но и в умении прилагать знание на деле.Самое лучшее из всех доказательств есть опыт.Каждому человеку свойственно ошибаться, но никому, кроме глупца, несвойственно упорствовать в ошибке.
PM MAIL WWW ICQ Skype GTalk Jabber MSN   Вверх
ElKa
Дата 13.7.2010, 19:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 300
Регистрация: 1.2.2006

Репутация: нет
Всего: 4



Ockonal

да я уже поняла, что этот парсер ничего не дает
мне его здесь настойчиво рекомендовали, а на деле с него толку нет

насчет рефлексии, он как раз что-то вроде рефлексии делает, т.е. парсит структуру классов из .h-файлов и достает все функции и переменные классов, как рефлексия в яве мемберсы достает

а мне надо именно содержимое функций и значения и типы менять (in .cpp)

а на другие парсеры у меня уже времени нет
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0691 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.