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