![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
borisbn |
|
||||||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 22 Всего: 135 |
Всем привет.
Захотелось создать такую тему, где можно было бы поделиться различными кодогенераторами. Отчасти - чтобы потешить тщеславие, отчасти - поделиться, отчасти - найти что-то полезное, отчасти - заполучить тестеров нахаляву ))) Предлагаю собрать в теме либо свои наработки, либо ссылки на готовые кодогенераторы. Начнём-с. Программа, создающая имплементацию по данному ей интерфейсу. Представьте, Вы создали h-файл с таким вот классом
Теперь, чтобы создать имплементацию, Вы делаете довольно много черновой работы: 1) создать h-ник с именем что-нибудь типа IFaceImpl.h 2) написать в нём
3) скопировать из IFace.h все функции (кроме деструктора) и поудалять в них "=0" 4) создать cpp-к с именем что-нибудь типа IFaceImpl.cpp 5) написать в нём
6) скопировать из IFaceImpl.h все функции и подабавлять к ним IFaceImpl:: плюс { и } Предлагается автоматизировать эту работу таким вот скриптиком
код - http://pastebin.com/dQsFF3DL Параметры запуска:
если в качестве второго параметра задать :ask, то скрипт спросит имя класса имплементации: ![]() Это сообщение отредактировал(а) borisbn - 17.6.2012, 12:32 -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
||||||||||
|
|||||||||||
Dem_max |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1780 Регистрация: 12.4.2007 Репутация: 4 Всего: 39 |
выложи готовый EXE
-------------------- Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte") |
|||
|
||||
alexvs11 |
|
|||
hell is here ![]() ![]() Профиль Группа: Участник Сообщений: 518 Регистрация: 21.8.2010 Репутация: 6 Всего: 10 |
а flex/bison на что?
|
|||
|
||||
boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
это же пайтон. Добавлено через 1 минуту и 25 секунд а разве они умеют выполнять подобную задачу без тонны Сишной обвязки? оО Это сообщение отредактировал(а) boostcoder - 17.6.2012, 13:23 |
|||
|
||||
alexvs11 |
|
|||
hell is here ![]() ![]() Профиль Группа: Участник Сообщений: 518 Регистрация: 21.8.2010 Репутация: 6 Всего: 10 |
||||
|
||||
borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 22 Всего: 135 |
py2exe в руки оно, возможно, и правильнее, но во-первых, я его почти не знаю, а во-вторых, там всё как-то сложно для такой простой задачки -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
раз все так просто - реквестирую реализацию с использованием flex|bison. спасибо! |
|||
|
||||
borisbn |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 22 Всего: 135 |
Attention!!!
Обратите внимание, что я ищу имя функции для вставки в cpp-шник как "какое-нибудь-слово" и затем открывающая скобка. Это не будет работать, если функция возвращает указатель на функцию, например
и ещё не отслеживается такая ситуация (лень было)))
Добавлено через 2 минуты и 54 секунды Господа, а чего только мой опус обсуждаем ? Что, нечем поделиться ? Можно своё, можно ссыль на готовое. -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
||||
|
|||||
Randajad |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 295 Регистрация: 15.3.2012 Репутация: 8 Всего: 8 |
А нечем своим делиться!
Лично я не так часто пишу стопицот классов, так что эта тулза вряд-ли принесет какой-либо толк. :( |
|||
|
||||
alexvs11 |
|
|||
hell is here ![]() ![]() Профиль Группа: Участник Сообщений: 518 Регистрация: 21.8.2010 Репутация: 6 Всего: 10 |
||||
|
||||
boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
очень хотелось бы взглянуть ![]() Добавлено через 2 минуты и 55 секунд
и еще в нескольких случаях. не зря же у С++ самый сложный синтаксис. к тому же, и контекстозависимый. так что, я не думаю что сходу можно реализовать парсер корректно обрабатывающий сабж во всех возможных комбинациях факторов. libclang в руки! |
|||
|
||||
alexvs11 |
|
||||||||||||
hell is here ![]() ![]() Профиль Группа: Участник Сообщений: 518 Регистрация: 21.8.2010 Репутация: 6 Всего: 10 |
ну примерно так
входной файл IFace.h
interf.l (flex)
interf.y (bison)
cat IFace.h | ./interf FaceImpl h
cat IFace.h | ./interf FaceImpl cpp
далеко не лучший код, просто по-быстрому набросал Это сообщение отредактировал(а) alexvs11 - 17.6.2012, 19:25 |
||||||||||||
|
|||||||||||||
boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
alexvs11, спасибо за пример, но выглядит страшно
![]() скажи, ты раньше с flex работал? ибо я думаю, что если с нуля, то потребовался бы не один день на это. (это к слову о простоте) |
|||
|
||||
alexvs11 |
|
|||
hell is here ![]() ![]() Профиль Группа: Участник Сообщений: 518 Регистрация: 21.8.2010 Репутация: 6 Всего: 10 |
flex - это первая часть - там обыкновенные регулярки для вычленения лексем с bison-ом посложнее - он по БНФ строит синтаксический анализатор и выполняет соответствующие действия я с ними действительно уже работал, и по мне там нужно просто иметь базовые представления о построении компиляторов и тогда легко освоить так как оно предназначено для построения компиляторов - штука мощная, быстрая и расширяемая неудобно, что генерит с-код, есть bison++ и flex++ - но я не пробовал |
|||
|
||||
borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 22 Всего: 135 |
итого: скрипт на питоне - 100 строк. один файл
скрипт на flex|bison: interf.l (flex) = 28 строк interf.y (bison) = 132 строки interf.l + interf.y = 160 строк исчо: питон - кроссплатформенно, flex+bison - linux only P.S. Господа-а-а-а-а.... просьба постить что-нить полезное. Спасибо -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |