qasm-ts 2.0.0 → 2.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (365) hide show
  1. package/.github/workflows/draft-pdf.yml +24 -0
  2. package/CONTRIBUTING.md +3 -0
  3. package/LICENSE +201 -0
  4. package/dist/errors.js +9 -0
  5. package/dist/lexer.js +74 -0
  6. package/dist/main.js +82 -7
  7. package/dist/parser.js +71 -0
  8. package/dist/qasm2/ast.js +33 -0
  9. package/dist/qasm2/lexer.js +54 -1
  10. package/dist/qasm2/parser.js +51 -1
  11. package/dist/qasm2/token.js +30 -0
  12. package/dist/qasm3/lexer.js +59 -1
  13. package/dist/qasm3/parser.js +55 -2
  14. package/dist/qasm3/token.js +93 -10
  15. package/dist/version.js +17 -1
  16. package/docs/assets/hierarchy.js +1 -0
  17. package/docs/custom.css +3 -0
  18. package/docs/docs-readme.md +208 -0
  19. package/docs/index.html +17 -55
  20. package/docs/typedoc/assets/custom.css +3 -0
  21. package/docs/typedoc/assets/hierarchy.js +1 -0
  22. package/docs/{assets → typedoc/assets}/highlight.css +20 -20
  23. package/docs/{assets → typedoc/assets}/icons.js +1 -1
  24. package/docs/{assets → typedoc/assets}/icons.svg +1 -1
  25. package/docs/typedoc/assets/main.js +60 -0
  26. package/docs/typedoc/assets/navigation.js +1 -0
  27. package/docs/typedoc/assets/search.js +1 -0
  28. package/docs/typedoc/assets/style.css +1633 -0
  29. package/docs/typedoc/classes/Error_Handling.BadArgumentError.html +12 -0
  30. package/docs/typedoc/classes/Error_Handling.BadBarrierError.html +12 -0
  31. package/docs/typedoc/classes/Error_Handling.BadClassicalTypeError.html +12 -0
  32. package/docs/typedoc/classes/Error_Handling.BadConditionalError.html +12 -0
  33. package/docs/typedoc/classes/Error_Handling.BadCregError.html +12 -0
  34. package/docs/typedoc/classes/Error_Handling.BadEqualsError.html +12 -0
  35. package/docs/typedoc/classes/Error_Handling.BadExpressionError.html +12 -0
  36. package/docs/typedoc/classes/Error_Handling.BadGateError.html +12 -0
  37. package/docs/typedoc/classes/Error_Handling.BadIncludeError.html +12 -0
  38. package/docs/typedoc/classes/Error_Handling.BadLoopError.html +12 -0
  39. package/docs/typedoc/classes/Error_Handling.BadMeasurementError.html +12 -0
  40. package/docs/typedoc/classes/Error_Handling.BadParameterError.html +12 -0
  41. package/docs/typedoc/classes/Error_Handling.BadQregError.html +12 -0
  42. package/docs/typedoc/classes/Error_Handling.BadQuantumInstructionError.html +12 -0
  43. package/docs/typedoc/classes/Error_Handling.BadStringLiteralError.html +12 -0
  44. package/docs/typedoc/classes/Error_Handling.BadSubroutineError.html +12 -0
  45. package/docs/typedoc/classes/Error_Handling.MissingBraceError.html +12 -0
  46. package/docs/typedoc/classes/Error_Handling.MissingSemicolonError.html +12 -0
  47. package/docs/typedoc/classes/Error_Handling.UnsupportedOpenQASMVersionError.html +12 -0
  48. package/docs/typedoc/classes/Version_Management.OpenQASMVersion.html +16 -0
  49. package/docs/typedoc/classes/qasm2_ast.ApplyGate.html +6 -0
  50. package/docs/typedoc/classes/qasm2_ast.AstNode.html +3 -0
  51. package/docs/typedoc/classes/qasm2_ast.Barrier.html +5 -0
  52. package/docs/typedoc/classes/qasm2_ast.CReg.html +5 -0
  53. package/docs/typedoc/classes/qasm2_ast.Cos.html +3 -0
  54. package/docs/typedoc/classes/qasm2_ast.Divide.html +3 -0
  55. package/docs/typedoc/classes/qasm2_ast.Exp.html +3 -0
  56. package/docs/typedoc/classes/qasm2_ast.Gate.html +7 -0
  57. package/docs/typedoc/classes/qasm2_ast.Id.html +4 -0
  58. package/docs/typedoc/classes/qasm2_ast.If.html +6 -0
  59. package/docs/typedoc/classes/qasm2_ast.Include.html +4 -0
  60. package/docs/typedoc/classes/qasm2_ast.Ln.html +3 -0
  61. package/docs/typedoc/classes/qasm2_ast.Measure.html +7 -0
  62. package/docs/typedoc/classes/qasm2_ast.Minus.html +3 -0
  63. package/docs/typedoc/classes/qasm2_ast.NNInteger.html +4 -0
  64. package/docs/typedoc/classes/qasm2_ast.Opaque.html +6 -0
  65. package/docs/typedoc/classes/qasm2_ast.Pi.html +3 -0
  66. package/docs/typedoc/classes/qasm2_ast.Plus.html +3 -0
  67. package/docs/typedoc/classes/qasm2_ast.Power.html +3 -0
  68. package/docs/typedoc/classes/qasm2_ast.QReg.html +5 -0
  69. package/docs/typedoc/classes/qasm2_ast.Real.html +4 -0
  70. package/docs/typedoc/classes/qasm2_ast.Sin.html +3 -0
  71. package/docs/typedoc/classes/qasm2_ast.Sqrt.html +3 -0
  72. package/docs/typedoc/classes/qasm2_ast.Tan.html +3 -0
  73. package/docs/typedoc/classes/qasm2_ast.Times.html +3 -0
  74. package/docs/typedoc/classes/qasm2_ast.Variable.html +4 -0
  75. package/docs/typedoc/classes/qasm2_ast.Version.html +4 -0
  76. package/docs/typedoc/classes/qasm2_lexer.default.html +57 -0
  77. package/docs/typedoc/classes/qasm2_parser.default.html +93 -0
  78. package/docs/typedoc/classes/qasm3_ast.AliasStatement.html +5 -0
  79. package/docs/typedoc/classes/qasm3_ast.AngleType.html +4 -0
  80. package/docs/typedoc/classes/qasm3_ast.Arithmetic.html +6 -0
  81. package/docs/typedoc/classes/qasm3_ast.ArrayAccess.html +5 -0
  82. package/docs/typedoc/classes/qasm3_ast.ArrayDeclaration.html +7 -0
  83. package/docs/typedoc/classes/qasm3_ast.ArrayInitializer.html +4 -0
  84. package/docs/typedoc/classes/qasm3_ast.ArrayReference.html +5 -0
  85. package/docs/typedoc/classes/qasm3_ast.AssignmentStatement.html +5 -0
  86. package/docs/typedoc/classes/qasm3_ast.AstNode.html +3 -0
  87. package/docs/typedoc/classes/qasm3_ast.Binary.html +6 -0
  88. package/docs/typedoc/classes/qasm3_ast.BitType.html +4 -0
  89. package/docs/typedoc/classes/qasm3_ast.BitstringLiteral.html +4 -0
  90. package/docs/typedoc/classes/qasm3_ast.BoolType.html +3 -0
  91. package/docs/typedoc/classes/qasm3_ast.BooleanLiteral.html +4 -0
  92. package/docs/typedoc/classes/qasm3_ast.BoxDefinition.html +7 -0
  93. package/docs/typedoc/classes/qasm3_ast.BranchingStatement.html +8 -0
  94. package/docs/typedoc/classes/qasm3_ast.BreakStatement.html +3 -0
  95. package/docs/typedoc/classes/qasm3_ast.CalibrationGrammarDeclaration.html +6 -0
  96. package/docs/typedoc/classes/qasm3_ast.CaseStatement.html +5 -0
  97. package/docs/typedoc/classes/qasm3_ast.Cast.html +5 -0
  98. package/docs/typedoc/classes/qasm3_ast.ClassicalDeclaration.html +7 -0
  99. package/docs/typedoc/classes/qasm3_ast.ClassicalType.html +3 -0
  100. package/docs/typedoc/classes/qasm3_ast.ComplexType.html +6 -0
  101. package/docs/typedoc/classes/qasm3_ast.ContinueStatement.html +3 -0
  102. package/docs/typedoc/classes/qasm3_ast.DefaultStatement.html +4 -0
  103. package/docs/typedoc/classes/qasm3_ast.DurationLiteral.html +5 -0
  104. package/docs/typedoc/classes/qasm3_ast.DurationOf.html +4 -0
  105. package/docs/typedoc/classes/qasm3_ast.DurationType.html +3 -0
  106. package/docs/typedoc/classes/qasm3_ast.Euler.html +3 -0
  107. package/docs/typedoc/classes/qasm3_ast.Expression.html +3 -0
  108. package/docs/typedoc/classes/qasm3_ast.ExternSignature.html +8 -0
  109. package/docs/typedoc/classes/qasm3_ast.FloatLiteral.html +4 -0
  110. package/docs/typedoc/classes/qasm3_ast.FloatType.html +6 -0
  111. package/docs/typedoc/classes/qasm3_ast.ForLoopStatement.html +12 -0
  112. package/docs/typedoc/classes/qasm3_ast.HardwareQubit.html +5 -0
  113. package/docs/typedoc/classes/qasm3_ast.IODeclaration.html +5 -0
  114. package/docs/typedoc/classes/qasm3_ast.Identifier.html +4 -0
  115. package/docs/typedoc/classes/qasm3_ast.ImaginaryLiteral.html +4 -0
  116. package/docs/typedoc/classes/qasm3_ast.Include.html +6 -0
  117. package/docs/typedoc/classes/qasm3_ast.IndexSet.html +5 -0
  118. package/docs/typedoc/classes/qasm3_ast.IntType.html +4 -0
  119. package/docs/typedoc/classes/qasm3_ast.IntegerLiteral.html +4 -0
  120. package/docs/typedoc/classes/qasm3_ast.MathFunction.html +5 -0
  121. package/docs/typedoc/classes/qasm3_ast.NumericLiteral.html +4 -0
  122. package/docs/typedoc/classes/qasm3_ast.Parameters.html +4 -0
  123. package/docs/typedoc/classes/qasm3_ast.Pi.html +3 -0
  124. package/docs/typedoc/classes/qasm3_ast.ProgramBlock.html +7 -0
  125. package/docs/typedoc/classes/qasm3_ast.QuantumBarrier.html +6 -0
  126. package/docs/typedoc/classes/qasm3_ast.QuantumBlock.html +6 -0
  127. package/docs/typedoc/classes/qasm3_ast.QuantumDeclaration.html +8 -0
  128. package/docs/typedoc/classes/qasm3_ast.QuantumDelay.html +5 -0
  129. package/docs/typedoc/classes/qasm3_ast.QuantumGateCall.html +9 -0
  130. package/docs/typedoc/classes/qasm3_ast.QuantumGateDefinition.html +9 -0
  131. package/docs/typedoc/classes/qasm3_ast.QuantumGateModifier.html +5 -0
  132. package/docs/typedoc/classes/qasm3_ast.QuantumMeasurement.html +6 -0
  133. package/docs/typedoc/classes/qasm3_ast.QuantumMeasurementAssignment.html +8 -0
  134. package/docs/typedoc/classes/qasm3_ast.QuantumReset.html +4 -0
  135. package/docs/typedoc/classes/qasm3_ast.Range.html +6 -0
  136. package/docs/typedoc/classes/qasm3_ast.ReturnStatement.html +4 -0
  137. package/docs/typedoc/classes/qasm3_ast.SizeOf.html +5 -0
  138. package/docs/typedoc/classes/qasm3_ast.Statement.html +12 -0
  139. package/docs/typedoc/classes/qasm3_ast.StretchType.html +3 -0
  140. package/docs/typedoc/classes/qasm3_ast.SubroutineBlock.html +6 -0
  141. package/docs/typedoc/classes/qasm3_ast.SubroutineCall.html +5 -0
  142. package/docs/typedoc/classes/qasm3_ast.SubroutineDefinition.html +10 -0
  143. package/docs/typedoc/classes/qasm3_ast.SubscriptedIdentifier.html +5 -0
  144. package/docs/typedoc/classes/qasm3_ast.SwitchStatement.html +6 -0
  145. package/docs/typedoc/classes/qasm3_ast.Tau.html +3 -0
  146. package/docs/typedoc/classes/qasm3_ast.TrigFunction.html +5 -0
  147. package/docs/typedoc/classes/qasm3_ast.UIntType.html +4 -0
  148. package/docs/typedoc/classes/qasm3_ast.Unary.html +5 -0
  149. package/docs/typedoc/classes/qasm3_ast.Version.html +6 -0
  150. package/docs/typedoc/classes/qasm3_ast.WhileLoopStatement.html +6 -0
  151. package/docs/typedoc/classes/qasm3_lexer.default.html +71 -0
  152. package/docs/typedoc/classes/qasm3_parser.default.html +237 -0
  153. package/docs/typedoc/enums/Version_Management.OpenQASMMajorVersion.html +4 -0
  154. package/docs/typedoc/enums/qasm2_token.Token.html +42 -0
  155. package/docs/typedoc/enums/qasm3_ast.ArithmeticOp.html +9 -0
  156. package/docs/typedoc/enums/qasm3_ast.ArrayReferenceModifier.html +4 -0
  157. package/docs/typedoc/enums/qasm3_ast.BinaryOp.html +15 -0
  158. package/docs/typedoc/enums/qasm3_ast.DurationUnit.html +7 -0
  159. package/docs/typedoc/enums/qasm3_ast.IOModifier.html +4 -0
  160. package/docs/typedoc/enums/qasm3_ast.MathFunctionTypes.html +12 -0
  161. package/docs/typedoc/enums/qasm3_ast.QuantumGateModifierName.html +6 -0
  162. package/docs/typedoc/enums/qasm3_ast.TrigFunctionTypes.html +8 -0
  163. package/docs/typedoc/enums/qasm3_ast.UnaryOp.html +5 -0
  164. package/docs/typedoc/enums/qasm3_token.Token.html +113 -0
  165. package/docs/typedoc/functions/Lexing.lex.html +24 -0
  166. package/docs/typedoc/functions/Main_Functions.parseFile.html +13 -0
  167. package/docs/typedoc/functions/Main_Functions.parseString.html +19 -0
  168. package/docs/typedoc/functions/Parsing.parse.html +15 -0
  169. package/docs/typedoc/functions/qasm2_token.inverseLookup.html +3 -0
  170. package/docs/typedoc/functions/qasm2_token.lookup.html +4 -0
  171. package/docs/typedoc/functions/qasm2_token.notParam.html +3 -0
  172. package/docs/typedoc/functions/qasm3_token.inverseLookup.html +9 -0
  173. package/docs/typedoc/functions/qasm3_token.lookup.html +10 -0
  174. package/docs/typedoc/functions/qasm3_token.notParam.html +11 -0
  175. package/docs/typedoc/hierarchy.html +1 -0
  176. package/docs/typedoc/index.html +76 -0
  177. package/docs/typedoc/modules/Error_Handling.html +5 -0
  178. package/docs/typedoc/modules/Lexing.html +20 -0
  179. package/docs/typedoc/modules/Main_Functions.html +2 -0
  180. package/docs/typedoc/modules/Parsing.html +24 -0
  181. package/docs/typedoc/modules/Version_Management.html +8 -0
  182. package/docs/typedoc/modules/qasm2_ast.html +22 -0
  183. package/docs/typedoc/modules/qasm2_lexer.html +24 -0
  184. package/docs/typedoc/modules/qasm2_parser.html +21 -0
  185. package/docs/typedoc/modules/qasm2_token.html +15 -0
  186. package/docs/typedoc/modules/qasm3_ast.html +26 -0
  187. package/docs/typedoc/modules/qasm3_lexer.html +25 -0
  188. package/docs/typedoc/modules/qasm3_parser.html +25 -0
  189. package/docs/typedoc/modules/qasm3_token.html +15 -0
  190. package/docs/typedoc/modules.html +1 -0
  191. package/docs/typedoc/types/Error_Handling.ReturnErrorConstructor.html +2 -0
  192. package/docs/typedoc.json +47 -0
  193. package/package.json +6 -2
  194. package/paper/jats/paper.jats +464 -0
  195. package/paper/main.bib +191 -0
  196. package/paper/paper.md +166 -0
  197. package/paper/paper.pdf +0 -0
  198. package/readme.md +73 -10
  199. package/docs/assets/main.js +0 -60
  200. package/docs/assets/navigation.js +0 -1
  201. package/docs/assets/search.js +0 -1
  202. package/docs/assets/style.css +0 -1493
  203. package/docs/classes/errors.BadArgumentError.html +0 -12
  204. package/docs/classes/errors.BadBarrierError.html +0 -12
  205. package/docs/classes/errors.BadClassicalTypeError.html +0 -12
  206. package/docs/classes/errors.BadConditionalError.html +0 -12
  207. package/docs/classes/errors.BadCregError.html +0 -12
  208. package/docs/classes/errors.BadEqualsError.html +0 -12
  209. package/docs/classes/errors.BadExpressionError.html +0 -12
  210. package/docs/classes/errors.BadGateError.html +0 -12
  211. package/docs/classes/errors.BadIncludeError.html +0 -12
  212. package/docs/classes/errors.BadLoopError.html +0 -12
  213. package/docs/classes/errors.BadMeasurementError.html +0 -12
  214. package/docs/classes/errors.BadParameterError.html +0 -12
  215. package/docs/classes/errors.BadQregError.html +0 -12
  216. package/docs/classes/errors.BadQuantumInstructionError.html +0 -12
  217. package/docs/classes/errors.BadStringLiteralError.html +0 -12
  218. package/docs/classes/errors.BadSubroutineError.html +0 -12
  219. package/docs/classes/errors.MissingBraceError.html +0 -12
  220. package/docs/classes/errors.MissingSemicolonError.html +0 -12
  221. package/docs/classes/errors.UnsupportedOpenQASMVersionError.html +0 -12
  222. package/docs/classes/qasm2_ast.ApplyGate.html +0 -6
  223. package/docs/classes/qasm2_ast.AstNode.html +0 -3
  224. package/docs/classes/qasm2_ast.Barrier.html +0 -5
  225. package/docs/classes/qasm2_ast.CReg.html +0 -5
  226. package/docs/classes/qasm2_ast.Cos.html +0 -3
  227. package/docs/classes/qasm2_ast.Divide.html +0 -3
  228. package/docs/classes/qasm2_ast.Exp.html +0 -3
  229. package/docs/classes/qasm2_ast.Gate.html +0 -7
  230. package/docs/classes/qasm2_ast.Id.html +0 -4
  231. package/docs/classes/qasm2_ast.If.html +0 -6
  232. package/docs/classes/qasm2_ast.Include.html +0 -4
  233. package/docs/classes/qasm2_ast.Ln.html +0 -3
  234. package/docs/classes/qasm2_ast.Measure.html +0 -7
  235. package/docs/classes/qasm2_ast.Minus.html +0 -3
  236. package/docs/classes/qasm2_ast.NNInteger.html +0 -4
  237. package/docs/classes/qasm2_ast.Opaque.html +0 -6
  238. package/docs/classes/qasm2_ast.Pi.html +0 -3
  239. package/docs/classes/qasm2_ast.Plus.html +0 -3
  240. package/docs/classes/qasm2_ast.Power.html +0 -3
  241. package/docs/classes/qasm2_ast.QReg.html +0 -5
  242. package/docs/classes/qasm2_ast.Real.html +0 -4
  243. package/docs/classes/qasm2_ast.Sin.html +0 -3
  244. package/docs/classes/qasm2_ast.Sqrt.html +0 -3
  245. package/docs/classes/qasm2_ast.Tan.html +0 -3
  246. package/docs/classes/qasm2_ast.Times.html +0 -3
  247. package/docs/classes/qasm2_ast.Variable.html +0 -4
  248. package/docs/classes/qasm2_ast.Version.html +0 -4
  249. package/docs/classes/qasm2_lexer.default.html +0 -50
  250. package/docs/classes/qasm2_parser.default.html +0 -87
  251. package/docs/classes/qasm3_ast.AliasStatement.html +0 -5
  252. package/docs/classes/qasm3_ast.AngleType.html +0 -4
  253. package/docs/classes/qasm3_ast.Arithmetic.html +0 -6
  254. package/docs/classes/qasm3_ast.ArrayAccess.html +0 -5
  255. package/docs/classes/qasm3_ast.ArrayDeclaration.html +0 -7
  256. package/docs/classes/qasm3_ast.ArrayInitializer.html +0 -4
  257. package/docs/classes/qasm3_ast.ArrayReference.html +0 -5
  258. package/docs/classes/qasm3_ast.AssignmentStatement.html +0 -5
  259. package/docs/classes/qasm3_ast.AstNode.html +0 -3
  260. package/docs/classes/qasm3_ast.Binary.html +0 -6
  261. package/docs/classes/qasm3_ast.BitType.html +0 -4
  262. package/docs/classes/qasm3_ast.BitstringLiteral.html +0 -4
  263. package/docs/classes/qasm3_ast.BoolType.html +0 -3
  264. package/docs/classes/qasm3_ast.BooleanLiteral.html +0 -4
  265. package/docs/classes/qasm3_ast.BoxDefinition.html +0 -7
  266. package/docs/classes/qasm3_ast.BranchingStatement.html +0 -8
  267. package/docs/classes/qasm3_ast.BreakStatement.html +0 -3
  268. package/docs/classes/qasm3_ast.CalibrationGrammarDeclaration.html +0 -6
  269. package/docs/classes/qasm3_ast.CaseStatement.html +0 -5
  270. package/docs/classes/qasm3_ast.Cast.html +0 -5
  271. package/docs/classes/qasm3_ast.ClassicalDeclaration.html +0 -7
  272. package/docs/classes/qasm3_ast.ClassicalType.html +0 -3
  273. package/docs/classes/qasm3_ast.ComplexType.html +0 -6
  274. package/docs/classes/qasm3_ast.ContinueStatement.html +0 -3
  275. package/docs/classes/qasm3_ast.DefaultStatement.html +0 -4
  276. package/docs/classes/qasm3_ast.DurationLiteral.html +0 -5
  277. package/docs/classes/qasm3_ast.DurationOf.html +0 -4
  278. package/docs/classes/qasm3_ast.DurationType.html +0 -3
  279. package/docs/classes/qasm3_ast.Euler.html +0 -3
  280. package/docs/classes/qasm3_ast.Expression.html +0 -3
  281. package/docs/classes/qasm3_ast.ExternSignature.html +0 -8
  282. package/docs/classes/qasm3_ast.FloatLiteral.html +0 -4
  283. package/docs/classes/qasm3_ast.FloatType.html +0 -6
  284. package/docs/classes/qasm3_ast.ForLoopStatement.html +0 -12
  285. package/docs/classes/qasm3_ast.HardwareQubit.html +0 -5
  286. package/docs/classes/qasm3_ast.IODeclaration.html +0 -5
  287. package/docs/classes/qasm3_ast.Identifier.html +0 -4
  288. package/docs/classes/qasm3_ast.ImaginaryLiteral.html +0 -4
  289. package/docs/classes/qasm3_ast.Include.html +0 -6
  290. package/docs/classes/qasm3_ast.IndexSet.html +0 -5
  291. package/docs/classes/qasm3_ast.IntType.html +0 -4
  292. package/docs/classes/qasm3_ast.IntegerLiteral.html +0 -4
  293. package/docs/classes/qasm3_ast.MathFunction.html +0 -5
  294. package/docs/classes/qasm3_ast.NumericLiteral.html +0 -4
  295. package/docs/classes/qasm3_ast.Parameters.html +0 -4
  296. package/docs/classes/qasm3_ast.Pi.html +0 -3
  297. package/docs/classes/qasm3_ast.ProgramBlock.html +0 -7
  298. package/docs/classes/qasm3_ast.QuantumBarrier.html +0 -6
  299. package/docs/classes/qasm3_ast.QuantumBlock.html +0 -6
  300. package/docs/classes/qasm3_ast.QuantumDeclaration.html +0 -8
  301. package/docs/classes/qasm3_ast.QuantumDelay.html +0 -5
  302. package/docs/classes/qasm3_ast.QuantumGateCall.html +0 -9
  303. package/docs/classes/qasm3_ast.QuantumGateDefinition.html +0 -9
  304. package/docs/classes/qasm3_ast.QuantumGateModifier.html +0 -5
  305. package/docs/classes/qasm3_ast.QuantumMeasurement.html +0 -6
  306. package/docs/classes/qasm3_ast.QuantumMeasurementAssignment.html +0 -8
  307. package/docs/classes/qasm3_ast.QuantumReset.html +0 -4
  308. package/docs/classes/qasm3_ast.Range.html +0 -6
  309. package/docs/classes/qasm3_ast.ReturnStatement.html +0 -4
  310. package/docs/classes/qasm3_ast.SizeOf.html +0 -5
  311. package/docs/classes/qasm3_ast.Statement.html +0 -12
  312. package/docs/classes/qasm3_ast.StretchType.html +0 -3
  313. package/docs/classes/qasm3_ast.SubroutineBlock.html +0 -6
  314. package/docs/classes/qasm3_ast.SubroutineCall.html +0 -5
  315. package/docs/classes/qasm3_ast.SubroutineDefinition.html +0 -10
  316. package/docs/classes/qasm3_ast.SubscriptedIdentifier.html +0 -5
  317. package/docs/classes/qasm3_ast.SwitchStatement.html +0 -6
  318. package/docs/classes/qasm3_ast.Tau.html +0 -3
  319. package/docs/classes/qasm3_ast.TrigFunction.html +0 -5
  320. package/docs/classes/qasm3_ast.UIntType.html +0 -4
  321. package/docs/classes/qasm3_ast.Unary.html +0 -5
  322. package/docs/classes/qasm3_ast.Version.html +0 -6
  323. package/docs/classes/qasm3_ast.WhileLoopStatement.html +0 -6
  324. package/docs/classes/qasm3_lexer.default.html +0 -60
  325. package/docs/classes/qasm3_parser.default.html +0 -227
  326. package/docs/classes/version.OpenQASMVersion.html +0 -16
  327. package/docs/enums/qasm2_token.Token.html +0 -39
  328. package/docs/enums/qasm3_ast.ArithmeticOp.html +0 -9
  329. package/docs/enums/qasm3_ast.ArrayReferenceModifier.html +0 -4
  330. package/docs/enums/qasm3_ast.BinaryOp.html +0 -15
  331. package/docs/enums/qasm3_ast.DurationUnit.html +0 -7
  332. package/docs/enums/qasm3_ast.IOModifier.html +0 -4
  333. package/docs/enums/qasm3_ast.MathFunctionTypes.html +0 -12
  334. package/docs/enums/qasm3_ast.QuantumGateModifierName.html +0 -6
  335. package/docs/enums/qasm3_ast.TrigFunctionTypes.html +0 -8
  336. package/docs/enums/qasm3_ast.UnaryOp.html +0 -5
  337. package/docs/enums/qasm3_token.Token.html +0 -101
  338. package/docs/enums/version.OpenQASMMajorVersion.html +0 -4
  339. package/docs/functions/lexer.lex.html +0 -1
  340. package/docs/functions/main.parseFile.html +0 -4
  341. package/docs/functions/main.parseString.html +0 -4
  342. package/docs/functions/parser.parse.html +0 -1
  343. package/docs/functions/qasm2_token.inverseLookup.html +0 -3
  344. package/docs/functions/qasm2_token.lookup.html +0 -4
  345. package/docs/functions/qasm2_token.notParam.html +0 -3
  346. package/docs/functions/qasm3_token.inverseLookup.html +0 -3
  347. package/docs/functions/qasm3_token.lookup.html +0 -4
  348. package/docs/functions/qasm3_token.notParam.html +0 -3
  349. package/docs/hierarchy.html +0 -1
  350. package/docs/modules/errors.html +0 -21
  351. package/docs/modules/lexer.html +0 -2
  352. package/docs/modules/main.html +0 -3
  353. package/docs/modules/parser.html +0 -2
  354. package/docs/modules/qasm2_ast.html +0 -28
  355. package/docs/modules/qasm2_lexer.html +0 -2
  356. package/docs/modules/qasm2_parser.html +0 -2
  357. package/docs/modules/qasm2_token.html +0 -5
  358. package/docs/modules/qasm3_ast.html +0 -83
  359. package/docs/modules/qasm3_lexer.html +0 -2
  360. package/docs/modules/qasm3_parser.html +0 -2
  361. package/docs/modules/qasm3_token.html +0 -5
  362. package/docs/modules/version.html +0 -3
  363. package/docs/modules.html +0 -14
  364. package/docs/types/errors.ReturnErrorConstructor.html +0 -2
  365. /package/docs/{.nojekyll → typedoc/.nojekyll} +0 -0
