uniqc.compile.qasm.qasm_line_parser module¶
OpenQASM 2.0 line parser module.
This module provides regex-based parsing for individual OpenQASM 2.0 lines, supporting qreg/creg definitions, 1-4 qubit gates, parameterized gates, and measurements.
- Key exports:
OpenQASM2_LineParser: Parser class for individual OpenQASM 2.0 lines.
- class uniqc.compile.qasm.qasm_line_parser.OpenQASM2_LineParser[source]¶
Bases:
objectParser for individual OpenQASM 2.0 lines.
Provides regex-based parsing for OpenQASM 2.0 statements including qreg/creg definitions, 1-4 qubit gates, parameterized gates, and measurements.
- any_parameters = '\\(([^()]+)\\)'¶
- blank = ' *'¶
- comma = ','¶
- static handle_1q(line)[source]¶
Parse a 1-qubit gate line.
- Returns:
(op_name, qreg_name, qubit_index)
- Return type:
tuple
- static handle_1q1p(line)[source]¶
Parse a 1-qubit 1-parameter gate line.
- Returns:
(op_name, parameters, qreg_name, qubit_index)
- Return type:
tuple
- static handle_1q2p(line)[source]¶
Parse a 1-qubit 2-parameter gate line.
- Returns:
(op_name, parameters, qreg_name, qubit_index)
- Return type:
tuple
- static handle_1q3p(line)[source]¶
Parse a 1-qubit 3-parameter gate line.
- Returns:
(op_name, parameters, qreg_name, qubit_index)
- Return type:
tuple
- static handle_1q4p(line)[source]¶
Parse a 1-qubit 4-parameter gate line.
- Returns:
(op_name, parameters, qreg_name, qubit_index)
- Return type:
tuple
- static handle_1qnp(line, n_parameters)[source]¶
Parse a 1-qubit n-parameter gate line.
- Parameters:
line – QASM line.
n_parameters – Expected number of parameters.
- Returns:
(op_name, parameters, qreg_name, qubit_index)
- Return type:
tuple
- static handle_2q(line)[source]¶
Parse a 2-qubit gate line.
- Returns:
(op_name, qreg_name1, qubit_index1, qreg_name2, qubit_index2)
- Return type:
tuple
- static handle_2q1p(line)[source]¶
Parse a 2-qubit 1-parameter gate line.
- Returns:
(op_name, parameters, qreg_name1, qubit_index1, qreg_name2, qubit_index2)
- Return type:
tuple
- static handle_2q2p(line)[source]¶
Parse a 2-qubit 2-parameter gate line.
- Returns:
(op_name, parameters, qreg_name1, qubit_index1, qreg_name2, qubit_index2)
- Return type:
tuple
- static handle_2q3p(line)[source]¶
Parse a 2-qubit 3-parameter gate line.
- Returns:
(op_name, parameters, qreg_name1, qubit_index1, qreg_name2, qubit_index2)
- Return type:
tuple
- static handle_2q4p(line)[source]¶
Parse a 2-qubit 4-parameter gate line.
- Returns:
(op_name, parameters, qreg_name1, qubit_index1, qreg_name2, qubit_index2)
- Return type:
tuple
- static handle_2qnp(line, n_parameters)[source]¶
Parse a 2-qubit n-parameter gate line.
- Parameters:
line – QASM line.
n_parameters – Expected number of parameters.
- Returns:
(op_name, parameters, qreg_name1, qubit_index1, qreg_name2, qubit_index2)
- Return type:
tuple
- static handle_3q(line)[source]¶
Parse a 3-qubit gate line.
- Returns:
(op_name, qreg_name1, qubit_index1, qreg_name2, qubit_index2, qreg_name3, qubit_index3)
- Return type:
tuple
- static handle_3q1p(line)[source]¶
Parse a 3-qubit 1-parameter gate line.
- Returns:
(op_name, parameters, qreg_name1, qubit_index1, qreg_name2, qubit_index2, qreg_name3, qubit_index3)
- Return type:
tuple
- static handle_3q2p(line)[source]¶
Parse a 3-qubit 2-parameter gate line.
- Returns:
(op_name, parameters, qreg_name1, qubit_index1, qreg_name2, qubit_index2, qreg_name3, qubit_index3)
- Return type:
tuple
- static handle_3q3p(line)[source]¶
Parse a 3-qubit 3-parameter gate line.
- Returns:
(op_name, parameters, qreg_name1, qubit_index1, qreg_name2, qubit_index2, qreg_name3, qubit_index3)
- Return type:
tuple
- static handle_3q4p(line)[source]¶
Parse a 3-qubit 4-parameter gate line.
- Returns:
(op_name, parameters, qreg_name1, qubit_index1, qreg_name2, qubit_index2, qreg_name3, qubit_index3)
- Return type:
tuple
- static handle_3qnp(line, n_parameters)[source]¶
Parse a 3-qubit n-parameter gate line.
- Parameters:
line – QASM line.
n_parameters – Expected number of parameters.
- Returns:
(op_name, parameters, qreg_name1, qubit_index1, qreg_name2, qubit_index2, qreg_name3, qubit_index3)
- Return type:
tuple
- static handle_4q(line)[source]¶
Parse a 4-qubit gate line.
- Returns:
(op_name, qreg_name1, qubit_index1, qreg_name2, qubit_index2, qreg_name3, qubit_index3, qreg_name4, qubit_index4)
- Return type:
tuple
- static handle_creg(line)[source]¶
Parse a creg definition line.
- Parameters:
line – QASM line defining a classical register.
- Returns:
(register_name, size)
- Return type:
tuple
- static handle_measure(line)[source]¶
Parse a MEASURE statement line.
- Parameters:
line – QASM measure statement.
- Returns:
(qreg_name, qubit_index, creg_name, creg_index)
- Return type:
tuple
- static handle_parameters(parameters_str)[source]¶
Parse a parameter string into a list of floats.
- Parameters:
parameters_str – Comma-separated parameter expression string.
- Returns:
List of parsed parameter values.
- Return type:
list[float]
- static handle_qreg(line)[source]¶
Parse a qreg definition line.
- Parameters:
line – QASM line defining a quantum register.
- Returns:
(register_name, size)
- Return type:
tuple
- identifier = '([A-Za-z_][A-Za-z_\\d]*)'¶
- index = '\\[ *(\\d+) *\\]'¶
- static parse_line(line)[source]¶
Parse a single line of OpenQASM 2 code.
- Returns:
Gate name string or None q: Qubit spec — (qreg_name, qubit_index) for 1q, list for multi-q, or None c: Classical bit spec — (creg_name, creg_index) or None parameter: Parameter list (from handle_parameters) or None
- Return type:
operation
- qreg_str = '([A-Za-z_][A-Za-z_\\d]*) *\\[ *(\\d+) *\\] *'¶
- regexp_1q = re.compile('^([A-Za-z_][A-Za-z_\\d]*) *([A-Za-z_][A-Za-z_\\d]*) *\\[ *(\\d+) *\\] *$')¶
- regexp_1q_str = '^([A-Za-z_][A-Za-z_\\d]*) *([A-Za-z_][A-Za-z_\\d]*) *\\[ *(\\d+) *\\] *$'¶
- regexp_1qnp = re.compile('^([A-Za-z_][A-Za-z_\\d]*) *\\(([^()]+)\\) *([A-Za-z_][A-Za-z_\\d]*) *\\[ *(\\d+) *\\] *$')¶
- regexp_1qnp_str = '^([A-Za-z_][A-Za-z_\\d]*) *\\(([^()]+)\\) *([A-Za-z_][A-Za-z_\\d]*) *\\[ *(\\d+) *\\] *$'¶
- regexp_2q = re.compile('^([A-Za-z_][A-Za-z_\\d]*) *([A-Za-z_][A-Za-z_\\d]*) *\\[ *(\\d+) *\\] *, *([A-Za-z_][A-Za-z_\\d]*) *\\[ *(\\d+) *\\] *$')¶
- regexp_2q_str = '^([A-Za-z_][A-Za-z_\\d]*) *([A-Za-z_][A-Za-z_\\d]*) *\\[ *(\\d+) *\\] *, *([A-Za-z_][A-Za-z_\\d]*) *\\[ *(\\d+) *\\] *$'¶
- regexp_2qnp = re.compile('^([A-Za-z_][A-Za-z_\\d]*) *\\(([^()]+)\\) *([A-Za-z_][A-Za-z_\\d]*) *\\[ *(\\d+) *\\] *, *([A-Za-z_][A-Za-z_\\d]*) *\\[ *(\\d+) *\\] *$')¶
- regexp_2qnp_str = '^([A-Za-z_][A-Za-z_\\d]*) *\\(([^()]+)\\) *([A-Za-z_][A-Za-z_\\d]*) *\\[ *(\\d+) *\\] *, *([A-Za-z_][A-Za-z_\\d]*) *\\[ *(\\d+) *\\] *$'¶
- regexp_3q = re.compile('^([A-Za-z_][A-Za-z_\\d]*) *([A-Za-z_][A-Za-z_\\d]*) *\\[ *(\\d+) *\\] *, *([A-Za-z_][A-Za-z_\\d]*) *\\[ *(\\d+) *\\] *, *([A-Za-z_][A-Za-z_\\d]*) *\\[ *(\\d+) *\\] *$')¶
- regexp_3q_str = '^([A-Za-z_][A-Za-z_\\d]*) *([A-Za-z_][A-Za-z_\\d]*) *\\[ *(\\d+) *\\] *, *([A-Za-z_][A-Za-z_\\d]*) *\\[ *(\\d+) *\\] *, *([A-Za-z_][A-Za-z_\\d]*) *\\[ *(\\d+) *\\] *$'¶
- regexp_3qnp = re.compile('^([A-Za-z_][A-Za-z_\\d]*) *\\(([^()]+)\\) *([A-Za-z_][A-Za-z_\\d]*) *\\[ *(\\d+) *\\] *, *([A-Za-z_][A-Za-z_\\d]*) *\\[ *(\\d+) *\\] *, *([A-Za-z_][A-Za-z_\\d]*) *\\[ *(\\d+) *\\] *$')¶
- regexp_3qnp_str = '^([A-Za-z_][A-Za-z_\\d]*) *\\(([^()]+)\\) *([A-Za-z_][A-Za-z_\\d]*) *\\[ *(\\d+) *\\] *, *([A-Za-z_][A-Za-z_\\d]*) *\\[ *(\\d+) *\\] *, *([A-Za-z_][A-Za-z_\\d]*) *\\[ *(\\d+) *\\] *$'¶
- regexp_4q = re.compile('^([A-Za-z_][A-Za-z_\\d]*) *([A-Za-z_][A-Za-z_\\d]*) *\\[ *(\\d+) *\\] *, *([A-Za-z_][A-Za-z_\\d]*) *\\[ *(\\d+) *\\] *, *([A-Za-z_][A-Za-z_\\d]*) *\\[ *(\\d+) *\\] *, *([A-Za-z_][A-Za-z_\\d]*) *\\[ *)¶
- regexp_4q_str = '^([A-Za-z_][A-Za-z_\\d]*) *([A-Za-z_][A-Za-z_\\d]*) *\\[ *(\\d+) *\\] *, *([A-Za-z_][A-Za-z_\\d]*) *\\[ *(\\d+) *\\] *, *([A-Za-z_][A-Za-z_\\d]*) *\\[ *(\\d+) *\\] *, *([A-Za-z_][A-Za-z_\\d]*) *\\[ *(\\d+) *\\] *$'¶
- regexp_barrier = re.compile('^barrier *(([A-Za-z_][A-Za-z_\\d]*) *\\[ *(\\d+) *\\] *, *)*([A-Za-z_][A-Za-z_\\d]*) *\\[ *(\\d+) *\\] *$')¶
- regexp_barrier_str = '^barrier *(([A-Za-z_][A-Za-z_\\d]*) *\\[ *(\\d+) *\\] *, *)*([A-Za-z_][A-Za-z_\\d]*) *\\[ *(\\d+) *\\] *$'¶
- regexp_creg = re.compile('^creg *([A-Za-z_][A-Za-z_\\d]*) *\\[ *(\\d+) *\\] *$')¶
- regexp_creg_str = '^creg *([A-Za-z_][A-Za-z_\\d]*) *\\[ *(\\d+) *\\] *$'¶
- regexp_measure = re.compile('^measure *([A-Za-z_][A-Za-z_\\d]*) *\\[ *(\\d+) *\\] *(?:->|,) *([A-Za-z_][A-Za-z_\\d]*) *\\[ *(\\d+) *\\] *$')¶
- regexp_measure_register = re.compile('^measure *([A-Za-z_][A-Za-z_\\d]*) *(?:->|,) *([A-Za-z_][A-Za-z_\\d]*) *$')¶
- regexp_measure_register_str = '^measure *([A-Za-z_][A-Za-z_\\d]*) *(?:->|,) *([A-Za-z_][A-Za-z_\\d]*) *$'¶
- regexp_measure_str = '^measure *([A-Za-z_][A-Za-z_\\d]*) *\\[ *(\\d+) *\\] *(?:->|,) *([A-Za-z_][A-Za-z_\\d]*) *\\[ *(\\d+) *\\] *$'¶
- regexp_qreg = re.compile('^qreg *([A-Za-z_][A-Za-z_\\d]*) *\\[ *(\\d+) *\\] *$')¶
- regexp_qreg_str = '^qreg *([A-Za-z_][A-Za-z_\\d]*) *\\[ *(\\d+) *\\] *$'¶