|
@@ -1,19 +1,44 @@
|
|
|
// The following is an implementation of OpenQASM
|
|
|
// using a recursive descent style parser.
|
|
|
|
|
|
-// MainProgram := "OPENQASM" Real ";" Program
|
|
|
-// Program ::= Statement | Program Statement
|
|
|
-// Statement ::= Decl
|
|
|
-// | GateDecl GeoList "}"
|
|
|
-// | GateDecl "}"
|
|
|
-// | "opaque" Id Idlist ";"
|
|
|
-// | "opaque" Id "()" IdList ";"
|
|
|
-// | "opaque" Id "(" IdList ")" IdList ";"
|
|
|
-// | Qop
|
|
|
-// | "if" "(" Id "==" Integer ")" Qop
|
|
|
-// | "barrier" AnyList ";"
|
|
|
-// Decl ::= "qreg" Id "[" Integer "]" ";" | "creg" Id "[" Integer "]" ";"
|
|
|
-// GateDecl ::= "gate" Id IdList "{" | "gate" Id "()" IdList "{" | "gate" Id "(" IdList ")" Idlist "{"
|
|
|
-// GopList ::= Uop | "barrier" IdList ";" | GopList Uop | GopList "barrier" IdList ";"
|
|
|
-// Qop ::= Uop | "measure" Argument "->" Argument ";" | "reset" Argument ";"
|
|
|
-// Uop ::= "U" "(" ExpList ")" Argument ";" | "CX" Argument "," Argument ";" | Id AnyList ";" | Id "()" AnyList ";" | Id ""
|
|
|
+// MainProgram ::= "OPENQASM" Real ";" Program
|
|
|
+// Program ::= Statement | Program Statement
|
|
|
+// Statement ::= Decl
|
|
|
+// | GateDecl GeoList "}"
|
|
|
+// | GateDecl "}"
|
|
|
+// | "opaque" Id Idlist ";"
|
|
|
+// | "opaque" Id "()" IdList ";"
|
|
|
+// | "opaque" Id "(" IdList ")" IdList ";"
|
|
|
+// | Qop
|
|
|
+// | "if" "(" Id "==" Integer ")" Qop
|
|
|
+// | "barrier" AnyList ";"
|
|
|
+// Decl ::= "qreg" Id "[" Integer "]" ";"
|
|
|
+// | "creg" Id "[" Integer "]" ";"
|
|
|
+// GateDecl ::= "gate" Id IdList "{"
|
|
|
+// | "gate" Id "()" IdList "{"
|
|
|
+// | "gate" Id "(" IdList ")" Idlist "{"
|
|
|
+// GopList ::= Uop
|
|
|
+// | "barrier" IdList ";"
|
|
|
+// | GopList Uop
|
|
|
+// | GopList "barrier" IdList ";"
|
|
|
+// Qop ::= Uop
|
|
|
+// | "measure" Argument "->" Argument ";"
|
|
|
+// | "reset" Argument ";"
|
|
|
+// Uop ::= "U" "(" ExpList ")" Argument ";"
|
|
|
+// | "CX" Argument "," Argument ";"
|
|
|
+// | Id AnyList ";"
|
|
|
+// | Id "()" AnyList ";"
|
|
|
+// | Id "(" ExpList ")" AnyList ";"
|
|
|
+// AnyList ::= IdList | MixedList
|
|
|
+// IdList ::= Id | IdList "," Id
|
|
|
+// MixedList ::= Id "[" Integer "]"
|
|
|
+// | MixedList "," Id
|
|
|
+// | MixedList "," Id "[" Integer "]"
|
|
|
+// | IdList "," Id "[" Integer "]"
|
|
|
+
|
|
|
+// Argument ::= Id | Id "[" Integer "]"
|
|
|
+// ExpList ::= Exp | ExpList "," Exp
|
|
|
+// Exp ::= Real | Integer | "pi" | Id
|
|
|
+// | Exp "+" Exp | Exp "-" Exp | Exp "*" Exp | Exp "/" Exp
|
|
|
+// | "-" Exp | Exp "^" Exp | "(" Exp ")" | UnaryOp "(" Exp ")"
|
|
|
+// UnaryOp ::= "sin" | "cos" | "tan" | "exp" | "ln" | "sqrt"
|