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:


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


// PhotonQ Experiment: A Simple OpenQASM Program [^8] OPENQASM 2.0; // Specifies the OpenQASM version [^1] include ""; // 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]


Powered by Perceval, Qiskit, PyZX

Not run yet


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.


  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

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