OpenQASM Syntax Essentials

    Understanding the syntax of OpenQASM is paramount when learning to write quantum programs. Because OpenQASM builds on the foundation of QASM and takes inspiration from classical languages like C and Assembly, it has a structured set of rules for defining the behavior of quantum computers. This chapter is focused on introducing the basic syntax rules of OpenQASM.

    Statements: The Building Blocks

    In OpenQASM, a statement is an instruction that dictates a specific action to be carried out. A program is essentially a collection of statements, and each must end with a semicolon (;) to mark its conclusion.

    Formatting Statements

    You can write a series of statements on separate lines for better readability:

    statement1;
    statement2;
    statement3;
    

    or on the same line:

    statement1; statement2; statement3; // Although valid, this is less readable
    

    It is recommended to use the former method to enhance code clarity.

    Experiment: A Simple OpenQASM Program

    This is a complete program showcasing multiple OpenQASM statements, each performing a distinct quantum operation. 12345678

    Diagram

    // PhotonQ Experiment: A Simple OpenQASM Program [^8] OPENQASM 2.0; // Specifies the OpenQASM version [^1] include "qelib1.inc"; // Includes the standard library [^2] // Declaration of quantum and classical registers qreg qubits[2]; // Defines a quantum register with two qubits [^3] creg ans[2]; // Defines a classical register with two bits [^4] // Quantum gate application h qubits[0]; // Applies a Hadamard gate to the first qubit [^5] x qubits[1]; // Applies a Pauli-X gate to the second qubit [^6] // Measure the qubit and save the result in the classical bit measure qubits[0] -> ans[0]; // Measurement command [^7] measure qubits[1] -> ans[1]; // Measurement command [^7]

    Translation

    Powered by Perceval, Qiskit, PyZX

    Not run yet

    Simulation

    Not run yet

    The actions performed by these statements will be elaborated upon in later chapters.

    Whitespace: A Non-Issue for OpenQASM

    OpenQASM treats all whitespace characters, such as spaces, tabs, and newlines, as inconsequential. This means that quantum operations remain unaffected by formatting.

    Ignoring Whitespace

    These code examples demonstrate that whitespace does not change the logic of a program:

    qreg qubits[2]; h qubits[0]; // Compact but valid
    
    qreg qubits[2];              h qubits[0]; // Spread out, and still valid
    

    Identifiers: Naming in OpenQASM

    In OpenQASM, identifiers are user-defined names for variables, registers, and other entities. To be valid, they must conform to a few simple rules:

    • Begin with a lowercase letter.
    • Include only alphanumeric characters and underscores (_).
    • Not coincide with a reserved keyword.

    Valid examples: q, c, q0, q_, q_0. Invalid examples: Q, C, Q0, _Q, 0_q.

    Keep in mind that OpenQASM is case-sensitive; identifiers like q_a and q_A represent different entities.

    As you continue to navigate through this guide, these syntax fundamentals will become second nature, and soon you'll be leveraging OpenQASM to express complex quantum algorithms.

    Footnotes

    1. Version String Documentation

    2. Include Documentation

    3. Quantum Registers Documentation

    4. Classical Registers Documentation

    5. Hadamard Gate Documentation

    6. Pauli-X Gate Documentation

    7. Measurement Documentation

    8. Experiment: A Simple OpenQASM Program

    Version String
    Include

    Exploring

    Quantum Frontiers

    Register Now

    Join us on our journey to push the boundaries of quantum computing and unlock the potential of this transformative technology, as we strive to make quantum accessible to all and shape the future of computing.

    Links

    DocumentationExperimentsImprintContact

    Copyright © 2023 Walther Group, Faculty of Physics, University of Vienna. All rights reserved.