source 
 prog 
 defn 
 FUN 
 1:1-1:3 
 fun 
 ID 
 1:5-1:10 
 dec100 
 LBRACKET 
 1:11-1:11 
 ( 
 ID 
 1:12-1:12 
 p 
 COLON 
 1:13-1:13 
 : 
 type 
 INT 
 1:14-1:16 
 int 
 RBRACKET 
 1:17-1:17 
 ) 
 COLON 
 1:18-1:18 
 : 
 type 
 INT 
 1:19-1:21 
 int 
 EQUALS 
 1:23-1:23 
 = 
 expr 
 WHILE 
 2:5-2:9 
 while 
 expr 
 expr 
 ID 
 2:11-2:11 
 p 
 GT 
 2:13-2:13 
 > 
 expr 
 NUM 
 2:15-2:15 
 0 
 DO 
 2:17-2:18 
 do 
 expr 
 expr 
 ID 
 3:9-3:9 
 p 
 EQUALS 
 3:11-3:11 
 = 
 expr 
 expr 
 ID 
 3:13-3:13 
 p 
 MINUS 
 3:15-3:15 
 - 
 expr 
 NUM 
 3:17-3:17 
 1 
 END 
 4:5-4:7 
 end 
 COMMA 
 4:8-4:8 
 , 
 expr 
 LET 
 5:5-5:7 
 let 
 defn 
 VAR 
 5:9-5:11 
 var 
 ID 
 5:13-5:13 
 a 
 COLON 
 5:15-5:15 
 : 
 type 
 INT 
 5:17-5:19 
 int 
 IN 
 5:21-5:22 
 in 
 expr 
 expr 
 ID 
 6:9-6:9 
 a 
 EQUALS 
 6:11-6:11 
 = 
 expr 
 NUM 
 6:13-6:13 
 1 
 COMMA 
 6:14-6:14 
 , 
 expr 
 WHILE 
 7:9-7:13 
 while 
 expr 
 expr 
 ID 
 7:15-7:15 
 a 
 LT 
 7:17-7:17 
 < 
 expr 
 NUM 
 7:19-7:21 
 100 
 DO 
 7:23-7:24 
 do 
 expr 
 expr 
 ID 
 8:13-8:13 
 a 
 EQUALS 
 8:15-8:15 
 = 
 expr 
 expr 
 ID 
 8:17-8:17 
 a 
 PLUS 
 8:19-8:19 
 + 
 expr 
 NUM 
 8:21-8:21 
 1 
 END 
 9:9-9:11 
 end 
 COMMA 
 9:12-9:12 
 , 
 expr 
 expr 
 ID 
 10:9-10:14 
 dec100 
 LBRACKET 
 10:15-10:15 
 ( 
 expr 
 ID 
 10:16-10:16 
 a 
 RBRACKET 
 10:17-10:17 
 ) 
 END 
 11:5-11:7 
 end 
 EOF