openqasm/source/grammar/tests/reference/subroutine/subroutine.yaml

214 lines
5.0 KiB
YAML

# indent w/ 2 spaces
source: |
def test_sub1(int[5] i, qubit[2] q1, qreg q2[5]) -> int[10] {
int[10] result;
if (result == 2) return 1 + result;
return result;
}
def test_sub2(int[5] i, bit[2] b, creg c[3]) {
for int[5] j in {2, 3}
i += j;
return i+1;
}
def returns_a_measure(qubit q) {
return measure q;
}
reference: |
program
statementOrScope
statement
defStatement
def
test_sub1
(
argumentDefinitionList
argumentDefinition
scalarType
int
designator
[
expression
5
]
i
,
argumentDefinition
qubitType
qubit
designator
[
expression
2
]
q1
,
argumentDefinition
qreg
q2
designator
[
expression
5
]
)
returnSignature
->
scalarType
int
designator
[
expression
10
]
scope
{
statementOrScope
statement
classicalDeclarationStatement
scalarType
int
designator
[
expression
10
]
result
;
statementOrScope
statement
ifStatement
if
(
expression
expression
result
==
expression
2
)
statementOrScope
statement
returnStatement
return
expression
expression
1
+
expression
result
;
statementOrScope
statement
returnStatement
return
expression
result
;
}
statementOrScope
statement
defStatement
def
test_sub2
(
argumentDefinitionList
argumentDefinition
scalarType
int
designator
[
expression
5
]
i
,
argumentDefinition
scalarType
bit
designator
[
expression
2
]
b
,
argumentDefinition
creg
c
designator
[
expression
3
]
)
scope
{
statementOrScope
statement
forStatement
for
scalarType
int
designator
[
expression
5
]
j
in
setExpression
{
expression
2
,
expression
3
}
statementOrScope
statement
assignmentStatement
indexedIdentifier
i
+=
expression
j
;
statementOrScope
statement
returnStatement
return
expression
expression
i
+
expression
1
;
}
statementOrScope
statement
defStatement
def
returns_a_measure
(
argumentDefinitionList
argumentDefinition
qubitType
qubit
q
)
scope
{
statementOrScope
statement
returnStatement
return
measureExpression
measure
gateOperand
indexedIdentifier
q
;
}
<EOF>