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