cheburgenС уважением, Сергей Деревяго.
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 |
А именно:
generated.out по шаблону template.clon (чебурлон), используя конфиг config.cfig (чебурфиг).
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 |
И обратим внимание:
NumberBetweenBrackets должна присутствовать всегда! Понеже число между скобками.
Copyright состоит из нескольких строк. И поэтому вместо = мы используем =[0[. Ну а нолик понятно откуда берется.
Namespace и Class. Ай, чего говорить.
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 здесь просто для примера. А можно стаж старухи Шапокляк.
Никакая часть данного материала не может быть использована в коммерческих целях без письменного разрешения автора.