Привет, ЛОР!
Есть у меня такая задача - есть сишная структура:
struct foo_struct {
int8_t f8;
int32_t f32;
int64_t arr64[10];
};
т.е. только примитивные типы и массивы из них. Далее пользователь может захотеть сделать для нее некое представление, в котором просит из одного или арифметического выражения над несколькими полями структуры составить новые:
view foo_view {
name: "My field 1", type: string, from: f8, id: 500
name: "My field 2", type: int64, from: f8 * f32, id: 900
name: "Array field %i", type: string[], from: arr64, ids: 1000...
};
нужно на основе этих данных написать генератор сишного кода, который бы сделал мне такие функции:
int foo_view_get_by_id(struct foo_struct* stct, int id, void* to);
/* foo_view_get_by_name("Array field 8") должен вернуть to_str(arr64[8]) */
int foo_view_get_by_name(struct foo_struct* stct, const char* name, void* to);
сейчас что-то из этого делает наколеночный скрипт на awk, но этот подход давно себя исчерпал. как писать такой генератор? flex + bison + самописный генератор в С или что-то готовое уже есть?