source 
 prog 
 defn 
 TYP 
 1:1-1:3 
 typ 
 ID 
 1:5-1:7 
 idt 
 EQUALS 
 1:9-1:9 
 = 
 type 
 INT 
 1:11-1:13 
 int 
 defn 
 TYP 
 2:1-2:3 
 typ 
 ID 
 2:5-2:6 
 T1 
 EQUALS 
 2:8-2:8 
 = 
 type 
 INT 
 2:10-2:12 
 int 
 defn 
 TYP 
 3:1-3:3 
 typ 
 ID 
 3:5-3:6 
 T2 
 EQUALS 
 3:8-3:8 
 = 
 type 
 ID 
 3:10-3:11 
 T1 
 defn 
 TYP 
 4:1-4:3 
 typ 
 ID 
 4:5-4:6 
 T3 
 EQUALS 
 4:8-4:8 
 = 
 type 
 ID 
 4:10-4:11 
 T2 
 defn 
 TYP 
 5:1-5:3 
 typ 
 ID 
 5:5-5:6 
 id 
 EQUALS 
 5:8-5:8 
 = 
 type 
 ID 
 5:10-5:12 
 idt 
 defn 
 VAR 
 7:1-7:3 
 var 
 ID 
 7:5-7:7 
 idv 
 COLON 
 7:9-7:9 
 : 
 type 
 LSQUARE 
 7:11-7:11 
 [ 
 NUM 
 7:12-7:13 
 10 
 RSQUARE 
 7:14-7:14 
 ] 
 type 
 ID 
 7:15-7:17 
 idt 
 defn 
 FUN 
 9:1-9:3 
 fun 
 ID 
 9:5-9:7 
 idf 
 LBRACKET 
 9:9-9:9 
 ( 
 ID 
 9:11-9:13 
 id1 
 COLON 
 9:15-9:15 
 : 
 type 
 ID 
 9:17-9:18 
 T1 
 COMMA 
 9:20-9:20 
 , 
 ID 
 9:22-9:24 
 id2 
 COLON 
 9:26-9:26 
 : 
 type 
 ID 
 9:28-9:29 
 T2 
 COMMA 
 9:31-9:31 
 , 
 ID 
 9:33-9:35 
 id3 
 COLON 
 9:37-9:37 
 : 
 type 
 ID 
 9:39-9:40 
 T3 
 RBRACKET 
 9:42-9:42 
 ) 
 COLON 
 9:44-9:44 
 : 
 type 
 ID 
 9:46-9:48 
 idt 
 defn 
 FUN 
 11:1-11:3 
 fun 
 ID 
 11:5-11:8 
 idff 
 LBRACKET 
 11:10-11:10 
 ( 
 ID 
 11:12-11:14 
 abc 
 COLON 
 11:16-11:16 
 : 
 type 
 ID 
 11:18-11:19 
 id 
 RBRACKET 
 11:20-11:20 
 ) 
 COLON 
 11:22-11:22 
 : 
 type 
 ID 
 11:24-11:26 
 idt 
 EQUALS 
 11:28-11:28 
 = 
 expr 
 NUM 
 11:30-11:30 
 1 
 COMMA 
 11:31-11:31 
 , 
 expr 
 NUM 
 11:33-11:33 
 2 
 COMMA 
 11:34-11:34 
 , 
 expr 
 NUM 
 11:36-11:36 
 3 
 COMMA 
 11:37-11:37 
 , 
 expr 
 WHILE 
 11:39-11:43 
 while 
 expr 
 NUM 
 11:45-11:45 
 2 
 DO 
 11:47-11:48 
 do 
 expr 
 NUM 
 11:50-11:50 
 1 
 COMMA 
 11:51-11:51 
 , 
 expr 
 NUM 
 11:53-11:53 
 2 
 COMMA 
 11:54-11:54 
 , 
 expr 
 NUM 
 11:56-11:56 
 3 
 END 
 11:58-11:60 
 end 
 EOF