Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/tekord/cpp-opcode-generator

A python script for generating enums with opcode constants based on YAML file definition
https://github.com/tekord/cpp-opcode-generator

compilers cpp emulation generators opcode programming-language-development python rust virtual-machine

Last synced: about 2 months ago
JSON representation

A python script for generating enums with opcode constants based on YAML file definition

Awesome Lists containing this project

README

        

# Opcode constant generator for C, C++ and Rust programming languages

A python script for generating enums with opcode constants based on YAML file definition. It may be useful for
virtual machine developers. Defining opcodes in external file instead of direct C++/Rust enum has some advantages:

1. It is easier to read. Definition file contains only relevant information, no C++ code.
2. You can automate a documentation building.
3. Opcode definition is isolated from your virtual machine implementation, so you can use it in non-C++ implementation
(of course you'll have to modify this script a little bit).

Written on Python 3.

## Installation

Execute the following command to install dependencies:

```
pip install -r requirements.txt
```

## Usage

Copy the `opcodes.example.yaml` file to your application's folder, define all the opcodes you need in this file.
Then run the script with the following arguments:

```
python main.py [--output path/to/file]
```

where `opcode-list` is a path to file with opcodes (.yaml file); `language` is one of the following options: `c`,
`cpp`, `rust`; `--output` specified the output file path. If the `output` option is not provided then result will
be printed to the standard output.

The result may look like this:

```cpp
enum _GeneratedOpCodes {
OPCODE_NOP = 0x00,
OPCODE_B = 0xA0,
OPCODE_BZ = 0xA1,
OPCODE_B_FALSE = 0xA1 /* alias for BZ */,
OPCODE_B_ZERO = 0xA1 /* alias for BZ */,
OPCODE_B_NULL = 0xA1 /* alias for BZ */,
OPCODE_BNZ = 0xA2,
OPCODE_B_TRUE = 0xA2 /* alias for BNZ */,
OPCODE_B_NOT_ZERO = 0xA2 /* alias for BNZ */,
OPCODE_B_NOT_NULL = 0xA2 /* alias for BNZ */
};
```