Библиотека для кодогеренации?
От: SaZ  
Дата: 03.09.20 11:17
Оценка: 2 (1)
Всем здравствуйте,

На проекте достаточно много однотипных функций (типа юнит тестов и некоторого сдк).
Нужно генерировать .h / .c файлы с функциями, а так же заполнять некоторые массивы (типа пара указатель на функцию + строка с описанием).

Возможно уже есть какие-то решения, которые позволят не изобретать велосипед с нуля? В качестве выхлопа нужен именно си, не си++.
Re: Библиотека для кодогеренации?
От: kov_serg Россия  
Дата: 04.09.20 15:57
Оценка:
Здравствуйте, SaZ, Вы писали:

SaZ>На проекте достаточно много однотипных функций (типа юнит тестов и некоторого сдк).

SaZ>Нужно генерировать .h / .c файлы с функциями, а так же заполнять некоторые массивы (типа пара указатель на функцию + строка с описанием).

SaZ>Возможно уже есть какие-то решения, которые позволят не изобретать велосипед с нуля? В качестве выхлопа нужен именно си, не си++.


PHP
Re: Библиотека для кодогеренации?
От: AeroSun  
Дата: 04.09.20 16:22
Оценка:
Мне просто интересно, как ты это себе представляешь?
Re: Библиотека для кодогеренации?
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 04.09.20 20:28
Оценка: 6 (1)
Здравствуйте, SaZ, Вы писали:

SaZ>Возможно уже есть какие-то решения, которые позволят не изобретать велосипед с нуля? В качестве выхлопа нужен именно си, не си++.


Ещё наверное не просто абы что абы как генерить, а по какому-то исходному описанию — DSL? Непонятно, что на входе, что на выходе.

Начал писать ответ, но что-то разошелся, и решил пост в свою жежешечу запилить

https://trampampamparam.livejournal.com/18914.html
Маньяк Робокряк колесит по городу
Re: Библиотека для кодогеренации?
От: Bill Baklushi СССР  
Дата: 04.09.20 20:52
Оценка:
SaZ:



SaZ>Нужно генерировать .h / .c файлы с функциями, а так же заполнять некоторые массивы (типа пара указатель на функцию + строка с описанием).

SaZ>Возможно уже есть какие-то решения, которые позволят не изобретать велосипед с нуля? В качестве выхлопа нужен именно си, не си++.

Есть некий трюк, не помню как называется, что-то вроде C include template.
Смысл таков.

1. Описываешь дефайны.
2. #include "impl.c"
В котором эти дефайны используются, в том числе формируются имена функций и структур.
3. #undef
4. GOTO 1.

Во тут
https://stackoverflow.com/questions/10950828/simulation-of-templates-in-c-for-a-queue-data-type
Второй ответ сверху.
Модератор-националист Kerk преследует оппонентов по политическим мотивам.
Re[2]: Библиотека для кодогеренации?
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 05.09.20 06:46
Оценка:
Здравствуйте, Bill Baklushi, Вы писали:

BB>Есть некий трюк, не помню как называется, что-то вроде C include template.

BB>Смысл таков.

Это сишные "шаблоны" для нищих
Маньяк Робокряк колесит по городу
Re: Библиотека для кодогеренации?
От: Pzz Россия https://github.com/alexpevzner
Дата: 05.09.20 16:00
Оценка:
Здравствуйте, SaZ, Вы писали:

SaZ>Возможно уже есть какие-то решения, которые позволят не изобретать велосипед с нуля? В качестве выхлопа нужен именно си, не си++.


Я как-то всегда для этих целей простым советским printf'ом обходился. Ну, с небольшими самодельными прибамбасами, чтобы рутиные веши, типа формирования отступов, автоматизировать (читабельность выхлопа совершенно не важна с точки зрения его исполнения, но очень сильно помогает отлаживать его генератора).

И есть еще один момент. В зависимости от решаемой задачи, иногда имеет смысл генерировать именно код, а иногда — таблицы, с которым будет работать код, написанный руками. Причем второе встречается чаще, чем первое (по крайней мере, по моему опыту).
Re[2]: Библиотека для кодогеренации?
От: SaZ  
Дата: 09.09.20 12:53
Оценка:
Здравствуйте, Marty, Вы писали:

M>...

M>Ещё наверное не просто абы что абы как генерить, а по какому-то исходному описанию — DSL? Непонятно, что на входе, что на выходе.

То что скормить на вход — отдельная задача. Часть будет лежать в виде json/xml (вероятно), но основная масса — это сишный код: сигнатуры функий, doxygen комменты в определённом формате.
Есть написанный на коленке прототип, аля moc из Qt, но он не учитывает макросы и вполне вероятно что изобилирует косяками.
Часть данных для генерации будет задаваться из вне, с форматом пока не определились.

M>Начал писать ответ, но что-то разошелся, и решил пост в свою жежешечу запилить

M>https://trampampamparam.livejournal.com/18914.html

Спасибо, почитаю
Re[2]: Библиотека для кодогеренации?
От: SaZ  
Дата: 09.09.20 12:56
Оценка:
Здравствуйте, Bill Baklushi, Вы писали:

BB>SaZ:




