1234567891011121314151617181920212223242526272829303132333435363738394041424344 |
- // 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 "(" 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"
|