parser.c 992 B

1234567891011121314151617181920
  1. // The following is an implementation of OpenQASM
  2. // using a recursive descent style parser.
  3. // MainProgram := "OPENQASM" Real ";" Program
  4. // Program ::= Statement | Program Statement
  5. // Statement ::= Decl
  6. // | GateDecl GeoList "}"
  7. // | GateDecl "}"
  8. // | "opaque" Id Idlist ";"
  9. // | "opaque" Id "()" IdList ";"
  10. // | "opaque" Id "(" IdList ")" IdList ";"
  11. // | Qop
  12. // | "if" "(" Id "==" Integer ")" Qop
  13. // | "barrier" AnyList ";"
  14. // Decl ::= "qreg" Id "[" Integer "]" ";" | "creg" Id "[" Integer "]" ";"
  15. // GateDecl ::= "gate" Id IdList "{" | "gate" Id "()" IdList "{" | "gate" Id "(" IdList ")" Idlist "{"
  16. // GopList ::= Uop | "barrier" IdList ";" | GopList Uop | GopList "barrier" IdList ";"
  17. // Qop ::= Uop | "measure" Argument "->" Argument ";" | "reset" Argument ";"
  18. // Uop ::= "U" "(" ExpList ")" Argument ";" | "CX" Argument "," Argument ";" | Id AnyList ";" | Id "()" AnyList ";" | Id ""