SaZ>>Нужно генерировать .h / .c файлы с функциями, а так же заполнять некоторые массивы (типа пара указатель на функцию + строка с описанием).

SaZ>>Возможно уже есть какие-то решения, которые позволят не изобретать велосипед с нуля? В качестве выхлопа нужен именно си, не си++.

BB>Есть некий трюк, не помню как называется, что-то вроде C include template.

BB>Смысл таков.

BB>1. Описываешь дефайны.

BB>2. #include "impl.c"
BB>В котором эти дефайны используются, в том числе формируются имена функций и структур.
BB>3. #undef
BB>4. GOTO 1.

BB>Во тут

BB>https://stackoverflow.com/questions/10950828/simulation-of-templates-in-c-for-a-queue-data-type
BB>Второй ответ сверху.

Не прокатит, увы. С тем же успехом можно gnu gengen приспособить. Код будет зависеть от внешних данных, которые скорее всего придут в виде json.
Re[2]: Библиотека для кодогеренации?
От: SaZ  
Дата: 09.09.20 12:58
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>Здравствуйте, SaZ, Вы писали:


SaZ>>Возможно уже есть какие-то решения, которые позволят не изобретать велосипед с нуля? В качестве выхлопа нужен именно си, не си++.


Pzz>Я как-то всегда для этих целей простым советским printf'ом обходился. Ну, с небольшими самодельными прибамбасами, чтобы рутиные веши, типа формирования отступов, автоматизировать (читабельность выхлопа совершенно не важна с точки зрения его исполнения, но очень сильно помогает отлаживать его генератора).


Pzz>И есть еще один момент. В зависимости от решаемой задачи, иногда имеет смысл генерировать именно код, а иногда — таблицы, с которым будет работать код, написанный руками. Причем второе встречается чаще, чем первое (по крайней мере, по моему опыту).


Так и есть. Мне надо генерить преимущественно таблицы и поиск по ним. В том числе таблицы функций. И в меру хитрые связи между ними, в зависимости от исходных данных. Нашёл тулзу gnu gengen, но поверх неё достаточно много нужно допиливать, так что пока действительно склоняюсь к ручной кодогенерации.
Re[3]: Библиотека для кодогеренации?
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 09.09.20 21:00
Оценка:
Здравствуйте, SaZ, Вы писали:

SaZ>То что скормить на вход — отдельная задача. Часть будет лежать в виде json/xml (вероятно), но основная масса — это сишный код: сигнатуры функий, doxygen комменты в определённом формате.


Плюсовый код (и самопровозглашенный IDL) пару раз парсил, в тч и doxygen комменты (с поддержкой формата javadoc и qt). Но это давно было. Тогда ничего хорошего не нашел. Сейчас может стоит посмотреть в сторону llvm и его плюсового фронтэнда. Ну, коменты наверное придётся самому парсить, но это уже на 2 порядка проще, чем парсить всё.


SaZ>Есть написанный на коленке прототип, аля moc из Qt, но он не учитывает макросы и вполне вероятно что изобилирует косяками.


Недельку плотно посидеть


SaZ>Часть данных для генерации будет задаваться из вне, с форматом пока не определились.


Это вообще мелочь


M>>Начал писать ответ, но что-то разошелся, и решил пост в свою жежешечу запилить

M>>https://trampampamparam.livejournal.com/18914.html

SaZ>Спасибо, почитаю


Чутка дописал там, и запилил пост тут
Автор: Marty
Дата: 09.09.20
. Велкам
Маньяк Робокряк колесит по городу
Re[4]: Библиотека для кодогеренации?
От: SaZ  
Дата: 10.09.20 13:04
Оценка:
Здравствуйте, Marty, Вы писали:

M>Здравствуйте, SaZ, Вы писали:

SaZ>>То что скормить на вход — отдельная задача. Часть будет лежать в виде json/xml (вероятно), но основная масса — это сишный код: сигнатуры функий, doxygen комменты в определённом формате.

M>Плюсовый код (и самопровозглашенный IDL) пару раз парсил, в тч и doxygen комменты (с поддержкой формата javadoc и qt). Но это давно было. Тогда ничего хорошего не нашел. Сейчас может стоит посмотреть в сторону llvm и его плюсового фронтэнда. Ну, коменты наверное придётся самому парсить, но это уже на 2 порядка проще, чем парсить всё.


Мне ещё проще, у нас си, без плюсов. Если точнее gnu c99. Благодарю ещё раз.
Re: Библиотека для кодогеренации?
От: kaa.python Ниоткуда РСДН профессионально мёртв и завален ватой.
Дата: 16.09.20 10:27
Оценка:
Здравствуйте, SaZ, Вы писали:

SaZ>Всем здравствуйте,


SaZ>На проекте достаточно много однотипных функций (типа юнит тестов и некоторого сдк).

SaZ>Нужно генерировать .h / .c файлы с функциями, а так же заполнять некоторые массивы (типа пара указатель на функцию + строка с описанием).

SaZ>Возможно уже есть какие-то решения, которые позволят не изобретать велосипед с нуля? В качестве выхлопа нужен именно си, не си++.


Да, вполне. Очень хорошо подходит Jinja2, можно довольно продвинутый плюсовый код генерировать, что я в некоторых проектах и делал.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.