1919from copy import deepcopy
2020import operator as op
2121from 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 )
2525
2626from projectq .ops import All , Measure
2727
@@ -412,8 +412,8 @@ def __init__(self, s, loc, toks):
412412 self .qubits = [QubitProxy (qubit ) for qubit in toks [1 ]]
413413 else :
414414 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 (',' )
417417 self .qubits = [QubitProxy (qubit ) for qubit in toks [2 ]]
418418
419419 def eval (self , eng ):
@@ -567,8 +567,8 @@ class IfOp:
567567 logical_bin_op = Or (
568568 [greater , greater_equal , less , less_equal , equal , not_equal ])
569569
570- cond_expr = (CommonTokens .variable_expr .copy () + logical_bin_op +
571- CharsNotIn ('()' ))
570+ cond_expr = (CommonTokens .variable_expr .copy () + logical_bin_op
571+ + CharsNotIn ('()' ))
572572
573573 def __init__ (self , if_str , loc , toks ):
574574 """
@@ -763,11 +763,12 @@ def __init__(self):
763763 # Variable declarations
764764
765765 # 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 ))
767768
768769 # 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 ))
771772
772773 # e.g. int[10] i = 5;
773774 variable_decl_assign = type_t + cname + equal_sign + Group (expr )
@@ -781,11 +782,11 @@ def __init__(self):
781782 # ----------------------------------------------------------------------
782783 # Gate operations
783784
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 ))
789790
790791 # ----------------------------------
791792 # Measure gate operations
@@ -810,7 +811,7 @@ def __init__(self):
810811
811812 # NB: not exactly 100% OpenQASM 3.0 conformant...
812813 if_expr_qasm3 = (Literal ("if" ) + nestedExpr (ignoreExpr = comma ) +
813- (lbrace + Group (gate_op + end )[ 1 , ...] + rbrace ))
814+ (lbrace + OneOrMore ( Group (gate_op + end )) + rbrace ))
814815 if_expr = (if_expr_qasm2 ^ if_expr_qasm3 ).addParseAction (IfOp )
815816
816817 assign_op = (cname + equal_sign + Group (expr )).addParseAction (AssignOp )
@@ -829,30 +830,31 @@ def __init__(self):
829830
830831 param_decl = Group (param_decl_qasm2 ^ param_decl_qasm3 )
831832
832- qargs_list = Group (cname + (comma + cname )[...] )
833+ qargs_list = Group (cname + ZeroOrMore (comma + cname ))
833834
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 )
838840 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 )
842844
843845 # ----------------------------------
844846 # Opaque gate declarations operations
845847
846848 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 )
849851
850852 # ----------------------------------------------------------------------
851853 # Control related expressions (OpenQASM 3.0)
852854
853- # control_var_type = Or([length_t, stretch_t + int_v[...] ])
855+ # control_var_type = Or([length_t, stretch_t + ZeroOrMore( int_v) ])
854856
855- # lengthof_arg = Word(alphanums + '_+-*/%{}[]')[1, ...]
857+ # lengthof_arg = OneOrMore( Word(alphanums + '_+-*/%{}[]'))
856858 # lengthof_op = Literal("lengthof") + lpar + lengthof_arg + rpar
857859
858860 # units = Word(alphas)
@@ -864,16 +866,16 @@ def __init__(self):
864866 # control_variable_decl_statement = Group(
865867 # Or([control_variable_decl, control_variable_decl_assign]))
866868
867- # control_func_arg = Word(alphanums + '_+-*/%')[1, ...]
869+ # control_func_arg = OneOrMore( Word(alphanums + '_+-*/%'))
868870 # control_func_op = Literal("rotary")
869871
870872 # rotary_op = (control_func_op + lpar + control_func_arg + rpar + lbra
871873 # + ((float_v + units) ^ control_func_arg) + rbra +
872- # variable_expr + (comma + variable_expr)[...] )
874+ # variable_expr + ZeroOrMore (comma + variable_expr))
873875
874- # delay_arg = Word(alphanums + '_+-*/%')[1, ...]
876+ # delay_arg = OneOrMore( Word(alphanums + '_+-*/%'))
875877 # delay_op = Literal("delay") + lbra + delay_arg + rbra + Optional(
876- # variable_expr + (comma + variable_expr)[...] )
878+ # variable_expr + ZeroOrMore (comma + variable_expr))
877879
878880 # control_op = Group(Or([rotary_op, delay_op]))
879881
@@ -882,8 +884,8 @@ def __init__(self):
882884 header = (Suppress ("OPENQASM" ) +
883885 (int_v ^ float_v ).addParseAction (QASMVersionOp ) + end )
884886
885- include = (Suppress ("include" ) + string_v .addParseAction (IncludeOp ) +
886- end )
887+ include = (Suppress ("include" ) + string_v .addParseAction (IncludeOp )
888+ + end )
887889
888890 statement = (
889891 (measure_op + end )
@@ -898,7 +900,7 @@ def __init__(self):
898900 # | (control_op + end).addParseAction(lambda toks: [])
899901 )
900902
901- self .parser = header + include [...] + statement [...]
903+ self .parser = header + ZeroOrMore ( include ) + ZeroOrMore ( statement )
902904 self .parser .ignore (cppStyleComment )
903905 self .parser .ignore (cStyleComment )
904906
0 commit comments