Intermediate Compute Language with OpenCL/CUDA Backends
C C++ Other
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
cbpp
lib
LICENSE
README.md

README.md

ComputeBridge

The Library

A "loose" Lexer/Parser can transform a shared subset of similar languages into a stream of tokens with an associated high-level Abstract Syntax Tree (AST). This can be used to rewrite source files independently for each target, allowing (in this case) a simple compute language that can rewrite to either CUDA or OpenCL.

The loose nature of the parser allows it to be simple and faster than a complete parser. It gives more control over modifications than a typical C/C++ pre-processor would, generating an AST that includes:

  • Preprocessor directives (you have the option of running a preprocessor before you feed your source file to the library).
  • Statements and statement blocks.
  • Function declarations/definitions with their bodies, parameters and any extra C++ decoration (e.g. const, throw).
  • Data structure declarations/definitions with their names and tags.
  • Type definitions/aliases.
  • C++ classes with their associated constructors/destructors.
  • Templated C++ classes or functions.
  • Whitespace is preserved for accurate rewriting.

Within these AST nodes the source file is further broken into tokens that include numbers, symbols, operators and keywords.