parser.c 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  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 "]" ";"
  15. // | "creg" Id "[" Integer "]" ";"
  16. // GateDecl ::= "gate" Id IdList "{"
  17. // | "gate" Id "()" IdList "{"
  18. // | "gate" Id "(" IdList ")" Idlist "{"
  19. // GopList ::= Uop
  20. // | "barrier" IdList ";"
  21. // | GopList Uop
  22. // | GopList "barrier" IdList ";"
  23. // Qop ::= Uop
  24. // | "measure" Argument "->" Argument ";"
  25. // | "reset" Argument ";"
  26. // Uop ::= "U" "(" ExpList ")" Argument ";"
  27. // | "CX" Argument "," Argument ";"
  28. // | Id AnyList ";"
  29. // | Id "()" AnyList ";"
  30. // | Id "(" ExpList ")" AnyList ";"
  31. // AnyList ::= IdList | MixedList
  32. // IdList ::= Id | IdList "," Id
  33. // MixedList ::= Id "[" Integer "]"
  34. // | MixedList "," Id
  35. // | MixedList "," Id "[" Integer "]"
  36. // | IdList "," Id "[" Integer "]"
  37. // Argument ::= Id | Id "[" Integer "]"
  38. // ExpList ::= Exp | ExpList "," Exp
  39. // Exp ::= Real | Integer | "pi" | Id
  40. // | Exp "+" Exp | Exp "-" Exp | Exp "*" Exp | Exp "/" Exp
  41. // | "-" Exp | Exp "^" Exp | "(" Exp ")" | UnaryOp "(" Exp ")"
  42. // UnaryOp ::= "sin" | "cos" | "tan" | "exp" | "ln" | "sqrt"