source 
 prog 
 defn 
 TYP 
 1:1-1:3 
 typ 
 ID 
 1:5-1:12 
 randomid 
 EQUALS 
 1:14-1:14 
 = 
 type 
 VOID 
 1:16-1:19 
 void 
 defn 
 VAR 
 2:1-2:3 
 var 
 ID 
 2:5-2:7 
 id4 
 COLON 
 2:9-2:9 
 : 
 type 
 LBRACKET 
 2:11-2:11 
 ( 
 ID 
 2:12-2:12 
 a 
 COLON 
 2:13-2:13 
 : 
 type 
 LSQUARE 
 2:14-2:14 
 [ 
 NUM 
 2:15-2:15 
 1 
 RSQUARE 
 2:16-2:16 
 ] 
 type 
 LSQUARE 
 2:17-2:17 
 [ 
 NUM 
 2:18-2:18 
 2 
 RSQUARE 
 2:19-2:19 
 ] 
 type 
 LSQUARE 
 2:20-2:20 
 [ 
 NUM 
 2:21-2:21 
 4 
 RSQUARE 
 2:22-2:22 
 ] 
 type 
 BOOL 
 2:23-2:26 
 bool 
 COMMA 
 2:27-2:27 
 , 
 ID 
 2:29-2:29 
 b 
 COLON 
 2:30-2:30 
 : 
 type 
 HAT 
 2:32-2:32 
 ^ 
 type 
 HAT 
 2:33-2:33 
 ^ 
 type 
 HAT 
 2:34-2:34 
 ^ 
 type 
 HAT 
 2:35-2:35 
 ^ 
 type 
 HAT 
 2:36-2:36 
 ^ 
 type 
 HAT 
 2:37-2:37 
 ^ 
 type 
 HAT 
 2:38-2:38 
 ^ 
 type 
 HAT 
 2:39-2:39 
 ^ 
 type 
 HAT 
 2:40-2:40 
 ^ 
 type 
 HAT 
 2:41-2:41 
 ^ 
 type 
 HAT 
 2:42-2:42 
 ^ 
 type 
 HAT 
 2:43-2:43 
 ^ 
 type 
 HAT 
 2:44-2:44 
 ^ 
 type 
 HAT 
 2:45-2:45 
 ^ 
 type 
 VOID 
 2:46-2:49 
 void 
 COMMA 
 2:50-2:50 
 , 
 ID 
 2:52-2:52 
 c 
 COLON 
 2:53-2:53 
 : 
 type 
 ID 
 2:55-2:62 
 randomid 
 COMMA 
 2:63-2:63 
 , 
 ID 
 2:65-2:65 
 x 
 COLON 
 2:66-2:66 
 : 
 type 
 LBRACKET 
 2:68-2:68 
 ( 
 ID 
 2:69-2:69 
 d 
 COLON 
 2:71-2:71 
 : 
 type 
 INT 
 2:73-2:75 
 int 
 COMMA 
 2:76-2:76 
 , 
 ID 
 2:78-2:78 
 e 
 COLON 
 2:80-2:80 
 : 
 type 
 BOOL 
 2:82-2:85 
 bool 
 COMMA 
 2:86-2:86 
 , 
 ID 
 2:88-2:88 
 f 
 COLON 
 2:90-2:90 
 : 
 type 
 CHAR 
 2:92-2:95 
 char 
 COMMA 
 2:96-2:96 
 , 
 ID 
 2:98-2:98 
 g 
 COLON 
 2:100-2:100 
 : 
 type 
 LCURLY 
 2:102-2:102 
 { 
 ID 
 2:104-2:104 
 h 
 COLON 
 2:106-2:106 
 : 
 type 
 HAT 
 2:108-2:108 
 ^ 
 type 
 HAT 
 2:109-2:109 
 ^ 
 type 
 INT 
 2:110-2:112 
 int 
 COMMA 
 2:113-2:113 
 , 
 ID 
 2:115-2:115 
 i 
 COLON 
 2:116-2:116 
 : 
 type 
 VOID 
 2:118-2:121 
 void 
 RCURLY 
 2:122-2:122 
 } 
 RBRACKET 
 2:123-2:123 
 ) 
 RBRACKET 
 2:125-2:125 
 ) 
 EOF