source 
 prog 
 defn 
 TYP 
 1:1-1:3 
 typ 
 ID 
 1:5-1:6 
 id 
 EQUALS 
 1:8-1:8 
 = 
 type 
 ID 
 1:10-1:10 
 T 
 defn 
 VAR 
 3:1-3:3 
 var 
 ID 
 3:5-3:6 
 id 
 COLON 
 3:8-3:8 
 : 
 type 
 ID 
 3:10-3:10 
 T 
 defn 
 FUN 
 5:1-5:3 
 fun 
 ID 
 5:5-5:6 
 id 
 LBRACKET 
 5:8-5:8 
 ( 
 ID 
 5:9-5:12 
 par1 
 COLON 
 5:14-5:14 
 : 
 type 
 LCURLY 
 5:16-5:16 
 { 
 ID 
 5:18-5:18 
 a 
 COLON 
 5:19-5:19 
 : 
 type 
 LCURLY 
 5:21-5:21 
 { 
 RCURLY 
 5:22-5:22 
 } 
 COMMA 
 5:23-5:23 
 , 
 ID 
 5:25-5:25 
 b 
 COLON 
 5:26-5:26 
 : 
 type 
 LBRACKET 
 5:28-5:28 
 ( 
 COLON 
 5:29-5:29 
 : 
 type 
 LCURLY 
 5:30-5:30 
 { 
 ID 
 5:31-5:31 
 a 
 COLON 
 5:32-5:32 
 : 
 type 
 LBRACKET 
 5:34-5:34 
 ( 
 ID 
 5:36-5:36 
 g 
 COLON 
 5:38-5:38 
 : 
 type 
 INT 
 5:40-5:42 
 int 
 RBRACKET 
 5:43-5:43 
 ) 
 RCURLY 
 5:44-5:44 
 } 
 COLON 
 5:45-5:45 
 : 
 type 
 BOOL 
 5:46-5:49 
 bool 
 RBRACKET 
 5:50-5:50 
 ) 
 RCURLY 
 5:51-5:51 
 } 
 RBRACKET 
 5:52-5:52 
 ) 
 COLON 
 5:54-5:54 
 : 
 type 
 LCURLY 
 5:56-5:56 
 { 
 RCURLY 
 5:57-5:57 
 } 
 defn 
 FUN 
 7:1-7:3 
 fun 
 ID 
 7:5-7:6 
 id 
 LBRACKET 
 7:8-7:8 
 ( 
 RBRACKET 
 7:9-7:9 
 ) 
 COLON 
 7:11-7:11 
 : 
 type 
 VOID 
 7:13-7:16 
 void 
 EQUALS 
 7:18-7:18 
 = 
 expr 
 NOT 
 7:20-7:22 
 not 
 expr 
 TRUE 
 7:24-7:27 
 true 
 COMMA 
 7:28-7:28 
 , 
 expr 
 PLUS 
 7:30-7:30 
 + 
 expr 
 NUM 
 7:31-7:33 
 100 
 COMMA 
 7:34-7:34 
 , 
 expr 
 MINUS 
 7:36-7:36 
 - 
 expr 
 NUM 
 7:37-7:39 
 100 
 COMMA 
 7:40-7:40 
 , 
 expr 
 expr 
 NUM 
 7:42-7:42 
 1 
 PLUS 
 7:43-7:43 
 + 
 expr 
 NUM 
 7:44-7:44 
 2 
 COMMA 
 7:45-7:45 
 , 
 expr 
 expr 
 NUM 
 7:47-7:47 
 1 
 MINUS 
 7:48-7:48 
 - 
 expr 
 NUM 
 7:49-7:49 
 3 
 COMMA 
 7:50-7:50 
 , 
 expr 
 expr 
 NUM 
 7:52-7:52 
 1 
 ASTERISK 
 7:53-7:53 
 * 
 expr 
 NUM 
 7:54-7:54 
 3 
 COMMA 
 7:55-7:55 
 , 
 expr 
 expr 
 NUM 
 7:57-7:57 
 4 
 ASTERISK 
 7:58-7:58 
 * 
 expr 
 NUM 
 7:59-7:60 
 22 
 COMMA 
 7:61-7:61 
 , 
 expr 
 expr 
 NUM 
 7:63-7:63 
 5 
 SLASH 
 7:64-7:64 
 / 
 expr 
 NUM 
 7:65-7:65 
 2 
 COMMA 
 7:66-7:66 
 , 
 expr 
 expr 
 NUM 
 7:68-7:69 
 35 
 PERCENT 
 7:70-7:70 
 % 
 expr 
 NUM 
 7:71-7:72 
 23 
 COMMA 
 7:73-7:73 
 , 
 expr 
 expr 
 TRUE 
 7:75-7:78 
 true 
 AND 
 7:80-7:82 
 and 
 expr 
 FALSE 
 7:84-7:88 
 false 
 COMMA 
 7:89-7:89 
 , 
 expr 
 expr 
 FALSE 
 7:91-7:95 
 false 
 OR 
 7:97-7:98 
 or 
 expr 
 TRUE 
 7:100-7:103 
 true 
 COMMA 
 7:104-7:104 
 , 
 expr 
 expr 
 ID 
 7:106-7:113 
 assignme 
 EQUALS 
 7:115-7:115 
 = 
 expr 
 NUM 
 7:117-7:117 
 1 
 COMMA 
 7:118-7:118 
 , 
 expr 
 expr 
 ID 
 7:121-7:121 
 a 
 EEQUALS 
 7:123-7:124 
 == 
 expr 
 ID 
 7:126-7:126 
 b 
 COMMA 
 7:127-7:127 
 , 
 expr 
 expr 
 NUM 
 7:129-7:131 
 234 
 GEQ 
 7:133-7:134 
 >= 
 expr 
 NUM 
 7:136-7:138 
 123 
 COMMA 
 7:139-7:139 
 , 
 expr 
 expr 
 NUM 
 7:141-7:142 
 23 
 LT 
 7:143-7:143 
 < 
 expr 
 NUM 
 7:144-7:146 
 235 
 COMMA 
 7:147-7:147 
 , 
 expr 
 expr 
 NUM 
 7:149-7:150 
 34 
 GT 
 7:151-7:151 
 > 
 expr 
 NUM 
 7:152-7:152 
 2 
 COMMA 
 7:154-7:154 
 , 
 expr 
 expr 
 NUM 
 7:156-7:156 
 3 
 LT 
 7:157-7:157 
 < 
 expr 
 NUM 
 7:158-7:158 
 5 
 COMMA 
 7:159-7:159 
 , 
 expr 
 expr 
 NUM 
 7:161-7:161 
 2 
 LEQ 
 7:162-7:163 
 <= 
 expr 
 NUM 
 7:164-7:164 
 2 
 EOF