-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathQASM.g4
120 lines (97 loc) · 1.53 KB
/
QASM.g4
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
grammar QASM;
mainprog
: version statement*
;
statement
: decl
| gatedecl goplist '}'
| gatedecl '}'
| 'opaque' ID idlist ';'
| 'opaque' ID '(' ')' idlist ';'
| 'opaque' ID '(' idlist ')' idlist ';'
| qop
| 'if' '(' ID '==' INT ')' qop
| 'barrier' anylist ';'
;
version
: 'OPENQASM' REAL ';'
;
decl
: 'qreg' ID '[' INT ']' ';'
| 'creg' ID '[' INT ']' ';'
;
gatedecl
: 'gate' ID idlist '{'
| 'gate' ID '(' ')' idlist '{'
| 'gate' ID '(' idlist ')' idlist '{'
;
goplist
: (uop | '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 ',')* ID
;
mixedlist
: (ID '[' INT ']' ',')* ID
| (ID '[' INT ']' ',')* ID '[' INT ']'
| ((ID ',')* ID ',')* ID '[' INT ']'
;
argument
: ID
| ID '[' INT ']'
;
explist
: (exp ',')* exp
;
exp
: REAL
| INT
| 'pi'
| ID
| exp '+' exp
| exp '-' exp
| exp '*' exp
| exp '/' exp
| '-' exp
| exp '^' exp
| '(' exp ')'
| unaryop '(' exp ')'
;
unaryop
: 'sin' | 'cos' | 'tan' | 'exp' | 'ln' | 'sqrt'
;
// Other / REGEX Tokens
ID
: [a-z][A-Za-z0-9_]*
;
REAL
: INT '.' [0-9]+ ([eE][+-]? [0-9]+)?
;
INT
: [+-]? [0-9]+
;
WS
: [ \t\u000C\r\n]+ -> skip
;
COMMENT
: '/*' .*? '*/' -> skip
;
LINE_COMMENT
: '//' ~[\r\n]* -> skip
;