This document provides detailed API documentation for the OpenQASM Compiler. The API is organized into several main components:
- Parser
- AST (Abstract Syntax Tree)
- IR (Intermediate Representation)
- Optimizer
- Quantum Circuit
- Simulator
class Parser {
public:
// Constructors
Parser();
explicit Parser(const std::string& filename);
// Main parsing methods
ASTNode* parse(const std::string& input);
ASTNode* parseFile(const std::string& filename);
// Error handling
std::vector<Error> getErrors() const;
bool hasErrors() const;
};parse(const std::string& input): Parses OpenQASM code from a stringparseFile(const std::string& filename): Parses OpenQASM code from a filegetErrors(): Returns a list of parsing errorshasErrors(): Checks if any errors occurred during parsing
class ASTNode {
public:
// Node type enumeration
enum class Type {
Module,
Include,
GateDeclaration,
GateCall,
QubitDeclaration,
ClassicalDeclaration,
// ... other types
};
// Constructors
ASTNode(Type type);
ASTNode(Type type, const std::string& value);
// Node manipulation
void addChild(std::unique_ptr<ASTNode> child);
const std::vector<std::unique_ptr<ASTNode>>& getChildren() const;
// Node properties
Type getType() const;
std::string getValue() const;
void setValue(const std::string& value);
};addChild(): Adds a child nodegetChildren(): Returns all child nodesgetType(): Returns the node typegetValue(): Returns the node value
class IRBuilder {
public:
// Construction
IRBuilder(ASTNode* root);
// IR generation
std::unique_ptr<IRModule> build();
// Optimization
void optimize();
};build(): Builds IR from ASToptimize(): Applies optimizations to IR
class QuantumCircuit {
public:
// Construction
explicit QuantumCircuit(size_t num_qubits);
// Gate operations
void addGate(std::unique_ptr<QuantumGate> gate);
void apply();
// Measurement
std::vector<bool> measure();
std::vector<double> getProbabilities() const;
// Circuit properties
size_t getNumQubits() const;
size_t getDepth() const;
size_t getWidth() const;
};addGate(): Adds a quantum gate to the circuitapply(): Applies all gates in the circuitmeasure(): Performs measurement on all qubitsgetProbabilities(): Returns probability distribution
class QuantumSimulator {
public:
// Construction
explicit QuantumSimulator(size_t num_qubits);
// Simulation
void simulate(const QuantumCircuit& circuit);
void simulate(const QuantumCircuit& circuit, size_t shots);
// State access
std::vector<std::complex<double>> getState() const;
double getExpectationValue(const Observable& observable) const;
// Noise models
void setNoiseModel(NoiseModel model, double parameter);
};simulate(): Simulates a quantum circuitgetState(): Returns the current quantum stategetExpectationValue(): Calculates expectation valuesetNoiseModel(): Configures noise model
-
Memory Usage
- State vector size grows exponentially with qubit count
- Use sparse representations for large circuits
- Consider using GPU acceleration for large simulations
-
Computation Time
- Gate application complexity: O(2^n) for n qubits
- Measurement complexity: O(2^n)
- Optimization can reduce circuit depth
-
Optimization Tips
- Use circuit optimization before simulation
- Consider approximate methods for large circuits
- Use appropriate noise models for realistic simulation
#include "OpenQASMCompiler/parser.hpp"
#include "OpenQASMCompiler/quantum_circuit.hpp"
#include "OpenQASMCompiler/quantum_simulator.hpp"
int main() {
// Parse OpenQASM code
Parser parser;
auto ast = parser.parse("OPENQASM 2.0; include \"qelib1.inc\"; qreg q[2]; h q[0]; cx q[0],q[1];");
// Build quantum circuit
QuantumCircuit circuit(2);
// ... add gates from AST
// Simulate circuit
QuantumSimulator simulator(2);
simulator.simulate(circuit, 1000);
// Get results
auto probabilities = simulator.getProbabilities();
return 0;
}