![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
всем привет.
задача: разработать набор перечислений и функций для операций над ними, позволяющие описать декларации со всевозможными спецификаторами, к примеру: 1. переменные/переменные_члены. 2. функции/указатели_на_функции/ссылки_на_функции. 3. методы/указатели_на_методы/ссылки_на_методы. 4. конструкторы/деструкторы. со всевозможными спецификаторами. пока что накатал такое:
http://liveworkspace.org/code/d8c1203b76eb...e5514b5d4206323 вопросы: 1. что я упустил? 2. возможно ли для описания декларации использовать 32ух битное значение? т.е. хватит ли его диапазона? 3. каким образом(исходя из чего) перечислениям присваивать начальные значения? 4. т.к. не секрет, что у меня проблемы с двоичной логикой, наверное нужно для начала поупражняться в этом? спасибо. |
|||
|
||||
| mes |
|
||||||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
32 бита хватит ровно на 32 флага вариаций
если перечеслиния нужны как флаги, то каждое следующее значение должно быть сдвинуто влево(<<)
а иначе как будете код писать то ? |
||||||
|
|||||||
| newbee |
|
||||||
![]() Бревно ![]() ![]() Профиль Группа: Участник Сообщений: 703 Регистрация: 24.8.2011 Репутация: 4 Всего: 19 |
short, inline. Ссылку на указатель на указатель на инт как описывать будешь?
-------------------- You're face to face With man who sold the world |
||||||
|
|||||||
| boostcoder |
|
||||||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
далее, все перечисления нужно свести в структуру.
для функций, правило такое:
т.е. по идее, нужно описывать еще и возвращаемый тип. или просто добавить в decl_type_ член типа ret_type? что скажите? что-то мне подсказывает, что для этой задачи подходит AST итак - что, и в каком виде должен описывать узел AST? нужно подумать... Добавлено @ 09:26 логично.
понял. угу. нужно подумать. ладно. есть int64 и double. не проблема. вроде понял.
не утрируй ;) Up. Это сообщение отредактировал(а) boostcoder - 4.10.2011, 09:33 |
||||||
|
|||||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
есть еще char [N], куда можно сложить еще больше.. только вот подойдет ли плоский набор флагов, или все ж нужно дерево.. Это сообщение отредактировал(а) mes - 4.10.2011, 09:56 |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
у меня недостаточно понимания чтоб решить это... вот, думаю. |
|||
|
||||
| newbee |
|
|||
![]() Бревно ![]() ![]() Профиль Группа: Участник Сообщений: 703 Регистрация: 24.8.2011 Репутация: 4 Всего: 19 |
Если ты собираешься хранить структуру программы, естественно нужен AST. Если только описать все имеющиеся сущности... Зависит от того, насколько подробно ты собираешься это описывать. Например потроха класса: вложенный класс должен знать, что он вложенный? И даже в этом случае явное дерево не обязательно, тебе достаточно у каждой сущности сохранять идентификатор ее родителя: неймспейс, класс, функция.
Это сообщение отредактировал(а) newbee - 4.10.2011, 10:35 -------------------- You're face to face With man who sold the world |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
нет. так же как и не нужно знать предков/наследников. |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
ну так вначале напишите несколько правил для каждого из вариантов разбора, а после будет видно структуру какого типа это лучше всего помещать.. Добавлено через 2 минуты и 27 секунд имелось ввиду не классическое древо-список, а иерархический набор значений.. |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
этим и занимаюсь. Добавлено через 2 минуты и 40 секунд а кто-то может ответить на вопросы типа "(конструктор/дектруктор?)" в коде топика? чтоб не пришлось правила потом еще раз переписывать |
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 60 Всего: 223 |
Возьмите описание AST из g++ и посмотрите во что он ляжет в вашем описании. Сразу станет видно, чего не хватает.
|
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
||||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 60 Всего: 223 |
А я не предлагаю 'выдрать кусок'. Я предлагаю использовать g++ AST в качестве источника информации о том, что именно должно содержаться в С++ AST. Вам в любом случае придется все, что там есть, реализовывать (пусть и по своему) Найдите там просто описание самого AST (структуры + enum'ы). Этого должно хватить |
|||
|
||||
| math64 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 8 Всего: 72 |
Модификаторы к основаному типу:
не хватает ещё signed/unsigned. short упомянули, но есть ещё long и int64(long long); нет float нет bool кроме ссылок и указателей есть ещё массивы кроме class есть struct; есть typedef виртуальные методы могут быть абстрактными (=0) нет private/protected/public Ну и ещё есть #define Про реализацию: можно посмотреть как реализовано отражение в java или c# и добавить то, что есть в c++ и нет в этих языках. Добавлено через 4 минуты и 21 секунду и ещё extern/static - нужно отличать static метод и static переменную вне класса локальные переменные внутри функции namespace Добавлено через 9 минут для параметра: имеет значение по умолчанию временный флаг: предватрительное объявление operator template и соответственно параметр шаблона |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
||||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |