Skip to main content

A simple code generator library

Project description

Code Generator

Simple and straightforward code generator for creating C++ code. It also could be used for generating code in any programming language.

Every C++ element could render its current state to a string that could be evaluated as a legal C++ construction. Some elements could be rendered to a pair of representations (C++ classes and functions declaration and implementation)

Usage examples

C++ Variables

Python code:

var_count = Variable(name='count', type='int').val(0)
var_pi = Variable(name='pi', type='float').val(3.14)
var_title = Variable(name='title', type='const char *').val('Title:')
source = Source('main.cpp').add(var_count).add(var_pi).add(var_title)
str(source)

Generated C++ code:

int count = 0;
float pi = 3.14;
const char * title = "Title:";

top

C++ Functions

Python code:

def factorial_definition():
  return 'return n < 1 ? 1 : (n * factorial(n - 1));'

factorial_function = Function(name='factorial', type='int')
  .arg('int n')
  .impl(factorial_definition)

source = Source('main.cpp').add(factorial_function)
str(source)

Generated C++ code:

int factorial(int n)
{
    return n <= 1 ? 1 : (n * factorial(n - 1));
}

top

C++ Classes and Structures

Python code:

var_name = Variable(name='name', type='std::string')
fn_getname = Function(name='GetName', type='std::string', qualifiers=['const']).impl('return name;')
fn_setname = Function(name='SetName').arg('std::string & new_name').impl('name = new_name;')

cls_person = Class(name='Person')
  .member(var_name, scope='private')
  .method(fn_getname, scope='public')
  .method(fn_setname, scope='public')

header = Header('Person.h').add(cls_person)
source = Source('Person.cpp').include(header).add(cls_person)
str(header)
str(source)

Generated C++ code for Person.h:

class Person
{
public:
    std::string GetName() const;
    void SetName(std::string & name);
private:
    std::string name;
};

Generated C++ code for Person.cpp:

std::string Person::GetName() const
{
    return name;
}

void Person::SetName(std::string & new_name)
{
    name = new_name;
}

top

Maintainers

See DEVELOPERS.md

top

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

erichschroeter_code_generator-0.1.0.tar.gz (10.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

erichschroeter.code_generator-0.1.0-py3-none-any.whl (13.2 kB view details)

Uploaded Python 3

File details

Details for the file erichschroeter_code_generator-0.1.0.tar.gz.

File metadata

File hashes

Hashes for erichschroeter_code_generator-0.1.0.tar.gz
Algorithm Hash digest
SHA256 d054c47f35eac2d024f61f9e73e43ed0fc83803bc0e176b60513242cbf5fe0ac
MD5 1d27bf6edb6c665579a815ceb7b58790
BLAKE2b-256 dbb4db4ff448f4dfdfefaeb2fc26d734c0069f1bffc3ad334cf01e1aa62afb7c

See more details on using hashes here.

File details

Details for the file erichschroeter.code_generator-0.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for erichschroeter.code_generator-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 823434292c87eecf4faa44f70503b968ad76ecc057d9333f6c00660e8de2473b
MD5 0bc7fe7382e5fbaf8396c68a89afc7c5
BLAKE2b-256 a0c82436cb94111f8e69b55fd60098a20a6eed6ada1bd4a7c158e417eb9dec2b

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page