Сергей Деревяго

CheburGen: суверенный кодогенератор



1. Введение

Когда враги нам все отрубят, то Чебурген не подведет!

С уважением, Сергей Деревяго.


2. Утилита cheburgen

Чебурген -- простой надежный кодогенератор без внешних зависимостей:

> cheburgen
CheburGen v1.0 (2026-08-29), sovereign code generator, freeware
Copyright (c) Sergey P. Derevyago

Usage:
cheburgen g config.cfig template.clon generated.out
cheburgen w file.in words.out

А именно:

Если все очевидно, то пора и примеры знать!

Не надоело ли руками создавать десятки файлов одинаковой структуры? Ну так применим шаблонный подход:

file1.clon
[0[Copyright]0]

#pragma once
#include <ders/detail/config.hpp>

namespace [0[Namespace]0] {

class [0[Class]0] {

 public:

 private:

};

}  // namespace [0[Namespace]0]

Ага, вот эти вот смешные скобочки и нолики тут означают, что [0[SomeName]0] в процессе генерации будет заменено на содержимое константы в чебурфиге...

Не удивительно? Тогда рассмотрим чебурфиг:

file1.cfig
# mandatory variable
NumberBetweenBrackets = 0

Copyright =[0[/*
 * Copyright (c) Sergey P. Derevyago, 2026.
 *
 * Distributed under the Boost Software License, Version 1.0.
 * http://www.boost.org/LICENSE_1_0.txt
 *
 */]0]

Namespace = ders
Class = Shape

И обратим внимание:

Вот и все, вызываем cheburgen g file1.cfig file1.clon file1.hpp и любуемся:

file1.hpp
/*
 * Copyright (c) Sergey P. Derevyago, 2026.
 *
 * Distributed under the Boost Software License, Version 1.0.
 * http://www.boost.org/LICENSE_1_0.txt
 *
 */

#pragma once
#include <ders/detail/config.hpp>

namespace ders {

class Shape {

 public:

 private:

};

}  // namespace ders

Не интересно? Тогда давайте подсчитаем в нем слова посредством cheburgen w file1.hpp words.out:

ders		3
namespace	2
Boost		1
Copyright	1
Derevyago	1
Distributed	1
LICENSE_1_0	1
License		1
P		1
Sergey		1
Shape		1
Software	1
Version		1
boost		1
c		1
class		1
config		1
detail		1
hpp		1
http		1
include		1
once		1
org		1
pragma		1
private		1
public		1
the		1
txt		1
under		1
www		1

И уже интересно, зачем это надо!

Так ведь удобно на этапе, когда готовим чебурлон: частота использования слова дает хорошую подсказку, кого бы сдвинуть в чебурфиг.

А напоследок мы помянем NumberBetweenBrackets...

Как ни смешно, но синтаксис -- больной вопрос ВСЕХ кодогенераторов. И кто бы не выдумал что там себе, повсечасно есть шанс, что эти символы уже используются, и на этапе генерации вы получаете хмырной сюрприз!

А если нужен чебурфиг на чебурфиге?

У Чебургена есть завидное решение: NumberBetweenBrackets. Раз вы всегда его определяете, то изменить не поимеется проблемой:

file2.cfig
# mandatory variable
NumberBetweenBrackets = 31

Nested =[31[# mandatory variable
NumberBetweenBrackets = 0

Copyright =[0[/*
 * Copyright (c) Sergey P. Derevyago, 2026.
 *
 * Distributed under the Boost Software License, Version 1.0.
 * http://www.boost.org/LICENSE_1_0.txt
 *
 */]0]

Namespace = ders
Class = Shape]31]

31 здесь просто для примера. А можно стаж старухи Шапокляк.


3. Заключение

С Днем программиста!

4. Глоссарий

Чебурген -- суверенный кодогенератор.
чебурлон -- чебурген-шаблон.
чебурфиг -- чебурген-конфиг.

Copyright © С. Деревяго, 2026

Никакая часть данного материала не может быть использована в коммерческих целях без письменного разрешения автора.