Blackbird for C++ overview¶
The Blackbird C++ library provides a Blackbird parser class for parsing Blackbird code, as well as a utility function for automating this procedure given a Blackbird filename.
Visitor: the Blackbird visitor, which parses the abstract syntax tree using ANTLR4, evaluating expressions, extracting variables, and storing quantum program information.
While derived classes can be defined in order to modify the actions performed while parsing the tree, in general this is not needed. In most cases, it is sufficient to simply iterate through the returned information contained in the
parse_blackbird(): a utility function that automates the parsing of the Blackbird abstract syntax tree. Use this function to parse arbitrary Blackbird code, and return the
Source code overview¶
The Blackbird C++ library source code, contained in the folder
blackbird_cpp, contains the
Blackbird.h: the public Blackbird library header. Contains the
Visitordeclarations, as well as the utility function
parse_blackbird(), which automates the process of parsing a Blackbird script given a file stream, and return the Blackbird program.
Visitor.cpp: contains the source code for the
Visitoris a derived class of
blackbirdBaseVisitor, and provides ANTLR4 with actions to perform (e.g., evaluating expressions, storing variables, queuing quantum operations) as the abstract syntax tree is traversed.
If a new quantum operation or quantum device needs to be added, its initialization will need to be defined here in the corresponding node of the AST.
BlackbirdProgram.h: contains the declarations for
Operation, and all derived classes.
Each gate and measurement class is declared, including constructors, number of modes, number of parameters, and input/mode validation.
Each device class is declared, including constructors, the member function
print_device_info, and any required member variables, for instance \(\hbar\) or cutoff dimension, if applicable.
If a new quantum operation or quantum device needs to be added, its class declaration will need to be made here.
BlackbirdVariables.h: contains templates for setting and getting assigned Blackbird variables from a
std::unordered_map, with their name (
std::string) as the key. Also includes some basic automatic casting operations, and casting exceptions.
Autogenerated ANTLR4 headers and source.
These are generated automatically by compiling the ANTLR4 grammar
src/blackbird.g4(see Compiling the grammar), and should not be modified in any case. If they are modified, your changes will be overwritten once the grammar is re-compiled!