0 g198 = (g199) 1 g199 = (program EOF) 2 program = (def-or-expr) 3 program = (def-or-expr def-or-expr program) 4 program = () 5 def-or-expr = (definition) 6 def-or-expr = (expr) 7 definition = (binding) 8 definition = (structdef) 9 definition = (fundef) 10 definition = (procdef) 11 binding = (IDENTIFIER = expr) 12 structdef = (STRUCT IDENTIFIER args) 13 fundef = (FUN IDENTIFIER args COLON let-expr) 14 fundef = (FUN IDENTIFIER args COLON where-expr) 15 procdef = (DEF IDENTIFIER args COLON expr) 16 args = (OP CP) 17 args = (OP expr expr-list CP) 18 expr-list = () 19 expr-list = (COMMA expr expr-list) 20 let-expr = (expr) 21 let-expr = (LET local-defs IN COLON let-expr) 22 local-defs = (binding) 23 local-defs = (binding COMMA local-defs) 24 where-expr = (expr WHERE local-defs) 25 application-expr = (IDENTIFIER args) 26 negation-expr = (- expr) 27 arithmetic-expr = (negation-expr) 28 arithmetic-expr = (expr ** expr) 29 arithmetic-expr = (expr + expr) 30 arithmetic-expr = (expr - expr) 31 arithmetic-expr = (expr * expr) 32 arithmetic-expr = (expr / expr) 33 arithmetic-expr = (expr % expr) 34 boolean-expr = (expr == expr) 35 boolean-expr = (expr IS expr) 36 boolean-expr = (expr < expr) 37 boolean-expr = (expr > expr) 38 boolean-expr = (expr LESS-EQUAL expr) 39 boolean-expr = (expr GREATER-EQUAL expr) 40 boolean-expr = (expr AND expr) 41 boolean-expr = (expr OR expr) 42 boolean-expr = (NOT expr) 43 conditional-expr = (IF expr COLON expr ELSE COLON expr) 44 conditional-expr = (IF expr COLON expr elif+ ELSE COLON expr) 45 elif = (ELIF expr COLON expr) 46 elif* = () 47 elif* = (elif elif*) 48 elif+ = (elif elif*) 49 expr-comma* = () 50 expr-comma* = (expr) 51 expr-comma* = (expr COMMA expr-comma*) 52 listmaker = (OB expr-comma* CB) 53 struct-access = (IDENTIFIER PERIOD IDENTIFIER) 54 expr = (IDENTIFIER) 55 expr = (NUMBER) 56 expr = (STRING) 57 expr = (CHAR) 58 expr = (RETURN expr) 59 expr = (struct-access) 60 expr = (OP expr CP) 61 expr = (arithmetic-expr) 62 expr = (boolean-expr) 63 expr = (application-expr) 64 expr = (conditional-expr) 65 expr = (listmaker) 66 expr = (TRUE) 67 expr = (FALSE) State 0 g198 -> . g199 NUMBER shift 17 CHAR shift 20 negation-expr goto 10 - shift 31 struct-access goto 15 DEF shift 22 definition goto 4 arithmetic-expr goto 11 RETURN shift 24 fundef goto 7 OP shift 29 FUN shift 21 EOF reduce 4 g199 goto 1 IF shift 23 boolean-expr goto 12 expr goto 16 procdef goto 8 STRING shift 19 binding goto 5 application-expr goto 9 program goto 2 NOT shift 25 FALSE shift 27 structdef goto 6 STRUCT shift 28 conditional-expr goto 13 IDENTIFIER shift 18 OB shift 30 listmaker goto 14 TRUE shift 26 def-or-expr goto 3 State 1 g198 -> g199 . State 2 g199 -> program . EOF EOF accept State 3 program -> def-or-expr . program -> def-or-expr . def-or-expr program NUMBER shift 17 CHAR shift 20 negation-expr goto 10 - shift 31 struct-access goto 15 DEF shift 22 definition goto 4 arithmetic-expr goto 11 RETURN shift 24 fundef goto 7 OP shift 29 FUN shift 21 EOF reduce 2 boolean-expr goto 12 expr goto 16 procdef goto 8 STRING shift 19 binding goto 5 application-expr goto 9 conditional-expr goto 13 NOT shift 25 FALSE shift 27 structdef goto 6 STRUCT shift 28 IF shift 23 IDENTIFIER shift 18 OB shift 30 listmaker goto 14 TRUE shift 26 def-or-expr goto 33 State 4 def-or-expr -> definition . NOT reduce 5 STRING reduce 5 CHAR reduce 5 IF reduce 5 FALSE reduce 5 - reduce 5 OP reduce 5 DEF reduce 5 STRUCT reduce 5 NUMBER reduce 5 OB reduce 5 RETURN reduce 5 FUN reduce 5 EOF reduce 5 TRUE reduce 5 IDENTIFIER reduce 5 State 5 definition -> binding . NOT reduce 7 STRING reduce 7 CHAR reduce 7 IF reduce 7 FALSE reduce 7 - reduce 7 OP reduce 7 DEF reduce 7 STRUCT reduce 7 NUMBER reduce 7 OB reduce 7 RETURN reduce 7 FUN reduce 7 EOF reduce 7 TRUE reduce 7 IDENTIFIER reduce 7 State 6 definition -> structdef . NOT reduce 8 STRING reduce 8 CHAR reduce 8 IF reduce 8 FALSE reduce 8 - reduce 8 OP reduce 8 DEF reduce 8 STRUCT reduce 8 NUMBER reduce 8 OB reduce 8 RETURN reduce 8 FUN reduce 8 EOF reduce 8 TRUE reduce 8 IDENTIFIER reduce 8 State 7 definition -> fundef . NOT reduce 9 STRING reduce 9 CHAR reduce 9 IF reduce 9 FALSE reduce 9 - reduce 9 OP reduce 9 DEF reduce 9 STRUCT reduce 9 NUMBER reduce 9 OB reduce 9 RETURN reduce 9 FUN reduce 9 EOF reduce 9 TRUE reduce 9 IDENTIFIER reduce 9 State 8 definition -> procdef . NOT reduce 10 STRING reduce 10 CHAR reduce 10 IF reduce 10 FALSE reduce 10 - reduce 10 OP reduce 10 DEF reduce 10 STRUCT reduce 10 NUMBER reduce 10 OB reduce 10 RETURN reduce 10 FUN reduce 10 EOF reduce 10 TRUE reduce 10 IDENTIFIER reduce 10 State 9 expr -> application-expr . TRUE reduce 63 CHAR reduce 63 - reduce 63 WHERE reduce 63 OP reduce 63 IF reduce 63 OR reduce 63 IDENTIFIER reduce 63 RETURN reduce 63 < reduce 63 EOF reduce 63 ELIF reduce 63 CP reduce 63 / reduce 63 IN reduce 63 COMMA reduce 63 NOT reduce 63 COLON reduce 63 STRING reduce 63 ELSE reduce 63 > reduce 63 == reduce 63 ** reduce 63 STRUCT reduce 63 NUMBER reduce 63 GREATER-EQUAL reduce 63 OB reduce 63 % reduce 63 FALSE reduce 63 CB reduce 63 * reduce 63 FUN reduce 63 + reduce 63 AND reduce 63 DEF reduce 63 LESS-EQUAL reduce 63 IS reduce 63 State 10 arithmetic-expr -> negation-expr . TRUE reduce 27 CHAR reduce 27 - reduce 27 WHERE reduce 27 OP reduce 27 IF reduce 27 OR reduce 27 IDENTIFIER reduce 27 RETURN reduce 27 < reduce 27 EOF reduce 27 ELIF reduce 27 CP reduce 27 / reduce 27 IN reduce 27 COMMA reduce 27 NOT reduce 27 COLON reduce 27 STRING reduce 27 ELSE reduce 27 > reduce 27 == reduce 27 ** reduce 27 STRUCT reduce 27 NUMBER reduce 27 GREATER-EQUAL reduce 27 OB reduce 27 % reduce 27 FALSE reduce 27 CB reduce 27 * reduce 27 FUN reduce 27 + reduce 27 AND reduce 27 DEF reduce 27 LESS-EQUAL reduce 27 IS reduce 27 State 11 expr -> arithmetic-expr . TRUE reduce 61 CHAR reduce 61 - reduce 61 WHERE reduce 61 OP reduce 61 IF reduce 61 OR reduce 61 IDENTIFIER reduce 61 RETURN reduce 61 < reduce 61 EOF reduce 61 ELIF reduce 61 CP reduce 61 / reduce 61 IN reduce 61 COMMA reduce 61 NOT reduce 61 COLON reduce 61 STRING reduce 61 ELSE reduce 61 > reduce 61 == reduce 61 ** reduce 61 STRUCT reduce 61 NUMBER reduce 61 GREATER-EQUAL reduce 61 OB reduce 61 % reduce 61 FALSE reduce 61 CB reduce 61 * reduce 61 FUN reduce 61 + reduce 61 AND reduce 61 DEF reduce 61 LESS-EQUAL reduce 61 IS reduce 61 State 12 expr -> boolean-expr . TRUE reduce 62 CHAR reduce 62 - reduce 62 WHERE reduce 62 OP reduce 62 IF reduce 62 OR reduce 62 IDENTIFIER reduce 62 RETURN reduce 62 < reduce 62 EOF reduce 62 ELIF reduce 62 CP reduce 62 / reduce 62 IN reduce 62 COMMA reduce 62 NOT reduce 62 COLON reduce 62 STRING reduce 62 ELSE reduce 62 > reduce 62 == reduce 62 ** reduce 62 STRUCT reduce 62 NUMBER reduce 62 GREATER-EQUAL reduce 62 OB reduce 62 % reduce 62 FALSE reduce 62 CB reduce 62 * reduce 62 FUN reduce 62 + reduce 62 AND reduce 62 DEF reduce 62 LESS-EQUAL reduce 62 IS reduce 62 State 13 expr -> conditional-expr . TRUE reduce 64 CHAR reduce 64 - reduce 64 WHERE reduce 64 OP reduce 64 IF reduce 64 OR reduce 64 IDENTIFIER reduce 64 RETURN reduce 64 < reduce 64 EOF reduce 64 ELIF reduce 64 CP reduce 64 / reduce 64 IN reduce 64 COMMA reduce 64 NOT reduce 64 COLON reduce 64 STRING reduce 64 ELSE reduce 64 > reduce 64 == reduce 64 ** reduce 64 STRUCT reduce 64 NUMBER reduce 64 GREATER-EQUAL reduce 64 OB reduce 64 % reduce 64 FALSE reduce 64 CB reduce 64 * reduce 64 FUN reduce 64 + reduce 64 AND reduce 64 DEF reduce 64 LESS-EQUAL reduce 64 IS reduce 64 State 14 expr -> listmaker . TRUE reduce 65 CHAR reduce 65 - reduce 65 WHERE reduce 65 OP reduce 65 IF reduce 65 OR reduce 65 IDENTIFIER reduce 65 RETURN reduce 65 < reduce 65 EOF reduce 65 ELIF reduce 65 CP reduce 65 / reduce 65 IN reduce 65 COMMA reduce 65 NOT reduce 65 COLON reduce 65 STRING reduce 65 ELSE reduce 65 > reduce 65 == reduce 65 ** reduce 65 STRUCT reduce 65 NUMBER reduce 65 GREATER-EQUAL reduce 65 OB reduce 65 % reduce 65 FALSE reduce 65 CB reduce 65 * reduce 65 FUN reduce 65 + reduce 65 AND reduce 65 DEF reduce 65 LESS-EQUAL reduce 65 IS reduce 65 State 15 expr -> struct-access . TRUE reduce 59 CHAR reduce 59 - reduce 59 WHERE reduce 59 OP reduce 59 IF reduce 59 OR reduce 59 IDENTIFIER reduce 59 RETURN reduce 59 < reduce 59 EOF reduce 59 ELIF reduce 59 CP reduce 59 / reduce 59 IN reduce 59 COMMA reduce 59 NOT reduce 59 COLON reduce 59 STRING reduce 59 ELSE reduce 59 > reduce 59 == reduce 59 ** reduce 59 STRUCT reduce 59 NUMBER reduce 59 GREATER-EQUAL reduce 59 OB reduce 59 % reduce 59 FALSE reduce 59 CB reduce 59 * reduce 59 FUN reduce 59 + reduce 59 AND reduce 59 DEF reduce 59 LESS-EQUAL reduce 59 IS reduce 59 State 16 def-or-expr -> expr . arithmetic-expr -> expr . ** expr arithmetic-expr -> expr . + expr arithmetic-expr -> expr . - expr arithmetic-expr -> expr . * expr arithmetic-expr -> expr . / expr arithmetic-expr -> expr . % expr boolean-expr -> expr . == expr boolean-expr -> expr . IS expr boolean-expr -> expr . < expr boolean-expr -> expr . > expr boolean-expr -> expr . LESS-EQUAL expr boolean-expr -> expr . GREATER-EQUAL expr boolean-expr -> expr . AND expr boolean-expr -> expr . OR expr TRUE reduce 6 CHAR reduce 6 FUN reduce 6 begin conflict: - shift 42 - reduce 6 end conflict OP reduce 6 DEF reduce 6 OR shift 35 RETURN reduce 6 IS shift 36 EOF reduce 6 < shift 39 / shift 44 NOT reduce 6 STRING reduce 6 IF reduce 6 > shift 40 FALSE reduce 6 == shift 45 STRUCT reduce 6 NUMBER reduce 6 GREATER-EQUAL shift 38 OB reduce 6 % shift 46 IDENTIFIER reduce 6 * shift 43 + shift 41 AND shift 34 LESS-EQUAL shift 37 ** shift 47 State 17 expr -> NUMBER . TRUE reduce 55 CHAR reduce 55 - reduce 55 WHERE reduce 55 OP reduce 55 IF reduce 55 OR reduce 55 IDENTIFIER reduce 55 RETURN reduce 55 < reduce 55 EOF reduce 55 ELIF reduce 55 CP reduce 55 / reduce 55 IN reduce 55 COMMA reduce 55 NOT reduce 55 COLON reduce 55 STRING reduce 55 ELSE reduce 55 > reduce 55 == reduce 55 ** reduce 55 STRUCT reduce 55 NUMBER reduce 55 GREATER-EQUAL reduce 55 OB reduce 55 % reduce 55 FALSE reduce 55 CB reduce 55 * reduce 55 FUN reduce 55 + reduce 55 AND reduce 55 DEF reduce 55 LESS-EQUAL reduce 55 IS reduce 55 State 18 binding -> IDENTIFIER . = expr application-expr -> IDENTIFIER . args struct-access -> IDENTIFIER . PERIOD IDENTIFIER expr -> IDENTIFIER . TRUE reduce 54 CHAR reduce 54 - reduce 54 begin conflict: OP shift 49 OP reduce 54 end conflict DEF reduce 54 < reduce 54 args goto 48 STRING reduce 54 IS reduce 54 EOF reduce 54 / reduce 54 IDENTIFIER reduce 54 NOT reduce 54 > reduce 54 RETURN reduce 54 OR reduce 54 == reduce 54 ** reduce 54 STRUCT reduce 54 NUMBER reduce 54 GREATER-EQUAL reduce 54 IF reduce 54 % reduce 54 FALSE reduce 54 = shift 51 OB reduce 54 * reduce 54 FUN reduce 54 + reduce 54 AND reduce 54 LESS-EQUAL reduce 54 PERIOD shift 50 State 19 expr -> STRING . TRUE reduce 56 CHAR reduce 56 - reduce 56 WHERE reduce 56 OP reduce 56 IF reduce 56 OR reduce 56 IDENTIFIER reduce 56 RETURN reduce 56 < reduce 56 EOF reduce 56 ELIF reduce 56 CP reduce 56 / reduce 56 IN reduce 56 COMMA reduce 56 NOT reduce 56 COLON reduce 56 STRING reduce 56 ELSE reduce 56 > reduce 56 == reduce 56 ** reduce 56 STRUCT reduce 56 NUMBER reduce 56 GREATER-EQUAL reduce 56 OB reduce 56 % reduce 56 FALSE reduce 56 CB reduce 56 * reduce 56 FUN reduce 56 + reduce 56 AND reduce 56 DEF reduce 56 LESS-EQUAL reduce 56 IS reduce 56 State 20 expr -> CHAR . TRUE reduce 57 CHAR reduce 57 - reduce 57 WHERE reduce 57 OP reduce 57 IF reduce 57 OR reduce 57 IDENTIFIER reduce 57 RETURN reduce 57 < reduce 57 EOF reduce 57 ELIF reduce 57 CP reduce 57 / reduce 57 IN reduce 57 COMMA reduce 57 NOT reduce 57 COLON reduce 57 STRING reduce 57 ELSE reduce 57 > reduce 57 == reduce 57 ** reduce 57 STRUCT reduce 57 NUMBER reduce 57 GREATER-EQUAL reduce 57 OB reduce 57 % reduce 57 FALSE reduce 57 CB reduce 57 * reduce 57 FUN reduce 57 + reduce 57 AND reduce 57 DEF reduce 57 LESS-EQUAL reduce 57 IS reduce 57 State 21 fundef -> FUN . IDENTIFIER args COLON let-expr fundef -> FUN . IDENTIFIER args COLON where-expr IDENTIFIER shift 52 State 22 procdef -> DEF . IDENTIFIER args COLON expr IDENTIFIER shift 53 State 23 conditional-expr -> IF . expr COLON expr ELSE COLON expr conditional-expr -> IF . expr COLON expr elif+ ELSE COLON expr NUMBER shift 17 expr goto 54 STRING shift 19 CHAR shift 20 negation-expr goto 10 FALSE shift 27 - shift 31 struct-access goto 15 IF shift 23 RETURN shift 24 arithmetic-expr goto 11 conditional-expr goto 13 IDENTIFIER shift 55 NOT shift 25 OP shift 29 TRUE shift 26 listmaker goto 14 application-expr goto 9 boolean-expr goto 12 OB shift 30 State 24 expr -> RETURN . expr NUMBER shift 17 expr goto 56 STRING shift 19 CHAR shift 20 negation-expr goto 10 FALSE shift 27 - shift 31 struct-access goto 15 IF shift 23 RETURN shift 24 arithmetic-expr goto 11 conditional-expr goto 13 IDENTIFIER shift 55 NOT shift 25 OP shift 29 TRUE shift 26 listmaker goto 14 application-expr goto 9 boolean-expr goto 12 OB shift 30 State 25 boolean-expr -> NOT . expr NUMBER shift 17 expr goto 57 STRING shift 19 CHAR shift 20 negation-expr goto 10 FALSE shift 27 - shift 31 struct-access goto 15 IF shift 23 RETURN shift 24 arithmetic-expr goto 11 conditional-expr goto 13 IDENTIFIER shift 55 NOT shift 25 OP shift 29 TRUE shift 26 listmaker goto 14 application-expr goto 9 boolean-expr goto 12 OB shift 30 State 26 expr -> TRUE . TRUE reduce 66 CHAR reduce 66 - reduce 66 WHERE reduce 66 OP reduce 66 IF reduce 66 OR reduce 66 IDENTIFIER reduce 66 RETURN reduce 66 < reduce 66 EOF reduce 66 ELIF reduce 66 CP reduce 66 / reduce 66 IN reduce 66 COMMA reduce 66 NOT reduce 66 COLON reduce 66 STRING reduce 66 ELSE reduce 66 > reduce 66 == reduce 66 ** reduce 66 STRUCT reduce 66 NUMBER reduce 66 GREATER-EQUAL reduce 66 OB reduce 66 % reduce 66 FALSE reduce 66 CB reduce 66 * reduce 66 FUN reduce 66 + reduce 66 AND reduce 66 DEF reduce 66 LESS-EQUAL reduce 66 IS reduce 66 State 27 expr -> FALSE . TRUE reduce 67 CHAR reduce 67 - reduce 67 WHERE reduce 67 OP reduce 67 IF reduce 67 OR reduce 67 IDENTIFIER reduce 67 RETURN reduce 67 < reduce 67 EOF reduce 67 ELIF reduce 67 CP reduce 67 / reduce 67 IN reduce 67 COMMA reduce 67 NOT reduce 67 COLON reduce 67 STRING reduce 67 ELSE reduce 67 > reduce 67 == reduce 67 ** reduce 67 STRUCT reduce 67 NUMBER reduce 67 GREATER-EQUAL reduce 67 OB reduce 67 % reduce 67 FALSE reduce 67 CB reduce 67 * reduce 67 FUN reduce 67 + reduce 67 AND reduce 67 DEF reduce 67 LESS-EQUAL reduce 67 IS reduce 67 State 28 structdef -> STRUCT . IDENTIFIER args IDENTIFIER shift 58 State 29 expr -> OP . expr CP NUMBER shift 17 expr goto 59 STRING shift 19 CHAR shift 20 negation-expr goto 10 FALSE shift 27 - shift 31 struct-access goto 15 IF shift 23 RETURN shift 24 arithmetic-expr goto 11 conditional-expr goto 13 IDENTIFIER shift 55 NOT shift 25 OP shift 29 TRUE shift 26 listmaker goto 14 application-expr goto 9 boolean-expr goto 12 OB shift 30 State 30 listmaker -> OB . expr-comma* CB NUMBER shift 17 expr goto 61 STRING shift 19 application-expr goto 9 negation-expr goto 10 FALSE shift 27 conditional-expr goto 13 struct-access goto 15 IF shift 23 - shift 31 RETURN shift 24 arithmetic-expr goto 11 CB reduce 49 IDENTIFIER shift 55 CHAR shift 20 NOT shift 25 OP shift 29 TRUE shift 26 listmaker goto 14 expr-comma* goto 60 boolean-expr goto 12 OB shift 30 State 31 negation-expr -> - . expr NUMBER shift 17 expr goto 62 STRING shift 19 CHAR shift 20 negation-expr goto 10 FALSE shift 27 - shift 31 struct-access goto 15 IF shift 23 RETURN shift 24 arithmetic-expr goto 11 conditional-expr goto 13 IDENTIFIER shift 55 NOT shift 25 OP shift 29 TRUE shift 26 listmaker goto 14 application-expr goto 9 boolean-expr goto 12 OB shift 30 State 32 g199 -> program EOF . State 33 program -> def-or-expr def-or-expr . program NUMBER shift 17 CHAR shift 20 negation-expr goto 10 - shift 31 struct-access goto 15 DEF shift 22 definition goto 4 arithmetic-expr goto 11 RETURN shift 24 fundef goto 7 OP shift 29 FUN shift 21 EOF reduce 4 boolean-expr goto 12 expr goto 16 procdef goto 8 STRING shift 19 binding goto 5 application-expr goto 9 conditional-expr goto 13 NOT shift 25 FALSE shift 27 structdef goto 6 STRUCT shift 28 IF shift 23 IDENTIFIER shift 18 OB shift 30 listmaker goto 14 program goto 63 TRUE shift 26 def-or-expr goto 3 State 34 boolean-expr -> expr AND . expr NUMBER shift 17 expr goto 64 STRING shift 19 CHAR shift 20 negation-expr goto 10 FALSE shift 27 - shift 31 struct-access goto 15 IF shift 23 RETURN shift 24 arithmetic-expr goto 11 conditional-expr goto 13 IDENTIFIER shift 55 NOT shift 25 OP shift 29 TRUE shift 26 listmaker goto 14 application-expr goto 9 boolean-expr goto 12 OB shift 30 State 35 boolean-expr -> expr OR . expr NUMBER shift 17 expr goto 65 STRING shift 19 CHAR shift 20 negation-expr goto 10 FALSE shift 27 - shift 31 struct-access goto 15 IF shift 23 RETURN shift 24 arithmetic-expr goto 11 conditional-expr goto 13 IDENTIFIER shift 55 NOT shift 25 OP shift 29 TRUE shift 26 listmaker goto 14 application-expr goto 9 boolean-expr goto 12 OB shift 30 State 36 boolean-expr -> expr IS . expr NUMBER shift 17 expr goto 66 STRING shift 19 CHAR shift 20 negation-expr goto 10 FALSE shift 27 - shift 31 struct-access goto 15 IF shift 23 RETURN shift 24 arithmetic-expr goto 11 conditional-expr goto 13 IDENTIFIER shift 55 NOT shift 25 OP shift 29 TRUE shift 26 listmaker goto 14 application-expr goto 9 boolean-expr goto 12 OB shift 30 State 37 boolean-expr -> expr LESS-EQUAL . expr NUMBER shift 17 expr goto 67 STRING shift 19 CHAR shift 20 negation-expr goto 10 FALSE shift 27 - shift 31 struct-access goto 15 IF shift 23 RETURN shift 24 arithmetic-expr goto 11 conditional-expr goto 13 IDENTIFIER shift 55 NOT shift 25 OP shift 29 TRUE shift 26 listmaker goto 14 application-expr goto 9 boolean-expr goto 12 OB shift 30 State 38 boolean-expr -> expr GREATER-EQUAL . expr NUMBER shift 17 expr goto 68 STRING shift 19 CHAR shift 20 negation-expr goto 10 FALSE shift 27 - shift 31 struct-access goto 15 IF shift 23 RETURN shift 24 arithmetic-expr goto 11 conditional-expr goto 13 IDENTIFIER shift 55 NOT shift 25 OP shift 29 TRUE shift 26 listmaker goto 14 application-expr goto 9 boolean-expr goto 12 OB shift 30 State 39 boolean-expr -> expr < . expr NUMBER shift 17 expr goto 69 STRING shift 19 CHAR shift 20 negation-expr goto 10 FALSE shift 27 - shift 31 struct-access goto 15 IF shift 23 RETURN shift 24 arithmetic-expr goto 11 conditional-expr goto 13 IDENTIFIER shift 55 NOT shift 25 OP shift 29 TRUE shift 26 listmaker goto 14 application-expr goto 9 boolean-expr goto 12 OB shift 30 State 40 boolean-expr -> expr > . expr NUMBER shift 17 expr goto 70 STRING shift 19 CHAR shift 20 negation-expr goto 10 FALSE shift 27 - shift 31 struct-access goto 15 IF shift 23 RETURN shift 24 arithmetic-expr goto 11 conditional-expr goto 13 IDENTIFIER shift 55 NOT shift 25 OP shift 29 TRUE shift 26 listmaker goto 14 application-expr goto 9 boolean-expr goto 12 OB shift 30 State 41 arithmetic-expr -> expr + . expr NUMBER shift 17 expr goto 71 STRING shift 19 CHAR shift 20 negation-expr goto 10 FALSE shift 27 - shift 31 struct-access goto 15 IF shift 23 RETURN shift 24 arithmetic-expr goto 11 conditional-expr goto 13 IDENTIFIER shift 55 NOT shift 25 OP shift 29 TRUE shift 26 listmaker goto 14 application-expr goto 9 boolean-expr goto 12 OB shift 30 State 42 arithmetic-expr -> expr - . expr NUMBER shift 17 expr goto 72 STRING shift 19 CHAR shift 20 negation-expr goto 10 FALSE shift 27 - shift 31 struct-access goto 15 IF shift 23 RETURN shift 24 arithmetic-expr goto 11 conditional-expr goto 13 IDENTIFIER shift 55 NOT shift 25 OP shift 29 TRUE shift 26 listmaker goto 14 application-expr goto 9 boolean-expr goto 12 OB shift 30 State 43 arithmetic-expr -> expr * . expr NUMBER shift 17 expr goto 73 STRING shift 19 CHAR shift 20 negation-expr goto 10 FALSE shift 27 - shift 31 struct-access goto 15 IF shift 23 RETURN shift 24 arithmetic-expr goto 11 conditional-expr goto 13 IDENTIFIER shift 55 NOT shift 25 OP shift 29 TRUE shift 26 listmaker goto 14 application-expr goto 9 boolean-expr goto 12 OB shift 30 State 44 arithmetic-expr -> expr / . expr NUMBER shift 17 expr goto 74 STRING shift 19 CHAR shift 20 negation-expr goto 10 FALSE shift 27 - shift 31 struct-access goto 15 IF shift 23 RETURN shift 24 arithmetic-expr goto 11 conditional-expr goto 13 IDENTIFIER shift 55 NOT shift 25 OP shift 29 TRUE shift 26 listmaker goto 14 application-expr goto 9 boolean-expr goto 12 OB shift 30 State 45 boolean-expr -> expr == . expr NUMBER shift 17 expr goto 75 STRING shift 19 CHAR shift 20 negation-expr goto 10 FALSE shift 27 - shift 31 struct-access goto 15 IF shift 23 RETURN shift 24 arithmetic-expr goto 11 conditional-expr goto 13 IDENTIFIER shift 55 NOT shift 25 OP shift 29 TRUE shift 26 listmaker goto 14 application-expr goto 9 boolean-expr goto 12 OB shift 30 State 46 arithmetic-expr -> expr % . expr NUMBER shift 17 expr goto 76 STRING shift 19 CHAR shift 20 negation-expr goto 10 FALSE shift 27 - shift 31 struct-access goto 15 IF shift 23 RETURN shift 24 arithmetic-expr goto 11 conditional-expr goto 13 IDENTIFIER shift 55 NOT shift 25 OP shift 29 TRUE shift 26 listmaker goto 14 application-expr goto 9 boolean-expr goto 12 OB shift 30 State 47 arithmetic-expr -> expr ** . expr NUMBER shift 17 expr goto 77 STRING shift 19 CHAR shift 20 negation-expr goto 10 FALSE shift 27 - shift 31 struct-access goto 15 IF shift 23 RETURN shift 24 arithmetic-expr goto 11 conditional-expr goto 13 IDENTIFIER shift 55 NOT shift 25 OP shift 29 TRUE shift 26 listmaker goto 14 application-expr goto 9 boolean-expr goto 12 OB shift 30 State 48 application-expr -> IDENTIFIER args . TRUE reduce 25 CHAR reduce 25 - reduce 25 WHERE reduce 25 OP reduce 25 IF reduce 25 OR reduce 25 IDENTIFIER reduce 25 RETURN reduce 25 < reduce 25 EOF reduce 25 ELIF reduce 25 CP reduce 25 / reduce 25 IN reduce 25 COMMA reduce 25 NOT reduce 25 COLON reduce 25 STRING reduce 25 ELSE reduce 25 > reduce 25 == reduce 25 ** reduce 25 STRUCT reduce 25 NUMBER reduce 25 GREATER-EQUAL reduce 25 OB reduce 25 % reduce 25 FALSE reduce 25 CB reduce 25 * reduce 25 FUN reduce 25 + reduce 25 AND reduce 25 DEF reduce 25 LESS-EQUAL reduce 25 IS reduce 25 State 49 args -> OP . CP args -> OP . expr expr-list CP NUMBER shift 17 expr goto 78 STRING shift 19 CHAR shift 20 negation-expr goto 10 FALSE shift 27 - shift 31 struct-access goto 15 IF shift 23 RETURN shift 24 arithmetic-expr goto 11 conditional-expr goto 13 IDENTIFIER shift 55 NOT shift 25 OP shift 29 TRUE shift 26 CP shift 79 listmaker goto 14 application-expr goto 9 boolean-expr goto 12 OB shift 30 State 50 struct-access -> IDENTIFIER PERIOD . IDENTIFIER IDENTIFIER shift 80 State 51 binding -> IDENTIFIER = . expr NUMBER shift 17 expr goto 81 STRING shift 19 CHAR shift 20 negation-expr goto 10 FALSE shift 27 - shift 31 struct-access goto 15 IF shift 23 RETURN shift 24 arithmetic-expr goto 11 conditional-expr goto 13 IDENTIFIER shift 55 NOT shift 25 OP shift 29 TRUE shift 26 listmaker goto 14 application-expr goto 9 boolean-expr goto 12 OB shift 30 State 52 fundef -> FUN IDENTIFIER . args COLON let-expr fundef -> FUN IDENTIFIER . args COLON where-expr args goto 82 OP shift 49 State 53 procdef -> DEF IDENTIFIER . args COLON expr args goto 83 OP shift 49 State 54 arithmetic-expr -> expr . ** expr arithmetic-expr -> expr . + expr arithmetic-expr -> expr . - expr arithmetic-expr -> expr . * expr arithmetic-expr -> expr . / expr arithmetic-expr -> expr . % expr boolean-expr -> expr . == expr boolean-expr -> expr . IS expr boolean-expr -> expr . < expr boolean-expr -> expr . > expr boolean-expr -> expr . LESS-EQUAL expr boolean-expr -> expr . GREATER-EQUAL expr boolean-expr -> expr . AND expr boolean-expr -> expr . OR expr conditional-expr -> IF expr . COLON expr ELSE COLON expr conditional-expr -> IF expr . COLON expr elif+ ELSE COLON expr COLON shift 84 > shift 40 - shift 42 OR shift 35 == shift 45 ** shift 47 % shift 46 GREATER-EQUAL shift 38 IS shift 36 * shift 43 + shift 41 < shift 39 / shift 44 AND shift 34 LESS-EQUAL shift 37 State 55 application-expr -> IDENTIFIER . args struct-access -> IDENTIFIER . PERIOD IDENTIFIER expr -> IDENTIFIER . TRUE reduce 54 CHAR reduce 54 - reduce 54 WHERE reduce 54 begin conflict: OP shift 49 OP reduce 54 end conflict IF reduce 54 OR reduce 54 IDENTIFIER reduce 54 RETURN reduce 54 args goto 48 < reduce 54 EOF reduce 54 ELIF reduce 54 CP reduce 54 / reduce 54 IN reduce 54 COMMA reduce 54 NOT reduce 54 COLON reduce 54 STRING reduce 54 ELSE reduce 54 > reduce 54 == reduce 54 ** reduce 54 STRUCT reduce 54 NUMBER reduce 54 GREATER-EQUAL reduce 54 OB reduce 54 % reduce 54 FALSE reduce 54 CB reduce 54 * reduce 54 FUN reduce 54 + reduce 54 AND reduce 54 DEF reduce 54 LESS-EQUAL reduce 54 PERIOD shift 50 IS reduce 54 State 56 arithmetic-expr -> expr . ** expr arithmetic-expr -> expr . + expr arithmetic-expr -> expr . - expr arithmetic-expr -> expr . * expr arithmetic-expr -> expr . / expr arithmetic-expr -> expr . % expr boolean-expr -> expr . == expr boolean-expr -> expr . IS expr boolean-expr -> expr . < expr boolean-expr -> expr . > expr boolean-expr -> expr . LESS-EQUAL expr boolean-expr -> expr . GREATER-EQUAL expr boolean-expr -> expr . AND expr boolean-expr -> expr . OR expr expr -> RETURN expr . TRUE reduce 58 CHAR reduce 58 - shift 42 WHERE reduce 58 OP reduce 58 IF reduce 58 OR shift 35 IDENTIFIER reduce 58 RETURN reduce 58 < shift 39 EOF reduce 58 ELIF reduce 58 CP reduce 58 / shift 44 IN reduce 58 COMMA reduce 58 NOT reduce 58 COLON reduce 58 STRING reduce 58 ELSE reduce 58 > shift 40 == shift 45 ** shift 47 STRUCT reduce 58 NUMBER reduce 58 GREATER-EQUAL shift 38 OB reduce 58 % shift 46 FALSE reduce 58 CB reduce 58 * shift 43 FUN reduce 58 + shift 41 AND shift 34 DEF reduce 58 LESS-EQUAL shift 37 IS shift 36 State 57 arithmetic-expr -> expr . ** expr arithmetic-expr -> expr . + expr arithmetic-expr -> expr . - expr arithmetic-expr -> expr . * expr arithmetic-expr -> expr . / expr arithmetic-expr -> expr . % expr boolean-expr -> expr . == expr boolean-expr -> expr . IS expr boolean-expr -> expr . < expr boolean-expr -> expr . > expr boolean-expr -> expr . LESS-EQUAL expr boolean-expr -> expr . GREATER-EQUAL expr boolean-expr -> expr . AND expr boolean-expr -> expr . OR expr boolean-expr -> NOT expr . TRUE reduce 42 CHAR reduce 42 - shift 42 WHERE reduce 42 OP reduce 42 IF reduce 42 OR reduce 42 IDENTIFIER reduce 42 RETURN reduce 42 < shift 39 EOF reduce 42 ELIF reduce 42 CP reduce 42 / shift 44 IN reduce 42 COMMA reduce 42 NOT reduce 42 COLON reduce 42 STRING reduce 42 ELSE reduce 42 > shift 40 == shift 45 ** shift 47 STRUCT reduce 42 NUMBER reduce 42 GREATER-EQUAL shift 38 OB reduce 42 % shift 46 FALSE reduce 42 CB reduce 42 * shift 43 FUN reduce 42 + shift 41 AND reduce 42 DEF reduce 42 LESS-EQUAL shift 37 IS shift 36 State 58 structdef -> STRUCT IDENTIFIER . args args goto 85 OP shift 49 State 59 arithmetic-expr -> expr . ** expr arithmetic-expr -> expr . + expr arithmetic-expr -> expr . - expr arithmetic-expr -> expr . * expr arithmetic-expr -> expr . / expr arithmetic-expr -> expr . % expr boolean-expr -> expr . == expr boolean-expr -> expr . IS expr boolean-expr -> expr . < expr boolean-expr -> expr . > expr boolean-expr -> expr . LESS-EQUAL expr boolean-expr -> expr . GREATER-EQUAL expr boolean-expr -> expr . AND expr boolean-expr -> expr . OR expr expr -> OP expr . CP > shift 40 - shift 42 OR shift 35 == shift 45 ** shift 47 % shift 46 GREATER-EQUAL shift 38 + shift 41 IS shift 36 * shift 43 CP shift 86 < shift 39 / shift 44 AND shift 34 LESS-EQUAL shift 37 State 60 listmaker -> OB expr-comma* . CB CB shift 87 State 61 arithmetic-expr -> expr . ** expr arithmetic-expr -> expr . + expr arithmetic-expr -> expr . - expr arithmetic-expr -> expr . * expr arithmetic-expr -> expr . / expr arithmetic-expr -> expr . % expr boolean-expr -> expr . == expr boolean-expr -> expr . IS expr boolean-expr -> expr . < expr boolean-expr -> expr . > expr boolean-expr -> expr . LESS-EQUAL expr boolean-expr -> expr . GREATER-EQUAL expr boolean-expr -> expr . AND expr boolean-expr -> expr . OR expr expr-comma* -> expr . expr-comma* -> expr . COMMA expr-comma* > shift 40 - shift 42 OR shift 35 == shift 45 ** shift 47 % shift 46 GREATER-EQUAL shift 38 CB reduce 50 IS shift 36 * shift 43 + shift 41 < shift 39 / shift 44 AND shift 34 LESS-EQUAL shift 37 COMMA shift 88 State 62 negation-expr -> - expr . arithmetic-expr -> expr . ** expr arithmetic-expr -> expr . + expr arithmetic-expr -> expr . - expr arithmetic-expr -> expr . * expr arithmetic-expr -> expr . / expr arithmetic-expr -> expr . % expr boolean-expr -> expr . == expr boolean-expr -> expr . IS expr boolean-expr -> expr . < expr boolean-expr -> expr . > expr boolean-expr -> expr . LESS-EQUAL expr boolean-expr -> expr . GREATER-EQUAL expr boolean-expr -> expr . AND expr boolean-expr -> expr . OR expr TRUE reduce 26 CHAR reduce 26 - reduce 26 WHERE reduce 26 OP reduce 26 IF reduce 26 OR reduce 26 IDENTIFIER reduce 26 RETURN reduce 26 < reduce 26 EOF reduce 26 ELIF reduce 26 CP reduce 26 / reduce 26 IN reduce 26 COMMA reduce 26 NOT reduce 26 COLON reduce 26 STRING reduce 26 ELSE reduce 26 > reduce 26 == reduce 26 ** reduce 26 STRUCT reduce 26 NUMBER reduce 26 GREATER-EQUAL reduce 26 OB reduce 26 % reduce 26 FALSE reduce 26 CB reduce 26 * reduce 26 FUN reduce 26 + reduce 26 AND reduce 26 DEF reduce 26 LESS-EQUAL reduce 26 IS reduce 26 State 63 program -> def-or-expr def-or-expr program . EOF reduce 3 State 64 arithmetic-expr -> expr . ** expr arithmetic-expr -> expr . + expr arithmetic-expr -> expr . - expr arithmetic-expr -> expr . * expr arithmetic-expr -> expr . / expr arithmetic-expr -> expr . % expr boolean-expr -> expr . == expr boolean-expr -> expr . IS expr boolean-expr -> expr . < expr boolean-expr -> expr . > expr boolean-expr -> expr . LESS-EQUAL expr boolean-expr -> expr . GREATER-EQUAL expr boolean-expr -> expr . AND expr boolean-expr -> expr AND expr . boolean-expr -> expr . OR expr TRUE reduce 40 CHAR reduce 40 - shift 42 WHERE reduce 40 OP reduce 40 IF reduce 40 OR reduce 40 IDENTIFIER reduce 40 RETURN reduce 40 < shift 39 EOF reduce 40 ELIF reduce 40 CP reduce 40 / shift 44 IN reduce 40 COMMA reduce 40 NOT reduce 40 COLON reduce 40 STRING reduce 40 ELSE reduce 40 > shift 40 == shift 45 ** shift 47 STRUCT reduce 40 NUMBER reduce 40 GREATER-EQUAL shift 38 OB reduce 40 % shift 46 FALSE reduce 40 CB reduce 40 * shift 43 FUN reduce 40 + shift 41 AND reduce 40 DEF reduce 40 LESS-EQUAL shift 37 IS shift 36 State 65 arithmetic-expr -> expr . ** expr arithmetic-expr -> expr . + expr arithmetic-expr -> expr . - expr arithmetic-expr -> expr . * expr arithmetic-expr -> expr . / expr arithmetic-expr -> expr . % expr boolean-expr -> expr . == expr boolean-expr -> expr . IS expr boolean-expr -> expr . < expr boolean-expr -> expr . > expr boolean-expr -> expr . LESS-EQUAL expr boolean-expr -> expr . GREATER-EQUAL expr boolean-expr -> expr . AND expr boolean-expr -> expr . OR expr boolean-expr -> expr OR expr . TRUE reduce 41 CHAR reduce 41 - shift 42 WHERE reduce 41 OP reduce 41 IF reduce 41 OR reduce 41 IDENTIFIER reduce 41 RETURN reduce 41 < shift 39 EOF reduce 41 ELIF reduce 41 CP reduce 41 / shift 44 IN reduce 41 COMMA reduce 41 NOT reduce 41 COLON reduce 41 STRING reduce 41 ELSE reduce 41 > shift 40 == shift 45 ** shift 47 STRUCT reduce 41 NUMBER reduce 41 GREATER-EQUAL shift 38 OB reduce 41 % shift 46 FALSE reduce 41 CB reduce 41 * shift 43 FUN reduce 41 + shift 41 AND shift 34 DEF reduce 41 LESS-EQUAL shift 37 IS shift 36 State 66 arithmetic-expr -> expr . ** expr arithmetic-expr -> expr . + expr arithmetic-expr -> expr . - expr arithmetic-expr -> expr . * expr arithmetic-expr -> expr . / expr arithmetic-expr -> expr . % expr boolean-expr -> expr . == expr boolean-expr -> expr . IS expr boolean-expr -> expr IS expr . boolean-expr -> expr . < expr boolean-expr -> expr . > expr boolean-expr -> expr . LESS-EQUAL expr boolean-expr -> expr . GREATER-EQUAL expr boolean-expr -> expr . AND expr boolean-expr -> expr . OR expr TRUE reduce 35 CHAR reduce 35 - shift 42 WHERE reduce 35 OP reduce 35 IF reduce 35 OR reduce 35 IDENTIFIER reduce 35 RETURN reduce 35 < reduce 35 EOF reduce 35 ELIF reduce 35 CP reduce 35 / shift 44 IN reduce 35 COMMA reduce 35 NOT reduce 35 COLON reduce 35 STRING reduce 35 ELSE reduce 35 > reduce 35 == reduce 35 ** shift 47 STRUCT reduce 35 NUMBER reduce 35 GREATER-EQUAL reduce 35 OB reduce 35 % shift 46 FALSE reduce 35 CB reduce 35 * shift 43 FUN reduce 35 + shift 41 AND reduce 35 DEF reduce 35 LESS-EQUAL reduce 35 IS reduce 35 State 67 arithmetic-expr -> expr . ** expr arithmetic-expr -> expr . + expr arithmetic-expr -> expr . - expr arithmetic-expr -> expr . * expr arithmetic-expr -> expr . / expr arithmetic-expr -> expr . % expr boolean-expr -> expr . == expr boolean-expr -> expr . IS expr boolean-expr -> expr . < expr boolean-expr -> expr . > expr boolean-expr -> expr . LESS-EQUAL expr boolean-expr -> expr LESS-EQUAL expr . boolean-expr -> expr . GREATER-EQUAL expr boolean-expr -> expr . AND expr boolean-expr -> expr . OR expr TRUE reduce 38 CHAR reduce 38 - shift 42 WHERE reduce 38 OP reduce 38 IF reduce 38 OR reduce 38 IDENTIFIER reduce 38 RETURN reduce 38 < reduce 38 EOF reduce 38 ELIF reduce 38 CP reduce 38 / shift 44 IN reduce 38 COMMA reduce 38 NOT reduce 38 COLON reduce 38 STRING reduce 38 ELSE reduce 38 > reduce 38 == reduce 38 ** shift 47 STRUCT reduce 38 NUMBER reduce 38 GREATER-EQUAL reduce 38 OB reduce 38 % shift 46 FALSE reduce 38 CB reduce 38 * shift 43 FUN reduce 38 + shift 41 AND reduce 38 DEF reduce 38 LESS-EQUAL reduce 38 IS reduce 38 State 68 arithmetic-expr -> expr . ** expr arithmetic-expr -> expr . + expr arithmetic-expr -> expr . - expr arithmetic-expr -> expr . * expr arithmetic-expr -> expr . / expr arithmetic-expr -> expr . % expr boolean-expr -> expr . == expr boolean-expr -> expr . IS expr boolean-expr -> expr . < expr boolean-expr -> expr . > expr boolean-expr -> expr . LESS-EQUAL expr boolean-expr -> expr . GREATER-EQUAL expr boolean-expr -> expr GREATER-EQUAL expr . boolean-expr -> expr . AND expr boolean-expr -> expr . OR expr TRUE reduce 39 CHAR reduce 39 - shift 42 WHERE reduce 39 OP reduce 39 IF reduce 39 OR reduce 39 IDENTIFIER reduce 39 RETURN reduce 39 < reduce 39 EOF reduce 39 ELIF reduce 39 CP reduce 39 / shift 44 IN reduce 39 COMMA reduce 39 NOT reduce 39 COLON reduce 39 STRING reduce 39 ELSE reduce 39 > reduce 39 == reduce 39 ** shift 47 STRUCT reduce 39 NUMBER reduce 39 GREATER-EQUAL reduce 39 OB reduce 39 % shift 46 FALSE reduce 39 CB reduce 39 * shift 43 FUN reduce 39 + shift 41 AND reduce 39 DEF reduce 39 LESS-EQUAL reduce 39 IS reduce 39 State 69 arithmetic-expr -> expr . ** expr arithmetic-expr -> expr . + expr arithmetic-expr -> expr . - expr arithmetic-expr -> expr . * expr arithmetic-expr -> expr . / expr arithmetic-expr -> expr . % expr boolean-expr -> expr . == expr boolean-expr -> expr . IS expr boolean-expr -> expr . < expr boolean-expr -> expr < expr . boolean-expr -> expr . > expr boolean-expr -> expr . LESS-EQUAL expr boolean-expr -> expr . GREATER-EQUAL expr boolean-expr -> expr . AND expr boolean-expr -> expr . OR expr TRUE reduce 36 CHAR reduce 36 - shift 42 WHERE reduce 36 OP reduce 36 IF reduce 36 OR reduce 36 IDENTIFIER reduce 36 RETURN reduce 36 < reduce 36 EOF reduce 36 ELIF reduce 36 CP reduce 36 / shift 44 IN reduce 36 COMMA reduce 36 NOT reduce 36 COLON reduce 36 STRING reduce 36 ELSE reduce 36 > reduce 36 == reduce 36 ** shift 47 STRUCT reduce 36 NUMBER reduce 36 GREATER-EQUAL reduce 36 OB reduce 36 % shift 46 FALSE reduce 36 CB reduce 36 * shift 43 FUN reduce 36 + shift 41 AND reduce 36 DEF reduce 36 LESS-EQUAL reduce 36 IS reduce 36 State 70 arithmetic-expr -> expr . ** expr arithmetic-expr -> expr . + expr arithmetic-expr -> expr . - expr arithmetic-expr -> expr . * expr arithmetic-expr -> expr . / expr arithmetic-expr -> expr . % expr boolean-expr -> expr . == expr boolean-expr -> expr . IS expr boolean-expr -> expr . < expr boolean-expr -> expr . > expr boolean-expr -> expr > expr . boolean-expr -> expr . LESS-EQUAL expr boolean-expr -> expr . GREATER-EQUAL expr boolean-expr -> expr . AND expr boolean-expr -> expr . OR expr TRUE reduce 37 CHAR reduce 37 - shift 42 WHERE reduce 37 OP reduce 37 IF reduce 37 OR reduce 37 IDENTIFIER reduce 37 RETURN reduce 37 < reduce 37 EOF reduce 37 ELIF reduce 37 CP reduce 37 / shift 44 IN reduce 37 COMMA reduce 37 NOT reduce 37 COLON reduce 37 STRING reduce 37 ELSE reduce 37 > reduce 37 == reduce 37 ** shift 47 STRUCT reduce 37 NUMBER reduce 37 GREATER-EQUAL reduce 37 OB reduce 37 % shift 46 FALSE reduce 37 CB reduce 37 * shift 43 FUN reduce 37 + shift 41 AND reduce 37 DEF reduce 37 LESS-EQUAL reduce 37 IS reduce 37 State 71 arithmetic-expr -> expr . ** expr arithmetic-expr -> expr . + expr arithmetic-expr -> expr + expr . arithmetic-expr -> expr . - expr arithmetic-expr -> expr . * expr arithmetic-expr -> expr . / expr arithmetic-expr -> expr . % expr boolean-expr -> expr . == expr boolean-expr -> expr . IS expr boolean-expr -> expr . < expr boolean-expr -> expr . > expr boolean-expr -> expr . LESS-EQUAL expr boolean-expr -> expr . GREATER-EQUAL expr boolean-expr -> expr . AND expr boolean-expr -> expr . OR expr TRUE reduce 29 CHAR reduce 29 - shift 42 WHERE reduce 29 OP reduce 29 IF reduce 29 OR reduce 29 IDENTIFIER reduce 29 RETURN reduce 29 < reduce 29 EOF reduce 29 ELIF reduce 29 CP reduce 29 / shift 44 IN reduce 29 COMMA reduce 29 NOT reduce 29 COLON reduce 29 STRING reduce 29 ELSE reduce 29 > reduce 29 == reduce 29 ** shift 47 STRUCT reduce 29 NUMBER reduce 29 GREATER-EQUAL reduce 29 OB reduce 29 % shift 46 FALSE reduce 29 CB reduce 29 * shift 43 FUN reduce 29 + reduce 29 AND reduce 29 DEF reduce 29 LESS-EQUAL reduce 29 IS reduce 29 State 72 arithmetic-expr -> expr . ** expr arithmetic-expr -> expr . + expr arithmetic-expr -> expr . - expr arithmetic-expr -> expr - expr . arithmetic-expr -> expr . * expr arithmetic-expr -> expr . / expr arithmetic-expr -> expr . % expr boolean-expr -> expr . == expr boolean-expr -> expr . IS expr boolean-expr -> expr . < expr boolean-expr -> expr . > expr boolean-expr -> expr . LESS-EQUAL expr boolean-expr -> expr . GREATER-EQUAL expr boolean-expr -> expr . AND expr boolean-expr -> expr . OR expr TRUE reduce 30 CHAR reduce 30 - shift 42 WHERE reduce 30 OP reduce 30 IF reduce 30 OR reduce 30 IDENTIFIER reduce 30 RETURN reduce 30 < reduce 30 EOF reduce 30 ELIF reduce 30 CP reduce 30 / shift 44 IN reduce 30 COMMA reduce 30 NOT reduce 30 COLON reduce 30 STRING reduce 30 ELSE reduce 30 > reduce 30 == reduce 30 ** shift 47 STRUCT reduce 30 NUMBER reduce 30 GREATER-EQUAL reduce 30 OB reduce 30 % shift 46 FALSE reduce 30 CB reduce 30 * shift 43 FUN reduce 30 + reduce 30 AND reduce 30 DEF reduce 30 LESS-EQUAL reduce 30 IS reduce 30 State 73 arithmetic-expr -> expr . ** expr arithmetic-expr -> expr . + expr arithmetic-expr -> expr . - expr arithmetic-expr -> expr . * expr arithmetic-expr -> expr * expr . arithmetic-expr -> expr . / expr arithmetic-expr -> expr . % expr boolean-expr -> expr . == expr boolean-expr -> expr . IS expr boolean-expr -> expr . < expr boolean-expr -> expr . > expr boolean-expr -> expr . LESS-EQUAL expr boolean-expr -> expr . GREATER-EQUAL expr boolean-expr -> expr . AND expr boolean-expr -> expr . OR expr TRUE reduce 31 CHAR reduce 31 - shift 42 WHERE reduce 31 OP reduce 31 IF reduce 31 OR reduce 31 IDENTIFIER reduce 31 RETURN reduce 31 < reduce 31 EOF reduce 31 ELIF reduce 31 CP reduce 31 / reduce 31 IN reduce 31 COMMA reduce 31 NOT reduce 31 COLON reduce 31 STRING reduce 31 ELSE reduce 31 > reduce 31 == reduce 31 ** shift 47 STRUCT reduce 31 NUMBER reduce 31 GREATER-EQUAL reduce 31 OB reduce 31 % shift 46 FALSE reduce 31 CB reduce 31 * reduce 31 FUN reduce 31 + reduce 31 AND reduce 31 DEF reduce 31 LESS-EQUAL reduce 31 IS reduce 31 State 74 arithmetic-expr -> expr . ** expr arithmetic-expr -> expr . + expr arithmetic-expr -> expr . - expr arithmetic-expr -> expr . * expr arithmetic-expr -> expr . / expr arithmetic-expr -> expr / expr . arithmetic-expr -> expr . % expr boolean-expr -> expr . == expr boolean-expr -> expr . IS expr boolean-expr -> expr . < expr boolean-expr -> expr . > expr boolean-expr -> expr . LESS-EQUAL expr boolean-expr -> expr . GREATER-EQUAL expr boolean-expr -> expr . AND expr boolean-expr -> expr . OR expr TRUE reduce 32 CHAR reduce 32 - shift 42 WHERE reduce 32 OP reduce 32 IF reduce 32 OR reduce 32 IDENTIFIER reduce 32 RETURN reduce 32 < reduce 32 EOF reduce 32 ELIF reduce 32 CP reduce 32 / reduce 32 IN reduce 32 COMMA reduce 32 NOT reduce 32 COLON reduce 32 STRING reduce 32 ELSE reduce 32 > reduce 32 == reduce 32 ** shift 47 STRUCT reduce 32 NUMBER reduce 32 GREATER-EQUAL reduce 32 OB reduce 32 % shift 46 FALSE reduce 32 CB reduce 32 * reduce 32 FUN reduce 32 + reduce 32 AND reduce 32 DEF reduce 32 LESS-EQUAL reduce 32 IS reduce 32 State 75 arithmetic-expr -> expr . ** expr arithmetic-expr -> expr . + expr arithmetic-expr -> expr . - expr arithmetic-expr -> expr . * expr arithmetic-expr -> expr . / expr arithmetic-expr -> expr . % expr boolean-expr -> expr . == expr boolean-expr -> expr == expr . boolean-expr -> expr . IS expr boolean-expr -> expr . < expr boolean-expr -> expr . > expr boolean-expr -> expr . LESS-EQUAL expr boolean-expr -> expr . GREATER-EQUAL expr boolean-expr -> expr . AND expr boolean-expr -> expr . OR expr TRUE reduce 34 CHAR reduce 34 - shift 42 WHERE reduce 34 OP reduce 34 IF reduce 34 OR reduce 34 IDENTIFIER reduce 34 RETURN reduce 34 < reduce 34 EOF reduce 34 ELIF reduce 34 CP reduce 34 / shift 44 IN reduce 34 COMMA reduce 34 NOT reduce 34 COLON reduce 34 STRING reduce 34 ELSE reduce 34 > reduce 34 == reduce 34 ** shift 47 STRUCT reduce 34 NUMBER reduce 34 GREATER-EQUAL reduce 34 OB reduce 34 % shift 46 FALSE reduce 34 CB reduce 34 * shift 43 FUN reduce 34 + shift 41 AND reduce 34 DEF reduce 34 LESS-EQUAL reduce 34 IS reduce 34 State 76 arithmetic-expr -> expr . ** expr arithmetic-expr -> expr . + expr arithmetic-expr -> expr . - expr arithmetic-expr -> expr . * expr arithmetic-expr -> expr . / expr arithmetic-expr -> expr . % expr arithmetic-expr -> expr % expr . boolean-expr -> expr . == expr boolean-expr -> expr . IS expr boolean-expr -> expr . < expr boolean-expr -> expr . > expr boolean-expr -> expr . LESS-EQUAL expr boolean-expr -> expr . GREATER-EQUAL expr boolean-expr -> expr . AND expr boolean-expr -> expr . OR expr TRUE reduce 33 CHAR reduce 33 - shift 42 WHERE reduce 33 OP reduce 33 IF reduce 33 OR reduce 33 IDENTIFIER reduce 33 RETURN reduce 33 < reduce 33 EOF reduce 33 ELIF reduce 33 CP reduce 33 / reduce 33 IN reduce 33 COMMA reduce 33 NOT reduce 33 COLON reduce 33 STRING reduce 33 ELSE reduce 33 > reduce 33 == reduce 33 ** shift 47 STRUCT reduce 33 NUMBER reduce 33 GREATER-EQUAL reduce 33 OB reduce 33 % reduce 33 FALSE reduce 33 CB reduce 33 * reduce 33 FUN reduce 33 + reduce 33 AND reduce 33 DEF reduce 33 LESS-EQUAL reduce 33 IS reduce 33 State 77 arithmetic-expr -> expr . ** expr arithmetic-expr -> expr ** expr . arithmetic-expr -> expr . + expr arithmetic-expr -> expr . - expr arithmetic-expr -> expr . * expr arithmetic-expr -> expr . / expr arithmetic-expr -> expr . % expr boolean-expr -> expr . == expr boolean-expr -> expr . IS expr boolean-expr -> expr . < expr boolean-expr -> expr . > expr boolean-expr -> expr . LESS-EQUAL expr boolean-expr -> expr . GREATER-EQUAL expr boolean-expr -> expr . AND expr boolean-expr -> expr . OR expr TRUE reduce 28 CHAR reduce 28 - shift 42 WHERE reduce 28 OP reduce 28 IF reduce 28 OR reduce 28 IDENTIFIER reduce 28 RETURN reduce 28 < reduce 28 EOF reduce 28 ELIF reduce 28 CP reduce 28 / reduce 28 IN reduce 28 COMMA reduce 28 NOT reduce 28 COLON reduce 28 STRING reduce 28 ELSE reduce 28 > reduce 28 == reduce 28 ** shift 47 STRUCT reduce 28 NUMBER reduce 28 GREATER-EQUAL reduce 28 OB reduce 28 % reduce 28 FALSE reduce 28 CB reduce 28 * reduce 28 FUN reduce 28 + reduce 28 AND reduce 28 DEF reduce 28 LESS-EQUAL reduce 28 IS reduce 28 State 78 args -> OP expr . expr-list CP arithmetic-expr -> expr . ** expr arithmetic-expr -> expr . + expr arithmetic-expr -> expr . - expr arithmetic-expr -> expr . * expr arithmetic-expr -> expr . / expr arithmetic-expr -> expr . % expr boolean-expr -> expr . == expr boolean-expr -> expr . IS expr boolean-expr -> expr . < expr boolean-expr -> expr . > expr boolean-expr -> expr . LESS-EQUAL expr boolean-expr -> expr . GREATER-EQUAL expr boolean-expr -> expr . AND expr boolean-expr -> expr . OR expr > shift 40 - shift 42 expr-list goto 89 OR shift 35 == shift 45 ** shift 47 % shift 46 GREATER-EQUAL shift 38 IS shift 36 + shift 41 * shift 43 CP reduce 18 < shift 39 / shift 44 AND shift 34 LESS-EQUAL shift 37 COMMA shift 90 State 79 args -> OP CP . TRUE reduce 16 CHAR reduce 16 - reduce 16 WHERE reduce 16 OP reduce 16 IF reduce 16 OR reduce 16 IDENTIFIER reduce 16 RETURN reduce 16 < reduce 16 EOF reduce 16 ELIF reduce 16 CP reduce 16 / reduce 16 IN reduce 16 COMMA reduce 16 NOT reduce 16 COLON reduce 16 STRING reduce 16 ELSE reduce 16 > reduce 16 == reduce 16 ** reduce 16 STRUCT reduce 16 NUMBER reduce 16 GREATER-EQUAL reduce 16 OB reduce 16 % reduce 16 FALSE reduce 16 CB reduce 16 * reduce 16 FUN reduce 16 + reduce 16 AND reduce 16 DEF reduce 16 LESS-EQUAL reduce 16 IS reduce 16 State 80 struct-access -> IDENTIFIER PERIOD IDENTIFIER . TRUE reduce 53 CHAR reduce 53 - reduce 53 WHERE reduce 53 OP reduce 53 IF reduce 53 OR reduce 53 IDENTIFIER reduce 53 RETURN reduce 53 < reduce 53 EOF reduce 53 ELIF reduce 53 CP reduce 53 / reduce 53 IN reduce 53 COMMA reduce 53 NOT reduce 53 COLON reduce 53 STRING reduce 53 ELSE reduce 53 > reduce 53 == reduce 53 ** reduce 53 STRUCT reduce 53 NUMBER reduce 53 GREATER-EQUAL reduce 53 OB reduce 53 % reduce 53 FALSE reduce 53 CB reduce 53 * reduce 53 FUN reduce 53 + reduce 53 AND reduce 53 DEF reduce 53 LESS-EQUAL reduce 53 IS reduce 53 State 81 binding -> IDENTIFIER = expr . arithmetic-expr -> expr . ** expr arithmetic-expr -> expr . + expr arithmetic-expr -> expr . - expr arithmetic-expr -> expr . * expr arithmetic-expr -> expr . / expr arithmetic-expr -> expr . % expr boolean-expr -> expr . == expr boolean-expr -> expr . IS expr boolean-expr -> expr . < expr boolean-expr -> expr . > expr boolean-expr -> expr . LESS-EQUAL expr boolean-expr -> expr . GREATER-EQUAL expr boolean-expr -> expr . AND expr boolean-expr -> expr . OR expr TRUE reduce 11 CHAR reduce 11 - shift 42 ** shift 47 OP reduce 11 IF reduce 11 RETURN reduce 11 FUN reduce 11 EOF reduce 11 < shift 39 / shift 44 IN reduce 11 > shift 40 COMMA reduce 11 NOT reduce 11 STRING reduce 11 OR shift 35 FALSE reduce 11 == shift 45 STRUCT reduce 11 NUMBER reduce 11 GREATER-EQUAL shift 38 OB reduce 11 % shift 46 IDENTIFIER reduce 11 * shift 43 + shift 41 AND shift 34 DEF reduce 11 LESS-EQUAL shift 37 IS shift 36 State 82 fundef -> FUN IDENTIFIER args . COLON let-expr fundef -> FUN IDENTIFIER args . COLON where-expr COLON shift 91 State 83 procdef -> DEF IDENTIFIER args . COLON expr COLON shift 92 State 84 conditional-expr -> IF expr COLON . expr ELSE COLON expr conditional-expr -> IF expr COLON . expr elif+ ELSE COLON expr NUMBER shift 17 expr goto 93 STRING shift 19 CHAR shift 20 negation-expr goto 10 FALSE shift 27 - shift 31 struct-access goto 15 IF shift 23 RETURN shift 24 arithmetic-expr goto 11 conditional-expr goto 13 IDENTIFIER shift 55 NOT shift 25 OP shift 29 TRUE shift 26 listmaker goto 14 application-expr goto 9 boolean-expr goto 12 OB shift 30 State 85 structdef -> STRUCT IDENTIFIER args . NOT reduce 12 STRING reduce 12 CHAR reduce 12 IF reduce 12 FALSE reduce 12 - reduce 12 OP reduce 12 DEF reduce 12 STRUCT reduce 12 NUMBER reduce 12 OB reduce 12 RETURN reduce 12 FUN reduce 12 EOF reduce 12 TRUE reduce 12 IDENTIFIER reduce 12 State 86 expr -> OP expr CP . TRUE reduce 60 CHAR reduce 60 - reduce 60 WHERE reduce 60 OP reduce 60 IF reduce 60 OR reduce 60 IDENTIFIER reduce 60 RETURN reduce 60 < reduce 60 EOF reduce 60 ELIF reduce 60 CP reduce 60 / reduce 60 IN reduce 60 COMMA reduce 60 NOT reduce 60 COLON reduce 60 STRING reduce 60 ELSE reduce 60 > reduce 60 == reduce 60 ** reduce 60 STRUCT reduce 60 NUMBER reduce 60 GREATER-EQUAL reduce 60 OB reduce 60 % reduce 60 FALSE reduce 60 CB reduce 60 * reduce 60 FUN reduce 60 + reduce 60 AND reduce 60 DEF reduce 60 LESS-EQUAL reduce 60 IS reduce 60 State 87 listmaker -> OB expr-comma* CB . TRUE reduce 52 CHAR reduce 52 - reduce 52 WHERE reduce 52 OP reduce 52 IF reduce 52 OR reduce 52 IDENTIFIER reduce 52 RETURN reduce 52 < reduce 52 EOF reduce 52 ELIF reduce 52 CP reduce 52 / reduce 52 IN reduce 52 COMMA reduce 52 NOT reduce 52 COLON reduce 52 STRING reduce 52 ELSE reduce 52 > reduce 52 == reduce 52 ** reduce 52 STRUCT reduce 52 NUMBER reduce 52 GREATER-EQUAL reduce 52 OB reduce 52 % reduce 52 FALSE reduce 52 CB reduce 52 * reduce 52 FUN reduce 52 + reduce 52 AND reduce 52 DEF reduce 52 LESS-EQUAL reduce 52 IS reduce 52 State 88 expr-comma* -> expr COMMA . expr-comma* NUMBER shift 17 expr goto 61 STRING shift 19 application-expr goto 9 negation-expr goto 10 FALSE shift 27 conditional-expr goto 13 struct-access goto 15 IF shift 23 - shift 31 RETURN shift 24 arithmetic-expr goto 11 CB reduce 49 IDENTIFIER shift 55 CHAR shift 20 NOT shift 25 OP shift 29 TRUE shift 26 listmaker goto 14 expr-comma* goto 94 boolean-expr goto 12 OB shift 30 State 89 args -> OP expr expr-list . CP CP shift 95 State 90 expr-list -> COMMA . expr expr-list NUMBER shift 17 expr goto 96 STRING shift 19 CHAR shift 20 negation-expr goto 10 FALSE shift 27 - shift 31 struct-access goto 15 IF shift 23 RETURN shift 24 arithmetic-expr goto 11 conditional-expr goto 13 IDENTIFIER shift 55 NOT shift 25 OP shift 29 TRUE shift 26 listmaker goto 14 application-expr goto 9 boolean-expr goto 12 OB shift 30 State 91 fundef -> FUN IDENTIFIER args COLON . let-expr fundef -> FUN IDENTIFIER args COLON . where-expr NUMBER shift 17 expr goto 99 STRING shift 19 CHAR shift 20 application-expr goto 9 FALSE shift 27 where-expr goto 98 - shift 31 struct-access goto 15 IF shift 23 RETURN shift 24 arithmetic-expr goto 11 conditional-expr goto 13 IDENTIFIER shift 55 NOT shift 25 OP shift 29 LET shift 100 TRUE shift 26 listmaker goto 14 let-expr goto 97 negation-expr goto 10 boolean-expr goto 12 OB shift 30 State 92 procdef -> DEF IDENTIFIER args COLON . expr NUMBER shift 17 expr goto 101 STRING shift 19 CHAR shift 20 negation-expr goto 10 FALSE shift 27 - shift 31 struct-access goto 15 IF shift 23 RETURN shift 24 arithmetic-expr goto 11 conditional-expr goto 13 IDENTIFIER shift 55 NOT shift 25 OP shift 29 TRUE shift 26 listmaker goto 14 application-expr goto 9 boolean-expr goto 12 OB shift 30 State 93 arithmetic-expr -> expr . ** expr arithmetic-expr -> expr . + expr arithmetic-expr -> expr . - expr arithmetic-expr -> expr . * expr arithmetic-expr -> expr . / expr arithmetic-expr -> expr . % expr boolean-expr -> expr . == expr boolean-expr -> expr . IS expr boolean-expr -> expr . < expr boolean-expr -> expr . > expr boolean-expr -> expr . LESS-EQUAL expr boolean-expr -> expr . GREATER-EQUAL expr boolean-expr -> expr . AND expr boolean-expr -> expr . OR expr conditional-expr -> IF expr COLON expr . ELSE COLON expr conditional-expr -> IF expr COLON expr . elif+ ELSE COLON expr > shift 40 ELSE shift 105 - shift 42 OR shift 35 == shift 45 < shift 39 elif+ goto 103 GREATER-EQUAL shift 38 elif goto 102 % shift 46 IS shift 36 * shift 43 ELIF shift 104 + shift 41 AND shift 34 / shift 44 LESS-EQUAL shift 37 ** shift 47 State 94 expr-comma* -> expr COMMA expr-comma* . CB reduce 51 State 95 args -> OP expr expr-list CP . TRUE reduce 17 CHAR reduce 17 - reduce 17 WHERE reduce 17 OP reduce 17 IF reduce 17 OR reduce 17 IDENTIFIER reduce 17 RETURN reduce 17 < reduce 17 EOF reduce 17 ELIF reduce 17 CP reduce 17 / reduce 17 IN reduce 17 COMMA reduce 17 NOT reduce 17 COLON reduce 17 STRING reduce 17 ELSE reduce 17 > reduce 17 == reduce 17 ** reduce 17 STRUCT reduce 17 NUMBER reduce 17 GREATER-EQUAL reduce 17 OB reduce 17 % reduce 17 FALSE reduce 17 CB reduce 17 * reduce 17 FUN reduce 17 + reduce 17 AND reduce 17 DEF reduce 17 LESS-EQUAL reduce 17 IS reduce 17 State 96 expr-list -> COMMA expr . expr-list arithmetic-expr -> expr . ** expr arithmetic-expr -> expr . + expr arithmetic-expr -> expr . - expr arithmetic-expr -> expr . * expr arithmetic-expr -> expr . / expr arithmetic-expr -> expr . % expr boolean-expr -> expr . == expr boolean-expr -> expr . IS expr boolean-expr -> expr . < expr boolean-expr -> expr . > expr boolean-expr -> expr . LESS-EQUAL expr boolean-expr -> expr . GREATER-EQUAL expr boolean-expr -> expr . AND expr boolean-expr -> expr . OR expr > shift 40 - shift 42 expr-list goto 106 OR shift 35 == shift 45 ** shift 47 % shift 46 GREATER-EQUAL shift 38 IS shift 36 + shift 41 * shift 43 CP reduce 18 < shift 39 / shift 44 AND shift 34 LESS-EQUAL shift 37 COMMA shift 90 State 97 fundef -> FUN IDENTIFIER args COLON let-expr . NOT reduce 13 STRING reduce 13 CHAR reduce 13 IF reduce 13 FALSE reduce 13 - reduce 13 OP reduce 13 DEF reduce 13 STRUCT reduce 13 NUMBER reduce 13 OB reduce 13 RETURN reduce 13 FUN reduce 13 EOF reduce 13 TRUE reduce 13 IDENTIFIER reduce 13 State 98 fundef -> FUN IDENTIFIER args COLON where-expr . NOT reduce 14 STRING reduce 14 CHAR reduce 14 IF reduce 14 FALSE reduce 14 - reduce 14 OP reduce 14 DEF reduce 14 STRUCT reduce 14 NUMBER reduce 14 OB reduce 14 RETURN reduce 14 FUN reduce 14 EOF reduce 14 TRUE reduce 14 IDENTIFIER reduce 14 State 99 let-expr -> expr . where-expr -> expr . WHERE local-defs arithmetic-expr -> expr . ** expr arithmetic-expr -> expr . + expr arithmetic-expr -> expr . - expr arithmetic-expr -> expr . * expr arithmetic-expr -> expr . / expr arithmetic-expr -> expr . % expr boolean-expr -> expr . == expr boolean-expr -> expr . IS expr boolean-expr -> expr . < expr boolean-expr -> expr . > expr boolean-expr -> expr . LESS-EQUAL expr boolean-expr -> expr . GREATER-EQUAL expr boolean-expr -> expr . AND expr boolean-expr -> expr . OR expr TRUE reduce 20 CHAR reduce 20 FUN reduce 20 begin conflict: - shift 42 - reduce 20 end conflict OP reduce 20 DEF reduce 20 RETURN reduce 20 IS shift 36 EOF reduce 20 < shift 39 / shift 44 > shift 40 NOT reduce 20 STRING reduce 20 IF reduce 20 WHERE shift 107 OR shift 35 FALSE reduce 20 == shift 45 STRUCT reduce 20 NUMBER reduce 20 GREATER-EQUAL shift 38 OB reduce 20 % shift 46 IDENTIFIER reduce 20 * shift 43 + shift 41 AND shift 34 LESS-EQUAL shift 37 ** shift 47 State 100 let-expr -> LET . local-defs IN COLON let-expr IDENTIFIER shift 110 binding goto 108 local-defs goto 109 State 101 procdef -> DEF IDENTIFIER args COLON expr . arithmetic-expr -> expr . ** expr arithmetic-expr -> expr . + expr arithmetic-expr -> expr . - expr arithmetic-expr -> expr . * expr arithmetic-expr -> expr . / expr arithmetic-expr -> expr . % expr boolean-expr -> expr . == expr boolean-expr -> expr . IS expr boolean-expr -> expr . < expr boolean-expr -> expr . > expr boolean-expr -> expr . LESS-EQUAL expr boolean-expr -> expr . GREATER-EQUAL expr boolean-expr -> expr . AND expr boolean-expr -> expr . OR expr TRUE reduce 15 CHAR reduce 15 FUN reduce 15 begin conflict: - shift 42 - reduce 15 end conflict OP reduce 15 DEF reduce 15 OR shift 35 RETURN reduce 15 IS shift 36 EOF reduce 15 < shift 39 / shift 44 NOT reduce 15 STRING reduce 15 IF reduce 15 > shift 40 FALSE reduce 15 == shift 45 STRUCT reduce 15 NUMBER reduce 15 GREATER-EQUAL shift 38 OB reduce 15 % shift 46 IDENTIFIER reduce 15 * shift 43 + shift 41 AND shift 34 LESS-EQUAL shift 37 ** shift 47 State 102 elif+ -> elif . elif* elif* goto 112 ELSE reduce 46 ELIF shift 104 elif goto 111 State 103 conditional-expr -> IF expr COLON expr elif+ . ELSE COLON expr ELSE shift 113 State 104 elif -> ELIF . expr COLON expr NUMBER shift 17 expr goto 114 STRING shift 19 CHAR shift 20 negation-expr goto 10 FALSE shift 27 - shift 31 struct-access goto 15 IF shift 23 RETURN shift 24 arithmetic-expr goto 11 conditional-expr goto 13 IDENTIFIER shift 55 NOT shift 25 OP shift 29 TRUE shift 26 listmaker goto 14 application-expr goto 9 boolean-expr goto 12 OB shift 30 State 105 conditional-expr -> IF expr COLON expr ELSE . COLON expr COLON shift 115 State 106 expr-list -> COMMA expr expr-list . CP reduce 19 State 107 where-expr -> expr WHERE . local-defs IDENTIFIER shift 110 binding goto 108 local-defs goto 116 State 108 local-defs -> binding . local-defs -> binding . COMMA local-defs NOT reduce 22 STRING reduce 22 CHAR reduce 22 IF reduce 22 FALSE reduce 22 IN reduce 22 OP reduce 22 DEF reduce 22 - reduce 22 STRUCT reduce 22 NUMBER reduce 22 OB reduce 22 RETURN reduce 22 FUN reduce 22 EOF reduce 22 COMMA shift 117 TRUE reduce 22 IDENTIFIER reduce 22 State 109 let-expr -> LET local-defs . IN COLON let-expr IN shift 118 State 110 binding -> IDENTIFIER . = expr = shift 51 State 111 elif* -> elif . elif* elif* goto 119 ELSE reduce 46 ELIF shift 104 elif goto 111 State 112 elif+ -> elif elif* . ELSE reduce 48 State 113 conditional-expr -> IF expr COLON expr elif+ ELSE . COLON expr COLON shift 120 State 114 arithmetic-expr -> expr . ** expr arithmetic-expr -> expr . + expr arithmetic-expr -> expr . - expr arithmetic-expr -> expr . * expr arithmetic-expr -> expr . / expr arithmetic-expr -> expr . % expr boolean-expr -> expr . == expr boolean-expr -> expr . IS expr boolean-expr -> expr . < expr boolean-expr -> expr . > expr boolean-expr -> expr . LESS-EQUAL expr boolean-expr -> expr . GREATER-EQUAL expr boolean-expr -> expr . AND expr boolean-expr -> expr . OR expr elif -> ELIF expr . COLON expr COLON shift 121 > shift 40 - shift 42 OR shift 35 == shift 45 ** shift 47 % shift 46 GREATER-EQUAL shift 38 IS shift 36 * shift 43 + shift 41 < shift 39 / shift 44 AND shift 34 LESS-EQUAL shift 37 State 115 conditional-expr -> IF expr COLON expr ELSE COLON . expr NUMBER shift 17 expr goto 122 STRING shift 19 CHAR shift 20 negation-expr goto 10 FALSE shift 27 - shift 31 struct-access goto 15 IF shift 23 RETURN shift 24 arithmetic-expr goto 11 conditional-expr goto 13 IDENTIFIER shift 55 NOT shift 25 OP shift 29 TRUE shift 26 listmaker goto 14 application-expr goto 9 boolean-expr goto 12 OB shift 30 State 116 where-expr -> expr WHERE local-defs . NOT reduce 24 STRING reduce 24 CHAR reduce 24 IF reduce 24 FALSE reduce 24 - reduce 24 OP reduce 24 DEF reduce 24 STRUCT reduce 24 NUMBER reduce 24 OB reduce 24 RETURN reduce 24 FUN reduce 24 EOF reduce 24 TRUE reduce 24 IDENTIFIER reduce 24 State 117 local-defs -> binding COMMA . local-defs IDENTIFIER shift 110 binding goto 108 local-defs goto 123 State 118 let-expr -> LET local-defs IN . COLON let-expr COLON shift 124 State 119 elif* -> elif elif* . ELSE reduce 47 State 120 conditional-expr -> IF expr COLON expr elif+ ELSE COLON . expr NUMBER shift 17 expr goto 125 STRING shift 19 CHAR shift 20 negation-expr goto 10 FALSE shift 27 - shift 31 struct-access goto 15 IF shift 23 RETURN shift 24 arithmetic-expr goto 11 conditional-expr goto 13 IDENTIFIER shift 55 NOT shift 25 OP shift 29 TRUE shift 26 listmaker goto 14 application-expr goto 9 boolean-expr goto 12 OB shift 30 State 121 elif -> ELIF expr COLON . expr NUMBER shift 17 expr goto 126 STRING shift 19 CHAR shift 20 negation-expr goto 10 FALSE shift 27 - shift 31 struct-access goto 15 IF shift 23 RETURN shift 24 arithmetic-expr goto 11 conditional-expr goto 13 IDENTIFIER shift 55 NOT shift 25 OP shift 29 TRUE shift 26 listmaker goto 14 application-expr goto 9 boolean-expr goto 12 OB shift 30 State 122 arithmetic-expr -> expr . ** expr arithmetic-expr -> expr . + expr arithmetic-expr -> expr . - expr arithmetic-expr -> expr . * expr arithmetic-expr -> expr . / expr arithmetic-expr -> expr . % expr boolean-expr -> expr . == expr boolean-expr -> expr . IS expr boolean-expr -> expr . < expr boolean-expr -> expr . > expr boolean-expr -> expr . LESS-EQUAL expr boolean-expr -> expr . GREATER-EQUAL expr boolean-expr -> expr . AND expr boolean-expr -> expr . OR expr conditional-expr -> IF expr COLON expr ELSE COLON expr . TRUE reduce 43 CHAR reduce 43 - shift 42 WHERE reduce 43 OP reduce 43 IF reduce 43 OR shift 35 IDENTIFIER reduce 43 RETURN reduce 43 < shift 39 EOF reduce 43 ELIF reduce 43 CP reduce 43 / shift 44 IN reduce 43 COMMA reduce 43 NOT reduce 43 COLON reduce 43 STRING reduce 43 ELSE reduce 43 > shift 40 == shift 45 ** shift 47 STRUCT reduce 43 NUMBER reduce 43 GREATER-EQUAL shift 38 OB reduce 43 % shift 46 FALSE reduce 43 CB reduce 43 * shift 43 FUN reduce 43 + shift 41 AND shift 34 DEF reduce 43 LESS-EQUAL shift 37 IS shift 36 State 123 local-defs -> binding COMMA local-defs . NOT reduce 23 STRING reduce 23 CHAR reduce 23 IF reduce 23 FALSE reduce 23 IN reduce 23 OP reduce 23 DEF reduce 23 - reduce 23 STRUCT reduce 23 NUMBER reduce 23 OB reduce 23 RETURN reduce 23 FUN reduce 23 EOF reduce 23 TRUE reduce 23 IDENTIFIER reduce 23 State 124 let-expr -> LET local-defs IN COLON . let-expr NUMBER shift 17 expr goto 128 STRING shift 19 CHAR shift 20 negation-expr goto 10 FALSE shift 27 let-expr goto 127 - shift 31 struct-access goto 15 IF shift 23 RETURN shift 24 arithmetic-expr goto 11 conditional-expr goto 13 IDENTIFIER shift 55 NOT shift 25 OP shift 29 LET shift 100 TRUE shift 26 listmaker goto 14 application-expr goto 9 boolean-expr goto 12 OB shift 30 State 125 arithmetic-expr -> expr . ** expr arithmetic-expr -> expr . + expr arithmetic-expr -> expr . - expr arithmetic-expr -> expr . * expr arithmetic-expr -> expr . / expr arithmetic-expr -> expr . % expr boolean-expr -> expr . == expr boolean-expr -> expr . IS expr boolean-expr -> expr . < expr boolean-expr -> expr . > expr boolean-expr -> expr . LESS-EQUAL expr boolean-expr -> expr . GREATER-EQUAL expr boolean-expr -> expr . AND expr boolean-expr -> expr . OR expr conditional-expr -> IF expr COLON expr elif+ ELSE COLON expr . TRUE reduce 44 CHAR reduce 44 - shift 42 WHERE reduce 44 OP reduce 44 IF reduce 44 OR shift 35 IDENTIFIER reduce 44 RETURN reduce 44 < shift 39 EOF reduce 44 ELIF reduce 44 CP reduce 44 / shift 44 IN reduce 44 COMMA reduce 44 NOT reduce 44 COLON reduce 44 STRING reduce 44 ELSE reduce 44 > shift 40 == shift 45 ** shift 47 STRUCT reduce 44 NUMBER reduce 44 GREATER-EQUAL shift 38 OB reduce 44 % shift 46 FALSE reduce 44 CB reduce 44 * shift 43 FUN reduce 44 + shift 41 AND shift 34 DEF reduce 44 LESS-EQUAL shift 37 IS shift 36 State 126 arithmetic-expr -> expr . ** expr arithmetic-expr -> expr . + expr arithmetic-expr -> expr . - expr arithmetic-expr -> expr . * expr arithmetic-expr -> expr . / expr arithmetic-expr -> expr . % expr boolean-expr -> expr . == expr boolean-expr -> expr . IS expr boolean-expr -> expr . < expr boolean-expr -> expr . > expr boolean-expr -> expr . LESS-EQUAL expr boolean-expr -> expr . GREATER-EQUAL expr boolean-expr -> expr . AND expr boolean-expr -> expr . OR expr elif -> ELIF expr COLON expr . > shift 40 ELSE reduce 45 - shift 42 OR shift 35 == shift 45 ** shift 47 % shift 46 GREATER-EQUAL shift 38 IS shift 36 * shift 43 ELIF reduce 45 + shift 41 < shift 39 / shift 44 AND shift 34 LESS-EQUAL shift 37 State 127 let-expr -> LET local-defs IN COLON let-expr . NOT reduce 21 STRING reduce 21 CHAR reduce 21 IF reduce 21 FALSE reduce 21 - reduce 21 OP reduce 21 DEF reduce 21 STRUCT reduce 21 NUMBER reduce 21 OB reduce 21 RETURN reduce 21 FUN reduce 21 EOF reduce 21 TRUE reduce 21 IDENTIFIER reduce 21 State 128 let-expr -> expr . arithmetic-expr -> expr . ** expr arithmetic-expr -> expr . + expr arithmetic-expr -> expr . - expr arithmetic-expr -> expr . * expr arithmetic-expr -> expr . / expr arithmetic-expr -> expr . % expr boolean-expr -> expr . == expr boolean-expr -> expr . IS expr boolean-expr -> expr . < expr boolean-expr -> expr . > expr boolean-expr -> expr . LESS-EQUAL expr boolean-expr -> expr . GREATER-EQUAL expr boolean-expr -> expr . AND expr boolean-expr -> expr . OR expr TRUE reduce 20 CHAR reduce 20 FUN reduce 20 begin conflict: - shift 42 - reduce 20 end conflict OP reduce 20 DEF reduce 20 OR shift 35 RETURN reduce 20 IS shift 36 EOF reduce 20 < shift 39 / shift 44 NOT reduce 20 STRING reduce 20 IF reduce 20 > shift 40 FALSE reduce 20 == shift 45 STRUCT reduce 20 NUMBER reduce 20 GREATER-EQUAL shift 38 OB reduce 20 % shift 46 IDENTIFIER reduce 20 * shift 43 + shift 41 AND shift 34 LESS-EQUAL shift 37 ** shift 47 6 shift/reduce conflicts