@@ -0,0 +1,464 @@
1
+ <?xml version="1.0" encoding="utf-8" ?>
2
+ <!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Publishing DTD v1.2 20190208//EN"
3
+ "JATS-publishing1.dtd">
4
+ <article xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:xlink="http://www.w3.org/1999/xlink" dtd-version="1.2" article-type="other">
5
+ <front>
6
+ <journal-meta>
7
+ <journal-id></journal-id>
8
+ <journal-title-group>
9
+ <journal-title>Journal of Open Source Software</journal-title>
10
+ <abbrev-journal-title>JOSS</abbrev-journal-title>
11
+ </journal-title-group>
12
+ <issn publication-format="electronic">2475-9066</issn>
13
+ <publisher>
14
+ <publisher-name>Open Journals</publisher-name>
15
+ </publisher>
16
+ </journal-meta>
17
+ <article-meta>
18
+ <article-id pub-id-type="publisher-id">0</article-id>
19
+ <article-id pub-id-type="doi">N/A</article-id>
20
+ <title-group>
21
+ <article-title>Enabling the Verification and Formalization of Hybrid
22
+ Quantum-Classical Computing with OpenQASM 3.0 compatible QASM-TS
23
+ 2.0</article-title>
24
+ </title-group>
25
+ <contrib-group>
26
+ <contrib contrib-type="author">
27
+ <contrib-id contrib-id-type="orcid">https://orcid.org/0009-0006-1223-1895</contrib-id>
28
+ <name>
29
+ <surname>Kim</surname>
30
+ <given-names>Sean</given-names>
31
+ </name>
32
+ <xref ref-type="aff" rid="aff-2"/>
33
+ </contrib>
34
+ <contrib contrib-type="author">
35
+ <contrib-id contrib-id-type="orcid">https://orcid.org/0000-0001-6591-9585</contrib-id>
36
+ <name>
37
+ <surname>Edwards</surname>
38
+ <given-names>Marcus</given-names>
39
+ </name>
40
+ <xref ref-type="aff" rid="aff-1"/>
41
+ </contrib>
42
+ <aff id="aff-1">
43
+ <institution-wrap>
44
+ <institution>University of British Columbia</institution>
45
+ </institution-wrap>
46
+ </aff>
47
+ <aff id="aff-2">
48
+ <institution-wrap>
49
+ <institution>George Washington University</institution>
50
+ </institution-wrap>
51
+ </aff>
52
+ </contrib-group>
53
+ <pub-date date-type="pub" publication-format="electronic" iso-8601-date="2025-07-30">
54
+ <day>30</day>
55
+ <month>7</month>
56
+ <year>2025</year>
57
+ </pub-date>
58
+ <volume>¿VOL?</volume>
59
+ <issue>¿ISSUE?</issue>
60
+ <fpage>¿PAGE?</fpage>
61
+ <permissions>
62
+ <copyright-statement>Authors of papers retain copyright and release the
63
+ work under a Creative Commons Attribution 4.0 International License (CC
64
+ BY 4.0)</copyright-statement>
65
+ <copyright-year>1970</copyright-year>
66
+ <copyright-holder>The article authors</copyright-holder>
67
+ <license license-type="open-access" xlink:href="https://creativecommons.org/licenses/by/4.0/">
68
+ <license-p>Authors of papers retain copyright and release the work under
69
+ a Creative Commons Attribution 4.0 International License (CC BY
70
+ 4.0)</license-p>
71
+ </license>
72
+ </permissions>
73
+ <kwd-group kwd-group-type="author">
74
+ <kwd>TypeScript</kwd>
75
+ <kwd>Quantum computing</kwd>
76
+ <kwd>Compiling</kwd>
77
+ </kwd-group>
78
+ </article-meta>
79
+ </front>
80
+ <body>
81
+ <sec id="summary">
82
+ <title>Summary</title>
83
+ <p>The unique features of the hybrid quantum-classical computing model
84
+ implied by the specification of OpenQASM 3.0 motivate new approaches
85
+ to quantum program verification. We implement and thoroughly test a
86
+ QASM 3.0 parser in TypeScript to enable implementations of
87
+ verification and validation software, compilers and more. We aim to
88
+ help the community to formalize the logic of hybrid quantum-classical
89
+ computing by providing tools that may help with such efforts.</p>
90
+ <sec id="top-level-abstractions">
91
+ <title>Top Level Abstractions</title>
92
+ <p>Users can simply invoke the entire parsing process by calling the
93
+ two main package entry points:</p>
94
+ <list list-type="bullet">
95
+ <list-item>
96
+ <p><italic>parseFile</italic></p>
97
+ </list-item>
98
+ <list-item>
99
+ <p><italic>parseString</italic></p>
100
+ </list-item>
101
+ </list>
102
+ <p>The parser implements recursive descent parsing with support for
103
+ expression precedence and type checking. At a high level, the
104
+ parsing can be split into three logical sections: expression
105
+ parsing, quantum-specific parsing, and classical parsing.</p>
106
+ <p>Expression parsing forms the foundation for both quantum and
107
+ classical parsing by breaking down expressions into their
108
+ constituent parts and rebuilding them according to the mathematical
109
+ and operator syntax defined in the OpenQASM 3.0 official grammar
110
+ (<xref alt="OpenQASM 3.0 Grammar, n.d." rid="ref-noauthor_qasm_grammar_nodate" ref-type="bibr"><italic>OpenQASM
111
+ 3.0 Grammar</italic>, n.d.</xref>). Starting with basic elements
112
+ like numbers, variables, and operators, the parser constructs an
113
+ abstract syntax tree that reflects proper operator precedence and
114
+ nesting. This process handles not only mathematical operations but
115
+ also array accesses, function calls, and parameter lists, creating a
116
+ structured representation that maintains the logical relationships
117
+ between all parts of the expression.</p>
118
+ <p>Quantum operation parsing manages the core quantum computing
119
+ elements of QASM, ensuring that quantum operations are syntactically
120
+ correct. The parser maintains strict tracking of quantum resources
121
+ through its <italic>gates</italic>, <italic>standardGates</italic>,
122
+ and <italic>customGates</italic> sets, validating that each quantum
123
+ operation references only properly defined gates and qubits. It
124
+ processes quantum register declarations, custom gate definitions,
125
+ gate applications (including gate modifiers), measurement
126
+ operations, and timing-critical operations like barriers and delays.
127
+ Each quantum operation is validated in its context.</p>
128
+ <p>The classical parsing processes classical variable declarations
129
+ with strict type checking, function definitions with parameter and
130
+ return type validation, control flow structures like conditional
131
+ statements and loops, and array operations. The parser maintains
132
+ separate tracking for classical and quantum resources while ensuring
133
+ they can interact in well-defined ways. This enables QASM programs
134
+ to express complex quantum algorithms that require classical
135
+ processing while maintaining type safety and operational
136
+ validity.</p>
137
+ <p>Our parser produces a strongly-typed AST that captures the full
138
+ structure of QASM programs and is designed to enable subsequent
139
+ semantic analysis.</p>
140
+ </sec>
141
+ </sec>
142
+ <sec id="statement-of-need">
143
+ <title>Statement of Need</title>
144
+ <p>The OpenQASM 3.0 type system supports classical and quantum types
145
+ as well as functions which can be used to specify hybrid
146
+ quantum-classical programs.</p>
147
+ <p>There is need for formal analysis and verification of hybrid
148
+ quantum classical programs and we argue that mathematical frameworks
149
+ and software frameworks are needed to address this gap.</p>
150
+ <p>Hand-in-hand with formalization efforts are the development of
151
+ community standards for quantum programming. The standardization of
152
+ quantum computer programming is ongoing
153
+ (<xref alt="Cross et al., 2022" rid="ref-Cross_2022" ref-type="bibr">Cross
154
+ et al., 2022</xref>;
155
+ <xref alt="Di Matteo et al., 2024" rid="ref-di_matteo_abstraction_2024" ref-type="bibr">Di
156
+ Matteo et al., 2024</xref>) and relies significantly on open source
157
+ software and frameworks including some released only last year
158
+ (<xref alt="Seidel et al., 2024" rid="ref-seidel2024qrispframeworkcompilablehighlevel" ref-type="bibr">Seidel
159
+ et al., 2024</xref>;
160
+ <xref alt="Wille et al., 2024" rid="ref-qdmi" ref-type="bibr">Wille et
161
+ al., 2024</xref>). Some community standards such as the 2022 Open
162
+ Quantum Assembly (OpenQASM) 3.0 specification boast typing as well as
163
+ interoperability and portability between quantum systems of different
164
+ types. However, others such as the QUASAR instruction set architecture
165
+ assume some backend details such as a classical co-processor to
166
+ complement our Quantum Processing Unit (QPU)
167
+ (<xref alt="Shammah et al., 2024" rid="ref-shammah_open_2024" ref-type="bibr">Shammah
168
+ et al., 2024</xref>). To what extent the classical surrounds of a
169
+ quantum processing unit should be assumed or specified and at what
170
+ part of the stack is an open question. This “piping” can leverage many
171
+ classical programming paradigms including web technology. What we
172
+ refer to here is distinct from cloud quantum computing which simply
173
+ offers a web-accessible front-end to users of quantum computers.
174
+ Instead, we are interested in parts of the programming model itself,
175
+ such as pieces of the compile toolchain (compilers, transpilers,
176
+ assemblers, noise profilers, schedulers), which are implemented using
177
+ web technology. An example of this is Quantinuum’s QEC decoder toolkit
178
+ which uses a WebAssembly (WASM) virtual machine (WAVM) as a real-time
179
+ classical compute environment for QEC decoding
180
+ (<xref alt="QEC Decoder Toolkit - H-Series, n.d." rid="ref-noauthor_qec_nodate" ref-type="bibr"><italic>QEC
181
+ Decoder Toolkit - H-Series</italic>, n.d.</xref>). Other examples
182
+ include our ports of Quantum Assembly (QASM), Quantum Macro Assembler
183
+ (QMASM) and Blackbrid to TypeScript
184
+ (<xref alt="Edwards, 2023" rid="ref-edwards_three_2023" ref-type="bibr">Edwards,
185
+ 2023</xref>).</p>
186
+ <p>An important part of standardization is verification. By our typed
187
+ implementation of an OpenQASM 3.0 parser, we implement a system that
188
+ infers types from QASM syntax. This opens the door to the type based
189
+ formal verification of QASM code. A body of work exists regarding the
190
+ verification of quantum software, which is summarized in
191
+ (<xref alt="Fortunato et al., 2024" rid="ref-exman_verification_2024" ref-type="bibr">Fortunato
192
+ et al., 2024</xref>).</p>
193
+ <p>The primary future direction that we see is the development of
194
+ verification tools such as static analysis tools based on QASM-TS in
195
+ the vein of QChecker
196
+ (<xref alt="Zhao et al., 2023" rid="ref-zhao_qchecker_2023" ref-type="bibr">Zhao
197
+ et al., 2023</xref>). This could be complemented by a formal type
198
+ theory of OpenQASM 3.0.</p>
199
+ <p>Virtually every quantum computing company has provided access
200
+ through a hybrid cloud. This demands that parts of the stack be
201
+ implemented in web technology, and we argue that it is optimal in a
202
+ sense to use technology that is designed for this environment when we
203
+ find ourselves working in a hybrid quantum / classical cloud. We
204
+ suggest that a closer marriage of open source efforts to the
205
+ inherently web based stack supporting existing quantum computing
206
+ offerings is desirable.</p>
207
+ </sec>
208
+ <sec id="outcomes">
209
+ <title>Outcomes</title>
210
+ <p>Our comparative analysis focused on two promiment OpenQASM 3.0
211
+ parsers: Qiskit’s Python ANLTR-based reference implementation and
212
+ Qiskit’s experimental Rust parser.</p>
213
+ <sec id="performance-benchmarking">
214
+ <title>Performance Benchmarking</title>
215
+ <table-wrap>
216
+ <table>
217
+ <thead>
218
+ <tr>
219
+ <th align="left">Benchmark Results</th>
220
+ <th></th>
221
+ <th></th>
222
+ <th></th>
223
+ </tr>
224
+ </thead>
225
+ <tbody>
226
+ <tr>
227
+ <td align="left">Result</td>
228
+ <td>ANTLR Parser</td>
229
+ <td>Rust Parser</td>
230
+ <td>Qasm-ts</td>
231
+ </tr>
232
+ <tr>
233
+ <td align="left">Success Rate</td>
234
+ <td>100% (11/11 files)</td>
235
+ <td>18.2% (2/11 files)</td>
236
+ <td>100% (11/11 files)</td>
237
+ </tr>
238
+ <tr>
239
+ <td align="left">Average Time</td>
240
+ <td>8.53 ms</td>
241
+ <td>0.59 ms</td>
242
+ <td>0.90 ms</td>
243
+ </tr>
244
+ <tr>
245
+ <td align="left">Min Time</td>
246
+ <td>1.93 ms</td>
247
+ <td>0.55 ms</td>
248
+ <td>0.36 ms</td>
249
+ </tr>
250
+ <tr>
251
+ <td align="left">Max Time</td>
252
+ <td>30.54 ms</td>
253
+ <td>0.62 ms</td>
254
+ <td>3.68 ms</td>
255
+ </tr>
256
+ </tbody>
257
+ </table>
258
+ </table-wrap>
259
+ <p>The benchmarking reveals that when just taking into account the
260
+ AST generation, the Rust implementation generally offers superior
261
+ raw performance, but suffers from only currently supporting a subset
262
+ of the full OpenQASM 3.0 specification. The QASM-TS parser provides
263
+ competitive performance for web deployment scenarios, while the
264
+ ANTLR parser offers a balance of features and performance suitable
265
+ for development and testing.</p>
266
+ </sec>
267
+ </sec>
268
+ <sec id="acknowledgements">
269
+ <title>Acknowledgements</title>
270
+ <p>We would like to thank Dr. Shohini Ghose for support and helpful
271
+ discussions regarding the previous version of this software package,
272
+ QASM-TS 1.0, which has had use in the community by hundreds (counted
273
+ by npm downloads).</p>
274
+ </sec>
275
+ </body>
276
+ <back>
277
+ <ref-list>
278
+ <title></title>
279
+ <ref id="ref-di_matteo_abstraction_2024">
280
+ <element-citation>
281
+ <person-group person-group-type="author">
282
+ <name><surname>Di Matteo</surname><given-names>Olivia</given-names></name>
283
+ <name><surname>Nunez-Corrales</surname><given-names>Santiago</given-names></name>
284
+ <name><surname>Stechly</surname><given-names>Michal</given-names></name>
285
+ <name><surname>Reinhardt</surname><given-names>Steven P.</given-names></name>
286
+ <name><surname>Mattson</surname><given-names>Tim</given-names></name>
287
+ </person-group>
288
+ <article-title>An Abstraction Hierarchy Toward Productive Quantum Programming</article-title>
289
+ <source>arXiv.org</source>
290
+ <year iso-8601-date="2024-05">2024</year><month>05</month>
291
+ <date-in-citation content-type="access-date"><year iso-8601-date="2024-09-12">2024</year><month>09</month><day>12</day></date-in-citation>
292
+ <uri>https://arxiv.org/abs/2405.13918v1</uri>
293
+ </element-citation>
294
+ </ref>
295
+ <ref id="ref-Cross_2022">
296
+ <element-citation publication-type="article-journal">
297
+ <person-group person-group-type="author">
298
+ <name><surname>Cross</surname><given-names>Andrew</given-names></name>
299
+ <name><surname>Javadi-Abhari</surname><given-names>Ali</given-names></name>
300
+ <name><surname>Alexander</surname><given-names>Thomas</given-names></name>
301
+ <name><surname>De Beaudrap</surname><given-names>Niel</given-names></name>
302
+ <name><surname>Bishop</surname><given-names>Lev S.</given-names></name>
303
+ <name><surname>Heidel</surname><given-names>Steven</given-names></name>
304
+ <name><surname>Ryan</surname><given-names>Colm A.</given-names></name>
305
+ <name><surname>Sivarajah</surname><given-names>Prasahnt</given-names></name>
306
+ <name><surname>Smolin</surname><given-names>John</given-names></name>
307
+ <name><surname>Gambetta</surname><given-names>Jay M.</given-names></name>
308
+ <name><surname>Johnson</surname><given-names>Blake R.</given-names></name>
309
+ </person-group>
310
+ <article-title>OpenQASM 3: A broader and deeper quantum assembly language</article-title>
311
+ <source>ACM Transactions on Quantum Computing</source>
312
+ <publisher-name>Association for Computing Machinery (ACM)</publisher-name>
313
+ <year iso-8601-date="2022-09">2022</year><month>09</month>
314
+ <volume>3</volume>
315
+ <issue>3</issue>
316
+ <issn>2643-6817</issn>
317
+ <uri>http://dx.doi.org/10.1145/3505636</uri>
318
+ <pub-id pub-id-type="doi">10.1145/3505636</pub-id>
319
+ <fpage>1</fpage>
320
+ <lpage>50</lpage>
321
+ </element-citation>
322
+ </ref>
323
+ <ref id="ref-seidel2024qrispframeworkcompilablehighlevel">
324
+ <element-citation>
325
+ <person-group person-group-type="author">
326
+ <name><surname>Seidel</surname><given-names>Raphael</given-names></name>
327
+ <name><surname>Bock</surname><given-names>Sebastian</given-names></name>
328
+ <name><surname>Zander</surname><given-names>René</given-names></name>
329
+ <name><surname>Petrič</surname><given-names>Matic</given-names></name>
330
+ <name><surname>Steinmann</surname><given-names>Niklas</given-names></name>
331
+ <name><surname>Tcholtchev</surname><given-names>Nikolay</given-names></name>
332
+ <name><surname>Hauswirth</surname><given-names>Manfred</given-names></name>
333
+ </person-group>
334
+ <article-title>Qrisp: A framework for compilable high-level programming of gate-based quantum computers</article-title>
335
+ <year iso-8601-date="2024">2024</year>
336
+ <uri>https://arxiv.org/abs/2406.14792</uri>
337
+ </element-citation>
338
+ </ref>
339
+ <ref id="ref-shammah_open_2024">
340
+ <element-citation publication-type="article-journal">
341
+ <person-group person-group-type="author">
342
+ <name><surname>Shammah</surname><given-names>Nathan</given-names></name>
343
+ <name><surname>Roy</surname><given-names>Anurag Saha</given-names></name>
344
+ <name><surname>Almudever</surname><given-names>Carmen G.</given-names></name>
345
+ <name><surname>Bourdeauducq</surname><given-names>Sébastien</given-names></name>
346
+ <name><surname>Butko</surname><given-names>Anastasiia</given-names></name>
347
+ <name><surname>Cancelo</surname><given-names>Gustavo</given-names></name>
348
+ <name><surname>Clark</surname><given-names>Susan M.</given-names></name>
349
+ <name><surname>Heinsoo</surname><given-names>Johannes</given-names></name>
350
+ <name><surname>Henriet</surname><given-names>Loïc</given-names></name>
351
+ <name><surname>Huang</surname><given-names>Gang</given-names></name>
352
+ <name><surname>Jurczak</surname><given-names>Christophe</given-names></name>
353
+ <name><surname>Kotilahti</surname><given-names>Janne</given-names></name>
354
+ <name><surname>Landra</surname><given-names>Alessandro</given-names></name>
355
+ <name><surname>LaRose</surname><given-names>Ryan</given-names></name>
356
+ <name><surname>Mari</surname><given-names>Andrea</given-names></name>
357
+ <name><surname>Nowrouzi</surname><given-names>Kasra</given-names></name>
358
+ <name><surname>Ockeloen-Korppi</surname><given-names>Caspar</given-names></name>
359
+ <name><surname>Prawiroatmodjo</surname><given-names>Guen</given-names></name>
360
+ <name><surname>Siddiqi</surname><given-names>Irfan</given-names></name>
361
+ <name><surname>Zeng</surname><given-names>William J.</given-names></name>
362
+ </person-group>
363
+ <article-title>Open Hardware Solutions in Quantum Technology</article-title>
364
+ <source>APL Quantum</source>
365
+ <year iso-8601-date="2024-03">2024</year><month>03</month>
366
+ <date-in-citation content-type="access-date"><year iso-8601-date="2024-09-09">2024</year><month>09</month><day>09</day></date-in-citation>
367
+ <volume>1</volume>
368
+ <issue>1</issue>
369
+ <issn>2835-0103</issn>
370
+ <uri>http://arxiv.org/abs/2309.17233</uri>
371
+ <pub-id pub-id-type="doi">10.1063/5.0180987</pub-id>
372
+ <fpage>011501</fpage>
373
+ <lpage></lpage>
374
+ </element-citation>
375
+ </ref>
376
+ <ref id="ref-edwards_three_2023">
377
+ <element-citation>
378
+ <person-group person-group-type="author">
379
+ <name><surname>Edwards</surname><given-names>Marcus</given-names></name>
380
+ </person-group>
381
+ <article-title>Three Quantum Programming Language Parser Implementations for the Web</article-title>
382
+ <publisher-name>arXiv</publisher-name>
383
+ <year iso-8601-date="2023-10">2023</year><month>10</month>
384
+ <date-in-citation content-type="access-date"><year iso-8601-date="2024-11-20">2024</year><month>11</month><day>20</day></date-in-citation>
385
+ <uri>http://arxiv.org/abs/2310.10802</uri>
386
+ <pub-id pub-id-type="doi">10.48550/arXiv.2310.10802</pub-id>
387
+ </element-citation>
388
+ </ref>
389
+ <ref id="ref-noauthor_qasm_grammar_nodate">
390
+ <element-citation>
391
+ <article-title>OpenQASM 3.0 Grammar</article-title>
392
+ <date-in-citation content-type="access-date"><year iso-8601-date="2024-11-24">2024</year><month>11</month><day>24</day></date-in-citation>
393
+ <uri>https://openqasm.com/grammar/index.html</uri>
394
+ </element-citation>
395
+ </ref>
396
+ <ref id="ref-noauthor_qec_nodate">
397
+ <element-citation>
398
+ <article-title>QEC Decoder Toolkit - H-Series</article-title>
399
+ <date-in-citation content-type="access-date"><year iso-8601-date="2024-11-20">2024</year><month>11</month><day>20</day></date-in-citation>
400
+ <uri>https://docs.quantinuum.com/h-series/trainings/getting_started/pytket_quantinuum/qec_decoder_toolkit/Quantinuum_hseries_qec_decoder_toolkit.html?_gl=1*srcw0e*_gcl_au*MTU2MzIwMzA1NC4xNzI5NTk1NzEw</uri>
401
+ </element-citation>
402
+ </ref>
403
+ <ref id="ref-qdmi">
404
+ <element-citation publication-type="paper-conference">
405
+ <person-group person-group-type="author">
406
+ <name><surname>Wille</surname><given-names>Robert</given-names></name>
407
+ <name><surname>Schmid</surname><given-names>Ludwig</given-names></name>
408
+ <name><surname>Stade</surname><given-names>Yannick</given-names></name>
409
+ <name><surname>Echavarria</surname><given-names>Jorge</given-names></name>
410
+ <name><surname>Schulz</surname><given-names>Martin</given-names></name>
411
+ <name><surname>Schulz</surname><given-names>Laura</given-names></name>
412
+ <name><surname>Burgholzer</surname><given-names>Lukas</given-names></name>
413
+ </person-group>
414
+ <article-title>QDMI – Quantum Device Management Interface: A Standardized Interface for Quantum Computing Platforms</article-title>
415
+ <source>IEEE international conference on quantum computing and engineering (QCE)</source>
416
+ <year iso-8601-date="2024">2024</year>
417
+ </element-citation>
418
+ </ref>
419
+ <ref id="ref-exman_verification_2024">
420
+ <element-citation publication-type="chapter">
421
+ <person-group person-group-type="author">
422
+ <name><surname>Fortunato</surname><given-names>Daniel</given-names></name>
423
+ <name><surname>Jiménez-Navajas</surname><given-names>Luis</given-names></name>
424
+ <name><surname>Campos</surname><given-names>José</given-names></name>
425
+ <name><surname>Abreu</surname><given-names>Rui</given-names></name>
426
+ </person-group>
427
+ <article-title>Verification and Validation of Quantum Software</article-title>
428
+ <source>Quantum Software</source>
429
+ <person-group person-group-type="editor">
430
+ <name><surname>Exman</surname><given-names>Iaakov</given-names></name>
431
+ <name><surname>Pérez-Castillo</surname><given-names>Ricardo</given-names></name>
432
+ <name><surname>Piattini</surname><given-names>Mario</given-names></name>
433
+ <name><surname>Felderer</surname><given-names>Michael</given-names></name>
434
+ </person-group>
435
+ <publisher-name>Springer Nature Switzerland</publisher-name>
436
+ <publisher-loc>Cham</publisher-loc>
437
+ <year iso-8601-date="2024">2024</year>
438
+ <date-in-citation content-type="access-date"><year iso-8601-date="2024-11-21">2024</year><month>11</month><day>21</day></date-in-citation>
439
+ <isbn>978-3-031-64136-7</isbn>
440
+ <uri>https://link.springer.com/10.1007/978-3-031-64136-7_5</uri>
441
+ <pub-id pub-id-type="doi">10.1007/978-3-031-64136-7_5</pub-id>
442
+ <fpage>93</fpage>
443
+ <lpage>123</lpage>
444
+ </element-citation>
445
+ </ref>
446
+ <ref id="ref-zhao_qchecker_2023">
447
+ <element-citation>
448
+ <person-group person-group-type="author">
449
+ <name><surname>Zhao</surname><given-names>Pengzhan</given-names></name>
450
+ <name><surname>Wu</surname><given-names>Xiongfei</given-names></name>
451
+ <name><surname>Li</surname><given-names>Zhuo</given-names></name>
452
+ <name><surname>Zhao</surname><given-names>Jianjun</given-names></name>
453
+ </person-group>
454
+ <article-title>QChecker: Detecting Bugs in Quantum Programs via Static Analysis</article-title>
455
+ <publisher-name>arXiv</publisher-name>
456
+ <year iso-8601-date="2023-04">2023</year><month>04</month>
457
+ <date-in-citation content-type="access-date"><year iso-8601-date="2024-11-25">2024</year><month>11</month><day>25</day></date-in-citation>
458
+ <uri>http://arxiv.org/abs/2304.04387</uri>
459
+ <pub-id pub-id-type="doi">10.48550/arXiv.2304.04387</pub-id>
460
+ </element-citation>
461
+ </ref>
462
+ </ref-list>
463
+ </back>
464
+ </article>