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
|
# HloModule string syntax
TODO: Support all subcomputations (for fusion, reduce, ...).
TODO: Support all extra attributes, e.g. dimensions, strides.
```yacc
hlo_module
: 'HloModule' name computations
;
computations
: computation
| computation computations
;
computation
: 'ENTRY' name param_list '->' shape instruction_list
| name param_list '->' shape instruction_list
;
instruction_list
: '{' instruction_list1 '}'
;
instruction_list1
: instruction
| instruction_list1 instruction
;
instruction
: 'ROOT' name '=' shape opcode operands extra_attributes
| name '=' shape opcode operands extra_attributes
;
operands
: '(' operands1 ')'
;
operands1
: /*empty*/
| operand
| operands1 ',' operand
;
operand
: shape name
;
attributes
: /*empty*/
| ',' attribute
| ',' attribute attributes
;
attribute
: attribute_name attribute_value
;
attribute_value
: kInt
| kName
| [0-9bf]{3,}_[0-9io]{3,}->[0-9bf]{3,} /*dim_labels_pattern*/
| [0-9]+(x[0-9]+)+ /*dxd_pattern*/
| [0-9]+_[0-9]+(_[0-9]+)?(x[0-9]+_[0-9]+(_[0-9]+)?)* /*pad_pattern*/
| '{' sub_attributes '}'
;
param_list
: '(' param_list1 ')'
;
param_list1
: /*empty*/
| param
| param_list1 ',' param
;
param
: name shape
;
shape
: shape_val_
| '(' tuple_elements ')'
;
tuple_elements
: /*empty*/
| shape (',' shape)*
;
name
: identifier ':'
| '%' identifier
;
identifier
: [a-zA-Z_][a-zA-Z0-9_.-]*
;
/* literal is in the right hand side of a constant instruction. */
literal
: tuple
| non_tuple
;
tuple
: shape '(' literal_list ')'
;
literal_list
: /*empty*/
: literal
| literal_list ',' literal
;
non_tuple
: rank01
| rank2345
;
rank2345
: shape nested_array
;
```
|