Есть программа, построенная на классах. Каждый объект класса имеет методы класса, которые позволяют ему исполнять участок кода из текстового файла (код написан на сильно урезанном С++). Вопрос с разбором кода на морфемы и выражения почти решился. Есть проблемы с выделением памяти на переменные, которые объявляются в текстовом файле. Был предложен метод, который бы подразумевал динамическое выделение памяти в самой программе, после чего было бы этот кусок памяти бы нарезался, маркеровался и в дальнейшем использовался на переменные. Но этот способ очень громоздкий. Может есть какие-либо иные методы? PS: Заранее благодарен!
GetMem,FreeMem - подходят... И new, и malloc, и иже с ними подходят. Но это всё функции выделения памяти. А проблема не в том, чтобы просто выделить память, а в том, чтобы эту область памяти привязать к определённой переменной определённого типа, и чтобы потом посредством каких-либо механизмов можно было бы обратится к этой переменной по имени из этого "текстового" участка кода. Разбор морфем здесь ни к чему, потому я его не рассматриваю.
Titch Используй явное преобразование типов. Код (Text): void *aq = new char[100]; PCONTEXT p = (PCONTEXT)aq;
будет код к вечеру воскресенья - покажу о чём я... в рамках студии использование явного приведения типа - это рационально (тут каждый указатель привязан к типу), а как только прога скомпилировалась, то все эти указатели станут типа void, просто логикой компилятора предусмотренно, чтобы они не смешивались. но т.к. здесь речь идёт о исполнении уже скомпилированной программы, то придётся все типы таскать с собой вместе с именем переменной и указателем на неё.... будет что-то вроде массива двумерного: Код (Text): ИМЯ УКАЗАТЕЛЬ ТИП a 0x092AB032 int b 0x0CF987E6 float c 0x9789FA76 other
Titch Тоже мне проблема, забить в массив (а ИМХО лучше в сортированное двоичное дерево) список идентификаторов и соответствующих им адресов и проходить по массиву (дереву) каждый раз, когда на идентифификатор при парсинге натыкаетесь. Наткнулись на идентификатор, посмотрели в соответствующей ему структуре адрес и тип, сделали с содержимым адреса то, что написано в пропарсиваемом коде.