Skip to content

tekord/cpp-opcode-generator

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

12 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Opcode constant generator for C++

This script generates C++ header file 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++ enum has some advantages:

  1. It is easier to read. Definition file contains only relevant information, no C++ code.
  2. You can automate the building of documentation.
  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:

pip3 install -r requirements.txt 

Usage

Copy opcodes.example.yaml file to your application's folder, define all opcodes you need in this file. Then run the script with specified input and output files like this:

python /path/to/script/main.py path/to/opcodes.yaml /path/to/template opcodes.hpp

The first argument is a path to file with opcodes. The second argument is a path to template file (look at the templates directory). The third argument is a C++ header file name which will be generated by the script. The result constant list may look like this:

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 */ };

About

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

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •  

Languages