![]() |
|
Модераторы: 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. Господа-а-а-а-а.... просьба постить что-нить полезное. Спасибо -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
||||
|
||||
| alexvs11 |
|
|||
|
hell is here ![]() ![]() Профиль Группа: Участник Сообщений: 518 Регистрация: 21.8.2010 Репутация: 6 Всего: 10 |
ну во-первых он есть для всех платформ во-вторых на питоне у тебя все хорошо до тех пор, пока твоя грамматика элементарная а дальше спагетти flex/bison же четкое разделение на лексический анализатор и LALR(1) компилятор ну это так, про адекватность сравнения |
|||
|
||||
| EvilsInterrupt |
|
|||
|
Executables research ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1019 Регистрация: 14.7.2007 Где: Железнодорожный, МО, Россия Репутация: 2 Всего: 9 |
alexvs11, Круто ты выложил код, но я не осилил понять. Может напишешь "версию для детей"? Другими словами хочется статьи где бы ты поделился опытом!
|
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
||||
|
||||
| alexvs11 |
|
|||
|
hell is here ![]() ![]() Профиль Группа: Участник Сообщений: 518 Регистрация: 21.8.2010 Репутация: 6 Всего: 10 |
есть книга flex & bison издательства O'Reilly - там все четко, подробно и с примерами
Это сообщение отредактировал(а) alexvs11 - 17.6.2012, 21:13 |
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 60 Всего: 223 |
Ну как то не атк чтобы совсем нечем, но ничего полезного (за пределами проектов, где создавалось) как то не просматривается Внутри всяких проектов не один десяток всяких генераторов было написанно, но не представляю куда хотя бы один из них можно применить 'вообще' |
|||
|
||||
| EvilsInterrupt |
|
|||
|
Executables research ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1019 Регистрация: 14.7.2007 Где: Железнодорожный, МО, Россия Репутация: 2 Всего: 9 |
xvr, А можешь хотя бы небольшой список тех задач, что приходилось автоматизировать? Ато может что-то можно автоматизировать, а я и не задумывался )
|
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 60 Всего: 223 |
|
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |