19
19
from copy import deepcopy
20
20
import operator as op
21
21
from pyparsing import (Literal , Word , Group , Or , CharsNotIn , Optional ,
22
- nestedExpr , Suppress , removeQuotes , Empty ,
23
- cppStyleComment , cStyleComment , dblQuotedString , alphas ,
24
- alphanums , pyparsing_common )
22
+ OneOrMore , ZeroOrMore , nestedExpr , Suppress ,
23
+ removeQuotes , Empty , cppStyleComment , cStyleComment ,
24
+ dblQuotedString , alphas , alphanums , pyparsing_common )
25
25
26
26
from projectq .ops import All , Measure
27
27
@@ -412,8 +412,8 @@ def __init__(self, s, loc, toks):
412
412
self .qubits = [QubitProxy (qubit ) for qubit in toks [1 ]]
413
413
else :
414
414
param_str = s [loc :s .find (';' , loc )]
415
- self .params = param_str [param_str .find ('(' ) +
416
- 1 :param_str .rfind (')' )].split (',' )
415
+ self .params = param_str [param_str .find ('(' )
416
+ + 1 :param_str .rfind (')' )].split (',' )
417
417
self .qubits = [QubitProxy (qubit ) for qubit in toks [2 ]]
418
418
419
419
def eval (self , eng ):
@@ -567,8 +567,8 @@ class IfOp:
567
567
logical_bin_op = Or (
568
568
[greater , greater_equal , less , less_equal , equal , not_equal ])
569
569
570
- cond_expr = (CommonTokens .variable_expr .copy () + logical_bin_op +
571
- CharsNotIn ('()' ))
570
+ cond_expr = (CommonTokens .variable_expr .copy () + logical_bin_op
571
+ + CharsNotIn ('()' ))
572
572
573
573
def __init__ (self , if_str , loc , toks ):
574
574
"""
@@ -763,11 +763,12 @@ def __init__(self):
763
763
# Variable declarations
764
764
765
765
# e.g. qubit[10] qr, qs / int[5] i, j
766
- variable_decl_const_bits = type_t + Group (cname + (comma + cname )[...])
766
+ variable_decl_const_bits = type_t + Group (cname
767
+ + ZeroOrMore (comma + cname ))
767
768
768
769
# e.g. qubit qr[10], qs[2] / int i[5], j[10]
769
- variable_decl_var_bits = var_type + Group (variable_expr +
770
- (comma + variable_expr )[...] )
770
+ variable_decl_var_bits = var_type + Group (
771
+ variable_expr + ZeroOrMore (comma + variable_expr ))
771
772
772
773
# e.g. int[10] i = 5;
773
774
variable_decl_assign = type_t + cname + equal_sign + Group (expr )
@@ -781,11 +782,11 @@ def __init__(self):
781
782
# ----------------------------------------------------------------------
782
783
# Gate operations
783
784
784
- gate_op_no_param = cname + Group (variable_expr +
785
- (comma + variable_expr )[...] )
786
- gate_op_w_param = cname + Group (
787
- nestedExpr ( ignoreExpr = comma )) + Group (variable_expr +
788
- (comma + variable_expr )[...] )
785
+ gate_op_no_param = cname + Group (variable_expr
786
+ + ZeroOrMore (comma + variable_expr ))
787
+ gate_op_w_param = cname + Group (nestedExpr (
788
+ ignoreExpr = comma )) + Group (variable_expr
789
+ + ZeroOrMore (comma + variable_expr ))
789
790
790
791
# ----------------------------------
791
792
# Measure gate operations
@@ -810,7 +811,7 @@ def __init__(self):
810
811
811
812
# NB: not exactly 100% OpenQASM 3.0 conformant...
812
813
if_expr_qasm3 = (Literal ("if" ) + nestedExpr (ignoreExpr = comma ) +
813
- (lbrace + Group (gate_op + end )[ 1 , ...] + rbrace ))
814
+ (lbrace + OneOrMore ( Group (gate_op + end )) + rbrace ))
814
815
if_expr = (if_expr_qasm2 ^ if_expr_qasm3 ).addParseAction (IfOp )
815
816
816
817
assign_op = (cname + equal_sign + Group (expr )).addParseAction (AssignOp )
@@ -829,30 +830,31 @@ def __init__(self):
829
830
830
831
param_decl = Group (param_decl_qasm2 ^ param_decl_qasm3 )
831
832
832
- qargs_list = Group (cname + (comma + cname )[...] )
833
+ qargs_list = Group (cname + ZeroOrMore (comma + cname ))
833
834
834
- gate_def_no_args = (lpar + rpar )[...] + Group (Empty ()) + qargs_list
835
- gate_def_w_args = (lpar + Group (param_decl +
836
- (comma + param_decl )[...]) + rpar +
837
- qargs_list )
835
+ gate_def_no_args = ZeroOrMore (lpar + rpar ) + Group (
836
+ Empty ()) + qargs_list
837
+ gate_def_w_args = (lpar
838
+ + Group (param_decl + ZeroOrMore (comma + param_decl ))
839
+ + rpar + qargs_list )
838
840
gate_def_expr = (Literal ("gate" ) + cname +
839
- (gate_def_no_args ^ gate_def_w_args ) + lbrace + Group (
840
- ( gate_op + end )[...]) +
841
- rbrace ).addParseAction (GateDefOp )
841
+ (gate_def_no_args ^ gate_def_w_args ) + lbrace
842
+ + Group ( ZeroOrMore ( gate_op + end ))
843
+ + rbrace ).addParseAction (GateDefOp )
842
844
843
845
# ----------------------------------
844
846
# Opaque gate declarations operations
845
847
846
848
opaque_def_expr = (Literal ("opaque" ) + cname +
847
- (gate_def_no_args ^ gate_def_w_args ) +
848
- end ).addParseAction (OpaqueDefOp )
849
+ (gate_def_no_args ^ gate_def_w_args )
850
+ + end ).addParseAction (OpaqueDefOp )
849
851
850
852
# ----------------------------------------------------------------------
851
853
# Control related expressions (OpenQASM 3.0)
852
854
853
- # control_var_type = Or([length_t, stretch_t + int_v[...] ])
855
+ # control_var_type = Or([length_t, stretch_t + ZeroOrMore( int_v) ])
854
856
855
- # lengthof_arg = Word(alphanums + '_+-*/%{}[]')[1, ...]
857
+ # lengthof_arg = OneOrMore( Word(alphanums + '_+-*/%{}[]'))
856
858
# lengthof_op = Literal("lengthof") + lpar + lengthof_arg + rpar
857
859
858
860
# units = Word(alphas)
@@ -864,16 +866,16 @@ def __init__(self):
864
866
# control_variable_decl_statement = Group(
865
867
# Or([control_variable_decl, control_variable_decl_assign]))
866
868
867
- # control_func_arg = Word(alphanums + '_+-*/%')[1, ...]
869
+ # control_func_arg = OneOrMore( Word(alphanums + '_+-*/%'))
868
870
# control_func_op = Literal("rotary")
869
871
870
872
# rotary_op = (control_func_op + lpar + control_func_arg + rpar + lbra
871
873
# + ((float_v + units) ^ control_func_arg) + rbra +
872
- # variable_expr + (comma + variable_expr)[...] )
874
+ # variable_expr + ZeroOrMore (comma + variable_expr))
873
875
874
- # delay_arg = Word(alphanums + '_+-*/%')[1, ...]
876
+ # delay_arg = OneOrMore( Word(alphanums + '_+-*/%'))
875
877
# delay_op = Literal("delay") + lbra + delay_arg + rbra + Optional(
876
- # variable_expr + (comma + variable_expr)[...] )
878
+ # variable_expr + ZeroOrMore (comma + variable_expr))
877
879
878
880
# control_op = Group(Or([rotary_op, delay_op]))
879
881
@@ -882,8 +884,8 @@ def __init__(self):
882
884
header = (Suppress ("OPENQASM" ) +
883
885
(int_v ^ float_v ).addParseAction (QASMVersionOp ) + end )
884
886
885
- include = (Suppress ("include" ) + string_v .addParseAction (IncludeOp ) +
886
- end )
887
+ include = (Suppress ("include" ) + string_v .addParseAction (IncludeOp )
888
+ + end )
887
889
888
890
statement = (
889
891
(measure_op + end )
@@ -898,7 +900,7 @@ def __init__(self):
898
900
# | (control_op + end).addParseAction(lambda toks: [])
899
901
)
900
902
901
- self .parser = header + include [...] + statement [...]
903
+ self .parser = header + ZeroOrMore ( include ) + ZeroOrMore ( statement )
902
904
self .parser .ignore (cppStyleComment )
903
905
self .parser .ignore (cStyleComment )
904
906
0 commit comments