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.
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.
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.
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.
OpenQASM treats all whitespace characters, such as spaces, tabs, and newlines, as inconsequential. This means that quantum operations remain unaffected by formatting.
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
In OpenQASM, identifiers are user-defined names for variables, registers, and other entities. To be valid, they must conform to a few simple rules:
_
).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.