Module Quantumlib.Qasm

Abstract Syntax Tree of OpenQASM

type t = {
  1. version : nnint * nnint;
  2. body : stmt list;
}

Type of Qasm programs

and stmt =
  1. | Qreg of id * nnint
  2. | Creg of id * nnint
  3. | GateDecl of id * id list * id list * gop list
  4. | Qop of qop
  5. | If of id * nnint * qop
  6. | Opaque of id * id list * id list
  7. | Barrier of arg list

Type of Qasm statements

and gop =
  1. | G_uop of uop
  2. | G_barrier of id list

Gate operators

and qop =
  1. | Q_uop of uop
  2. | Q_measure of arg * arg
  3. | Q_reset of arg

Quantum operators

and uop =
  1. | U of expr list * arg
  2. | CX of arg * arg
  3. | App of id * expr list * arg list
and id =
  1. | Id of string

Identifiers

and nnint =
  1. | Nnint of int

Non-negative integers

and arg =
  1. | A_id of id * nnint option

Arguments of the operators

and expr =
  1. | E_cst of float
  2. | E_int of nnint
  3. | E_Pi
  4. | E_id of id
  5. | E_bop of binaryop * expr * expr
  6. | E_uop of unaryop * expr

Expressions over reals

and binaryop =
  1. | ADD
  2. | MUL
  3. | SUB
  4. | DIV
  5. | POW

Binary operations

and unaryop =
  1. | SIN
  2. | COS
  3. | TAN
  4. | EXP
  5. | NEG
  6. | LN
  7. | SQRT
  8. | INV

Unary operations

Pretty printers

val string_of_id : id -> string
val int_of_nnint : nnint -> int
val string_of_list : ?sep:string -> ('a -> string) -> 'a0 list -> string
val string_of_stmt : stmt -> string
val string_of_qop : qop -> string
val string_of_uop : uop -> string
val string_of_gop : gop -> string
val string_of_expr : expr -> string
val string_of_unary : unaryop -> string
val string_of_binary : binaryop -> string
val string_of_arg : arg -> string
val string_of_ids : id list -> string
val string_of_stmts : bool -> stmt list -> string
val string_of_qasm : t -> string