Module qasm3

Source
Expand description

QASM3 meta program representation and parsing.

This module contains structures and enums for representing QASM3 programs as well as a parser. The structures and enums are designed to be convertible to QASM3 string.

§Example

use qurust::qasm3::ir;
use qurust::qasm3::ir::AsQasmStr;

// Generate a random bit program:
// ```
// OPENQASM 3.0;
//
// gate h q {
//     U(pi / 2, 0, pi) q;
//     gphase(pi / -4);
// }
//
// qubit q;
// h q;
// bit c = measure q;

fn random_bit_program() -> String {
    ir::Program::new(
        Some(ir::Version::new("3.0".to_string())),
        vec![
            ir::Gate::newt(
                ir::Identifier::new("h".to_string()),
                vec![],
                vec![ir::Identifier::new("q".to_string())],
                ir::Scope::newt(vec![
                    ir::GateCall::newt(
                        vec![],
                        ir::Identifier::new("U".to_string()),
                        vec![
                            ir::BinaryOperation::newt(
                                ir::BinaryOperator::Div,
                                ir::Identifier::newt("pi".to_string()),
                                ir::Literal::DecimalInteger(2).into(),
                            ),
                            ir::Literal::DecimalInteger(0).into(),
                            ir::Identifier::newt("pi".to_string()),
                        ],
                        None,
                        vec![ir::Identifier::newt("q".to_string())],
                    ),
                    ir::GateCall::newt(
                        vec![],
                        ir::Identifier::new("gphase".to_string()),
                        vec![ir::BinaryOperation::newt(
                            ir::BinaryOperator::Div,
                            ir::Identifier::newt("pi".to_string()),
                            ir::Literal::DecimalInteger(-4).into(),
                        )],
                        None,
                        vec![],
                    ),
                ]),
            ),
            ir::QuantumDeclaration::newt(
                ir::Qubit::newt(None),
                ir::Identifier::new("q".to_string()),
            ),
            ir::GateCall::newt(
                vec![],
                ir::Identifier::new("h".to_string()),
                vec![],
                None,
                vec![ir::Identifier::newt("q".to_string())],
            ),
            ir::ClassicalDeclaration::newt(
                ir::Scalar::Bit(None).into(),
                ir::Identifier::newt("c".to_string()),
                Some(ir::Measure::newt(ir::Identifier::newt("q".to_string()))),
            ),
        ],
    ).as_qasm_str()
}

Modules§

ir
Module ir contains structures and enums for QASM3 programs representation.
parser
Module parser enables us to parse QASM3 programs from string into IR.