source 
 prog 
 defn 
 TYP 
 1:1-1:3 
 typ 
 ID 
 1:5-1:5 
 i 
 EQUALS 
 1:7-1:7 
 = 
 type 
 INT 
 1:9-1:11 
 int 
 defn 
 TYP 
 2:1-2:3 
 typ 
 ID 
 2:5-2:5 
 c 
 EQUALS 
 2:7-2:7 
 = 
 type 
 CHAR 
 2:9-2:12 
 char 
 defn 
 TYP 
 3:1-3:3 
 typ 
 ID 
 3:5-3:5 
 b 
 EQUALS 
 3:7-3:7 
 = 
 type 
 BOOL 
 3:9-3:12 
 bool 
 defn 
 FUN 
 5:1-5:3 
 fun 
 ID 
 5:5-5:6 
 bb 
 LBRACKET 
 5:7-5:7 
 ( 
 ID 
 5:8-5:9 
 b1 
 COLON 
 5:10-5:10 
 : 
 type 
 INT 
 5:11-5:13 
 int 
 COMMA 
 5:14-5:14 
 , 
 ID 
 5:16-5:17 
 b2 
 COLON 
 5:18-5:18 
 : 
 type 
 INT 
 5:19-5:21 
 int 
 RBRACKET 
 5:22-5:22 
 ) 
 COLON 
 5:23-5:23 
 : 
 type 
 ID 
 5:25-5:25 
 b 
 EQUALS 
 5:27-5:27 
 = 
 expr 
 LET 
 6:5-6:7 
 let 
 defn 
 FUN 
 7:9-7:11 
 fun 
 ID 
 7:13-7:15 
 bbb 
 LBRACKET 
 7:16-7:16 
 ( 
 ID 
 7:17-7:18 
 d1 
 COLON 
 7:19-7:19 
 : 
 type 
 ID 
 7:20-7:20 
 i 
 COMMA 
 7:21-7:21 
 , 
 ID 
 7:23-7:24 
 d2 
 COLON 
 7:25-7:25 
 : 
 type 
 ID 
 7:26-7:26 
 i 
 RBRACKET 
 7:27-7:27 
 ) 
 COLON 
 7:29-7:29 
 : 
 type 
 ID 
 7:31-7:31 
 i 
 EQUALS 
 7:33-7:33 
 = 
 expr 
 expr 
 ID 
 7:35-7:36 
 d1 
 PLUS 
 7:38-7:38 
 + 
 expr 
 ID 
 7:40-7:41 
 d2 
 IN 
 8:5-8:6 
 in 
 expr 
 LET 
 9:9-9:11 
 let 
 defn 
 FUN 
 9:13-9:15 
 fun 
 ID 
 9:17-9:18 
 aa 
 LBRACKET 
 9:19-9:19 
 ( 
 RBRACKET 
 9:20-9:20 
 ) 
 COLON 
 9:22-9:22 
 : 
 type 
 ID 
 9:24-9:24 
 c 
 EQUALS 
 9:26-9:26 
 = 
 expr 
 LITCHAR 
 9:28-9:30 
 'a' 
 defn 
 FUN 
 10:13-10:15 
 fun 
 ID 
 10:17-10:19 
 aaa 
 LBRACKET 
 10:20-10:20 
 ( 
 ID 
 10:21-10:21 
 f 
 COLON 
 10:22-10:22 
 : 
 type 
 ID 
 10:23-10:23 
 i 
 RBRACKET 
 10:24-10:24 
 ) 
 COLON 
 10:26-10:26 
 : 
 type 
 ID 
 10:28-10:28 
 i 
 EQUALS 
 10:30-10:30 
 = 
 expr 
 expr 
 expr 
 expr 
 NUM 
 10:32-10:32 
 5 
 ASTERISK 
 10:34-10:34 
 * 
 expr 
 NUM 
 10:36-10:36 
 4 
 PLUS 
 10:38-10:38 
 + 
 expr 
 NUM 
 10:40-10:40 
 7 
 PLUS 
 10:42-10:42 
 + 
 expr 
 expr 
 NUM 
 10:44-10:44 
 9 
 PERCENT 
 10:46-10:46 
 % 
 expr 
 NUM 
 10:48-10:50 
 110 
 IN 
 11:9-11:10 
 in 
 expr 
 expr 
 expr 
 ID 
 12:13-12:15 
 aaa 
 LBRACKET 
 12:16-12:16 
 ( 
 expr 
 NUM 
 12:17-12:17 
 8 
 RBRACKET 
 12:18-12:18 
 ) 
 ASTERISK 
 12:20-12:20 
 * 
 expr 
 expr 
 ID 
 12:22-12:24 
 bbb 
 LBRACKET 
 12:25-12:25 
 ( 
 expr 
 NUM 
 12:26-12:26 
 2 
 COMMA 
 12:27-12:27 
 , 
 expr 
 NUM 
 12:29-12:29 
 3 
 RBRACKET 
 12:30-12:30 
 ) 
 END 
 13:5-13:7 
 end 
 COMMA 
 13:8-13:8 
 , 
 expr 
 expr 
 ID 
 14:5-14:6 
 b1 
 GEQ 
 14:8-14:9 
 >= 
 expr 
 ID 
 14:11-14:12 
 b2 
 END 
 15:4-15:6 
 end 
 EOF