-- Parser for the small language Epsilon
-- $Id: EpsilonParser.y,v 1.3 2007/02/21 00:52:10 cs162 Exp $

module EpsilonParser where
import Char

-- parser produced by Happy Version 1.15

data HappyAbsSyn t4 t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21
	= HappyTerminal Token
	| HappyErrorToken Int
	| HappyAbsSyn4 t4
	| HappyAbsSyn5 t5
	| HappyAbsSyn6 t6
	| HappyAbsSyn7 t7
	| HappyAbsSyn8 t8
	| HappyAbsSyn9 t9
	| HappyAbsSyn10 t10
	| HappyAbsSyn11 t11
	| HappyAbsSyn12 t12
	| HappyAbsSyn13 t13
	| HappyAbsSyn14 t14
	| HappyAbsSyn15 t15
	| HappyAbsSyn16 t16
	| HappyAbsSyn17 t17
	| HappyAbsSyn18 t18
	| HappyAbsSyn19 t19
	| HappyAbsSyn20 t20
	| HappyAbsSyn21 t21

action_0 (22) = happyShift action_7
action_0 (23) = happyShift action_8
action_0 (24) = happyShift action_12
action_0 (35) = happyShift action_9
action_0 (4) = happyGoto action_10
action_0 (5) = happyGoto action_2
action_0 (6) = happyGoto action_3
action_0 (7) = happyGoto action_4
action_0 (8) = happyGoto action_5
action_0 (11) = happyGoto action_11
action_0 (13) = happyGoto action_6
action_0 _ = happyFail

action_1 (22) = happyShift action_7
action_1 (23) = happyShift action_8
action_1 (35) = happyShift action_9
action_1 (5) = happyGoto action_2
action_1 (6) = happyGoto action_3
action_1 (7) = happyGoto action_4
action_1 (8) = happyGoto action_5
action_1 (13) = happyGoto action_6
action_1 _ = happyFail

action_2 (22) = happyShift action_7
action_2 (23) = happyShift action_8
action_2 (24) = happyShift action_12
action_2 (35) = happyShift action_9
action_2 (6) = happyGoto action_30
action_2 (7) = happyGoto action_4
action_2 (8) = happyGoto action_5
action_2 (11) = happyGoto action_31
action_2 (13) = happyGoto action_6
action_2 _ = happyFail

action_3 _ = happyReduce_4

action_4 _ = happyReduce_6

action_5 (48) = happyShift action_29
action_5 _ = happyFail

action_6 _ = happyReduce_5

action_7 (54) = happyShift action_28
action_7 _ = happyFail

action_8 (54) = happyShift action_27
action_8 _ = happyFail

action_9 (54) = happyShift action_26
action_9 (12) = happyGoto action_24
action_9 (21) = happyGoto action_25
action_9 _ = happyFail

action_10 (56) = happyAccept
action_10 _ = happyFail

action_11 (50) = happyShift action_23
action_11 _ = happyFail

action_12 (24) = happyShift action_12
action_12 (26) = happyShift action_17
action_12 (28) = happyShift action_18
action_12 (31) = happyShift action_19
action_12 (32) = happyShift action_20
action_12 (33) = happyShift action_21
action_12 (54) = happyShift action_22
action_12 (11) = happyGoto action_13
action_12 (14) = happyGoto action_14
action_12 (15) = happyGoto action_15
action_12 (20) = happyGoto action_16
action_12 _ = happyFail

action_13 _ = happyReduce_28

action_14 (25) = happyShift action_58
action_14 (48) = happyShift action_59
action_14 _ = happyFail

action_15 _ = happyReduce_19

action_16 (41) = happyShift action_57
action_16 _ = happyFail

action_17 (34) = happyShift action_55
action_17 (46) = happyShift action_47
action_17 (53) = happyShift action_48
action_17 (54) = happyShift action_49
action_17 (55) = happyShift action_50
action_17 (18) = happyGoto action_56
action_17 (19) = happyGoto action_54
action_17 (20) = happyGoto action_46
action_17 _ = happyFail

action_18 (34) = happyShift action_55
action_18 (46) = happyShift action_47
action_18 (53) = happyShift action_48
action_18 (54) = happyShift action_49
action_18 (55) = happyShift action_50
action_18 (18) = happyGoto action_53
action_18 (19) = happyGoto action_54
action_18 (20) = happyGoto action_46
action_18 _ = happyFail

action_19 (46) = happyShift action_47
action_19 (53) = happyShift action_48
action_19 (54) = happyShift action_49
action_19 (55) = happyShift action_50
action_19 (19) = happyGoto action_52
action_19 (20) = happyGoto action_46
action_19 _ = happyFail

action_20 (46) = happyShift action_47
action_20 (53) = happyShift action_48
action_20 (54) = happyShift action_49
action_20 (55) = happyShift action_50
action_20 (19) = happyGoto action_51
action_20 (20) = happyGoto action_46
action_20 _ = happyFail

action_21 (46) = happyShift action_47
action_21 (53) = happyShift action_48
action_21 (54) = happyShift action_49
action_21 (55) = happyShift action_50
action_21 (19) = happyGoto action_45
action_21 (20) = happyGoto action_46
action_21 _ = happyFail

action_22 (46) = happyShift action_43
action_22 (51) = happyShift action_44
action_22 (16) = happyGoto action_42
action_22 _ = happyReduce_50

action_23 _ = happyReduce_2

action_24 (48) = happyShift action_41
action_24 _ = happyFail

action_25 (49) = happyShift action_40
action_25 _ = happyReduce_15

action_26 (51) = happyShift action_39
action_26 _ = happyReduce_52

action_27 (46) = happyShift action_37
action_27 (9) = happyGoto action_38
action_27 _ = happyFail

action_28 (46) = happyShift action_37
action_28 (9) = happyGoto action_36
action_28 _ = happyFail

action_29 (24) = happyShift action_12
action_29 (35) = happyShift action_9
action_29 (10) = happyGoto action_33
action_29 (11) = happyGoto action_34
action_29 (13) = happyGoto action_35
action_29 _ = happyFail

action_30 _ = happyReduce_3

action_31 (50) = happyShift action_32
action_31 _ = happyFail

action_32 _ = happyReduce_1

action_33 (48) = happyShift action_88
action_33 _ = happyFail

action_34 _ = happyReduce_13

action_35 (24) = happyShift action_12
action_35 (11) = happyGoto action_87
action_35 _ = happyFail

action_36 _ = happyReduce_8

action_37 (47) = happyShift action_86
action_37 (54) = happyShift action_26
action_37 (12) = happyGoto action_85
action_37 (21) = happyGoto action_25
action_37 _ = happyFail

action_38 _ = happyReduce_9

action_39 (55) = happyShift action_84
action_39 _ = happyFail

action_40 (54) = happyShift action_26
action_40 (12) = happyGoto action_83
action_40 (21) = happyGoto action_25
action_40 _ = happyFail

action_41 _ = happyReduce_17

action_42 _ = happyReduce_21

action_43 (47) = happyShift action_81
action_43 (54) = happyShift action_82
action_43 (17) = happyGoto action_79
action_43 (20) = happyGoto action_80
action_43 _ = happyFail

action_44 (46) = happyShift action_47
action_44 (53) = happyShift action_48
action_44 (54) = happyShift action_49
action_44 (55) = happyShift action_50
action_44 (19) = happyGoto action_78
action_44 (20) = happyGoto action_46
action_44 _ = happyFail

action_45 (43) = happyShift action_70
action_45 (44) = happyShift action_71
action_45 (45) = happyShift action_72
action_45 (53) = happyShift action_73
action_45 _ = happyReduce_27

action_46 _ = happyReduce_47

action_47 (46) = happyShift action_47
action_47 (53) = happyShift action_48
action_47 (54) = happyShift action_49
action_47 (55) = happyShift action_50
action_47 (19) = happyGoto action_77
action_47 (20) = happyGoto action_46
action_47 _ = happyFail

action_48 (46) = happyShift action_47
action_48 (53) = happyShift action_48
action_48 (54) = happyShift action_49
action_48 (55) = happyShift action_50
action_48 (19) = happyGoto action_76
action_48 (20) = happyGoto action_46
action_48 _ = happyFail

action_49 (46) = happyShift action_43
action_49 (51) = happyShift action_44
action_49 (16) = happyGoto action_75
action_49 _ = happyReduce_50

action_50 _ = happyReduce_48

action_51 (43) = happyShift action_70
action_51 (44) = happyShift action_71
action_51 (45) = happyShift action_72
action_51 (53) = happyShift action_73
action_51 _ = happyReduce_26

action_52 (43) = happyShift action_70
action_52 (44) = happyShift action_71
action_52 (45) = happyShift action_72
action_52 (53) = happyShift action_73
action_52 _ = happyReduce_25

action_53 (29) = happyShift action_74
action_53 _ = happyFail

action_54 (36) = happyShift action_64
action_54 (37) = happyShift action_65
action_54 (38) = happyShift action_66
action_54 (39) = happyShift action_67
action_54 (40) = happyShift action_68
action_54 (42) = happyShift action_69
action_54 (43) = happyShift action_70
action_54 (44) = happyShift action_71
action_54 (45) = happyShift action_72
action_54 (53) = happyShift action_73
action_54 _ = happyFail

action_55 (46) = happyShift action_47
action_55 (53) = happyShift action_48
action_55 (54) = happyShift action_49
action_55 (55) = happyShift action_50
action_55 (19) = happyGoto action_63
action_55 (20) = happyGoto action_46
action_55 _ = happyFail

action_56 (27) = happyShift action_62
action_56 _ = happyFail

action_57 (46) = happyShift action_47
action_57 (53) = happyShift action_48
action_57 (54) = happyShift action_49
action_57 (55) = happyShift action_50
action_57 (19) = happyGoto action_61
action_57 (20) = happyGoto action_46
action_57 _ = happyFail

action_58 _ = happyReduce_14

action_59 (24) = happyShift action_12
action_59 (26) = happyShift action_17
action_59 (28) = happyShift action_18
action_59 (31) = happyShift action_19
action_59 (32) = happyShift action_20
action_59 (33) = happyShift action_21
action_59 (54) = happyShift action_22
action_59 (11) = happyGoto action_13
action_59 (15) = happyGoto action_60
action_59 (20) = happyGoto action_16
action_59 _ = happyFail

action_60 _ = happyReduce_18

action_61 (43) = happyShift action_70
action_61 (44) = happyShift action_71
action_61 (45) = happyShift action_72
action_61 (53) = happyShift action_73
action_61 _ = happyReduce_20

action_62 (24) = happyShift action_12
action_62 (26) = happyShift action_17
action_62 (28) = happyShift action_18
action_62 (31) = happyShift action_19
action_62 (32) = happyShift action_20
action_62 (33) = happyShift action_21
action_62 (54) = happyShift action_22
action_62 (11) = happyGoto action_13
action_62 (15) = happyGoto action_106
action_62 (20) = happyGoto action_16
action_62 _ = happyFail

action_63 (43) = happyShift action_70
action_63 (44) = happyShift action_71
action_63 (45) = happyShift action_72
action_63 (53) = happyShift action_73
action_63 _ = happyReduce_33

action_64 (46) = happyShift action_47
action_64 (53) = happyShift action_48
action_64 (54) = happyShift action_49
action_64 (55) = happyShift action_50
action_64 (19) = happyGoto action_105
action_64 (20) = happyGoto action_46
action_64 _ = happyFail

action_65 (46) = happyShift action_47
action_65 (53) = happyShift action_48
action_65 (54) = happyShift action_49
action_65 (55) = happyShift action_50
action_65 (19) = happyGoto action_104
action_65 (20) = happyGoto action_46
action_65 _ = happyFail

action_66 (46) = happyShift action_47
action_66 (53) = happyShift action_48
action_66 (54) = happyShift action_49
action_66 (55) = happyShift action_50
action_66 (19) = happyGoto action_103
action_66 (20) = happyGoto action_46
action_66 _ = happyFail

action_67 (46) = happyShift action_47
action_67 (53) = happyShift action_48
action_67 (54) = happyShift action_49
action_67 (55) = happyShift action_50
action_67 (19) = happyGoto action_102
action_67 (20) = happyGoto action_46
action_67 _ = happyFail

action_68 (46) = happyShift action_47
action_68 (53) = happyShift action_48
action_68 (54) = happyShift action_49
action_68 (55) = happyShift action_50
action_68 (19) = happyGoto action_101
action_68 (20) = happyGoto action_46
action_68 _ = happyFail

action_69 (46) = happyShift action_47
action_69 (53) = happyShift action_48
action_69 (54) = happyShift action_49
action_69 (55) = happyShift action_50
action_69 (19) = happyGoto action_100
action_69 (20) = happyGoto action_46
action_69 _ = happyFail

action_70 (46) = happyShift action_47
action_70 (53) = happyShift action_48
action_70 (54) = happyShift action_49
action_70 (55) = happyShift action_50
action_70 (19) = happyGoto action_99
action_70 (20) = happyGoto action_46
action_70 _ = happyFail

action_71 (46) = happyShift action_47
action_71 (53) = happyShift action_48
action_71 (54) = happyShift action_49
action_71 (55) = happyShift action_50
action_71 (19) = happyGoto action_98
action_71 (20) = happyGoto action_46
action_71 _ = happyFail

action_72 (46) = happyShift action_47
action_72 (53) = happyShift action_48
action_72 (54) = happyShift action_49
action_72 (55) = happyShift action_50
action_72 (19) = happyGoto action_97
action_72 (20) = happyGoto action_46
action_72 _ = happyFail

action_73 (46) = happyShift action_47
action_73 (53) = happyShift action_48
action_73 (54) = happyShift action_49
action_73 (55) = happyShift action_50
action_73 (19) = happyGoto action_96
action_73 (20) = happyGoto action_46
action_73 _ = happyFail

action_74 (24) = happyShift action_12
action_74 (26) = happyShift action_17
action_74 (28) = happyShift action_18
action_74 (31) = happyShift action_19
action_74 (32) = happyShift action_20
action_74 (33) = happyShift action_21
action_74 (54) = happyShift action_22
action_74 (11) = happyGoto action_13
action_74 (15) = happyGoto action_95
action_74 (20) = happyGoto action_16
action_74 _ = happyFail

action_75 _ = happyReduce_46

action_76 (44) = happyShift action_71
action_76 (45) = happyShift action_72
action_76 _ = happyReduce_44

action_77 (43) = happyShift action_70
action_77 (44) = happyShift action_71
action_77 (45) = happyShift action_72
action_77 (47) = happyShift action_94
action_77 (53) = happyShift action_73
action_77 _ = happyFail

action_78 (43) = happyShift action_70
action_78 (44) = happyShift action_71
action_78 (45) = happyShift action_72
action_78 (52) = happyShift action_93
action_78 (53) = happyShift action_73
action_78 _ = happyFail

action_79 (47) = happyShift action_92
action_79 _ = happyFail

action_80 (49) = happyShift action_91
action_80 _ = happyReduce_31

action_81 _ = happyReduce_30

action_82 (51) = happyShift action_44
action_82 _ = happyReduce_50

action_83 _ = happyReduce_16

action_84 (52) = happyShift action_90
action_84 _ = happyFail

action_85 (47) = happyShift action_89
action_85 _ = happyFail

action_86 _ = happyReduce_11

action_87 _ = happyReduce_12

action_88 _ = happyReduce_7

action_89 _ = happyReduce_10

action_90 _ = happyReduce_51

action_91 (54) = happyShift action_82
action_91 (17) = happyGoto action_108
action_91 (20) = happyGoto action_80
action_91 _ = happyFail

action_92 _ = happyReduce_29

action_93 _ = happyReduce_49

action_94 _ = happyReduce_45

action_95 (30) = happyShift action_107
action_95 _ = happyReduce_22

action_96 (44) = happyShift action_71
action_96 (45) = happyShift action_72
action_96 _ = happyReduce_41

action_97 _ = happyReduce_43

action_98 _ = happyReduce_42

action_99 (44) = happyShift action_71
action_99 (45) = happyShift action_72
action_99 _ = happyReduce_40

action_100 (43) = happyShift action_70
action_100 (44) = happyShift action_71
action_100 (45) = happyShift action_72
action_100 (53) = happyShift action_73
action_100 _ = happyReduce_34

action_101 (43) = happyShift action_70
action_101 (44) = happyShift action_71
action_101 (45) = happyShift action_72
action_101 (53) = happyShift action_73
action_101 _ = happyReduce_39

action_102 (43) = happyShift action_70
action_102 (44) = happyShift action_71
action_102 (45) = happyShift action_72
action_102 (53) = happyShift action_73
action_102 _ = happyReduce_38

action_103 (43) = happyShift action_70
action_103 (44) = happyShift action_71
action_103 (45) = happyShift action_72
action_103 (53) = happyShift action_73
action_103 _ = happyReduce_37

action_104 (43) = happyShift action_70
action_104 (44) = happyShift action_71
action_104 (45) = happyShift action_72
action_104 (53) = happyShift action_73
action_104 _ = happyReduce_36

action_105 (43) = happyShift action_70
action_105 (44) = happyShift action_71
action_105 (45) = happyShift action_72
action_105 (53) = happyShift action_73
action_105 _ = happyReduce_35

action_106 _ = happyReduce_24

action_107 (24) = happyShift action_12
action_107 (26) = happyShift action_17
action_107 (28) = happyShift action_18
action_107 (31) = happyShift action_19
action_107 (32) = happyShift action_20
action_107 (33) = happyShift action_21
action_107 (54) = happyShift action_22
action_107 (11) = happyGoto action_13
action_107 (15) = happyGoto action_109
action_107 (20) = happyGoto action_16
action_107 _ = happyFail

action_108 _ = happyReduce_32

action_109 _ = happyReduce_23

happyReduce_1 = happySpecReduce_3 4 happyReduction_1
happyReduction_1 _
	(HappyAbsSyn11  happy_var_2)
	(HappyAbsSyn5  happy_var_1)
	 =  HappyAbsSyn4
		 (Program happy_var_1 happy_var_2
	)
happyReduction_1 _ _ _  = notHappyAtAll 

happyReduce_2 = happySpecReduce_2 4 happyReduction_2
happyReduction_2 _
	(HappyAbsSyn11  happy_var_1)
	 =  HappyAbsSyn4
		 (Program [] happy_var_1
	)
happyReduction_2 _ _  = notHappyAtAll 

happyReduce_3 = happySpecReduce_2 5 happyReduction_3
happyReduction_3 (HappyAbsSyn6  happy_var_2)
	(HappyAbsSyn5  happy_var_1)
	 =  HappyAbsSyn5
		 (happy_var_1 ++ [happy_var_2]
	)
happyReduction_3 _ _  = notHappyAtAll 

happyReduce_4 = happySpecReduce_1 5 happyReduction_4
happyReduction_4 (HappyAbsSyn6  happy_var_1)
	 =  HappyAbsSyn5
		 ([happy_var_1]
	)
happyReduction_4 _  = notHappyAtAll 

happyReduce_5 = happySpecReduce_1 6 happyReduction_5
happyReduction_5 (HappyAbsSyn13  happy_var_1)
	 =  HappyAbsSyn6
		 (happy_var_1
	)
happyReduction_5 _  = notHappyAtAll 

happyReduce_6 = happySpecReduce_1 6 happyReduction_6
happyReduction_6 (HappyAbsSyn7  happy_var_1)
	 =  HappyAbsSyn6
		 (happy_var_1
	)
happyReduction_6 _  = notHappyAtAll 

happyReduce_7 = happyReduce 4 7 happyReduction_7
happyReduction_7 (_ `HappyStk`
	(HappyAbsSyn10  happy_var_3) `HappyStk`
	_ `HappyStk`
	(HappyAbsSyn8  happy_var_1) `HappyStk`
	happyRest)
	 = HappyAbsSyn7
		 (Proc happy_var_1 happy_var_3
	) `HappyStk` happyRest

happyReduce_8 = happySpecReduce_3 8 happyReduction_8
happyReduction_8 (HappyAbsSyn9  happy_var_3)
	(HappyTerminal (TokenIdent happy_var_2))
	_
	 =  HappyAbsSyn8
		 (ProcedureHead happy_var_2 happy_var_3
	)
happyReduction_8 _ _ _  = notHappyAtAll 

happyReduce_9 = happySpecReduce_3 8 happyReduction_9
happyReduction_9 (HappyAbsSyn9  happy_var_3)
	(HappyTerminal (TokenIdent happy_var_2))
	_
	 =  HappyAbsSyn8
		 (FunctionHead happy_var_2 happy_var_3
	)
happyReduction_9 _ _ _  = notHappyAtAll 

happyReduce_10 = happySpecReduce_3 9 happyReduction_10
happyReduction_10 _
	(HappyAbsSyn12  happy_var_2)
	_
	 =  HappyAbsSyn9
		 (happy_var_2
	)
happyReduction_10 _ _ _  = notHappyAtAll 

happyReduce_11 = happySpecReduce_2 9 happyReduction_11
happyReduction_11 _
	_
	 =  HappyAbsSyn9
		 ([]
	)

happyReduce_12 = happySpecReduce_2 10 happyReduction_12
happyReduction_12 (HappyAbsSyn11  happy_var_2)
	(HappyAbsSyn13  happy_var_1)
	 =  HappyAbsSyn10
		 (Body happy_var_1 happy_var_2
	)
happyReduction_12 _ _  = notHappyAtAll 

happyReduce_13 = happySpecReduce_1 10 happyReduction_13
happyReduction_13 (HappyAbsSyn11  happy_var_1)
	 =  HappyAbsSyn10
		 (Body (VarDecl []) happy_var_1
	)
happyReduction_13 _  = notHappyAtAll 

happyReduce_14 = happySpecReduce_3 11 happyReduction_14
happyReduction_14 _
	(HappyAbsSyn14  happy_var_2)
	_
	 =  HappyAbsSyn11
		 (CompoundStatement happy_var_2
	)
happyReduction_14 _ _ _  = notHappyAtAll 

happyReduce_15 = happySpecReduce_1 12 happyReduction_15
happyReduction_15 (HappyAbsSyn21  happy_var_1)
	 =  HappyAbsSyn12
		 ([happy_var_1]
	)
happyReduction_15 _  = notHappyAtAll 

happyReduce_16 = happySpecReduce_3 12 happyReduction_16
happyReduction_16 (HappyAbsSyn12  happy_var_3)
	_
	(HappyAbsSyn21  happy_var_1)
	 =  HappyAbsSyn12
		 (happy_var_1 : happy_var_3
	)
happyReduction_16 _ _ _  = notHappyAtAll 

happyReduce_17 = happySpecReduce_3 13 happyReduction_17
happyReduction_17 _
	(HappyAbsSyn12  happy_var_2)
	_
	 =  HappyAbsSyn13
		 (VarDecl happy_var_2
	)
happyReduction_17 _ _ _  = notHappyAtAll 

happyReduce_18 = happySpecReduce_3 14 happyReduction_18
happyReduction_18 (HappyAbsSyn15  happy_var_3)
	_
	(HappyAbsSyn14  happy_var_1)
	 =  HappyAbsSyn14
		 (happy_var_1 ++ [happy_var_3]
	)
happyReduction_18 _ _ _  = notHappyAtAll 

happyReduce_19 = happySpecReduce_1 14 happyReduction_19
happyReduction_19 (HappyAbsSyn15  happy_var_1)
	 =  HappyAbsSyn14
		 ([happy_var_1]
	)
happyReduction_19 _  = notHappyAtAll 

happyReduce_20 = happySpecReduce_3 15 happyReduction_20
happyReduction_20 (HappyAbsSyn19  happy_var_3)
	_
	(HappyAbsSyn20  happy_var_1)
	 =  HappyAbsSyn15
		 (Assignment happy_var_1 happy_var_3
	)
happyReduction_20 _ _ _  = notHappyAtAll 

happyReduce_21 = happySpecReduce_2 15 happyReduction_21
happyReduction_21 (HappyAbsSyn16  happy_var_2)
	(HappyTerminal (TokenIdent happy_var_1))
	 =  HappyAbsSyn15
		 (ProcedureCall happy_var_1 happy_var_2
	)
happyReduction_21 _ _  = notHappyAtAll 

happyReduce_22 = happyReduce 4 15 happyReduction_22
happyReduction_22 ((HappyAbsSyn15  happy_var_4) `HappyStk`
	_ `HappyStk`
	(HappyAbsSyn18  happy_var_2) `HappyStk`
	_ `HappyStk`
	happyRest)
	 = HappyAbsSyn15
		 (If happy_var_2 happy_var_4
	) `HappyStk` happyRest

happyReduce_23 = happyReduce 6 15 happyReduction_23
happyReduction_23 ((HappyAbsSyn15  happy_var_6) `HappyStk`
	_ `HappyStk`
	(HappyAbsSyn15  happy_var_4) `HappyStk`
	_ `HappyStk`
	(HappyAbsSyn18  happy_var_2) `HappyStk`
	_ `HappyStk`
	happyRest)
	 = HappyAbsSyn15
		 (IfElse happy_var_2 happy_var_4 happy_var_6
	) `HappyStk` happyRest

happyReduce_24 = happyReduce 4 15 happyReduction_24
happyReduction_24 ((HappyAbsSyn15  happy_var_4) `HappyStk`
	_ `HappyStk`
	(HappyAbsSyn18  happy_var_2) `HappyStk`
	_ `HappyStk`
	happyRest)
	 = HappyAbsSyn15
		 (While happy_var_2 happy_var_4
	) `HappyStk` happyRest

happyReduce_25 = happySpecReduce_2 15 happyReduction_25
happyReduction_25 (HappyAbsSyn19  happy_var_2)
	_
	 =  HappyAbsSyn15
		 (Write happy_var_2
	)
happyReduction_25 _ _  = notHappyAtAll 

happyReduce_26 = happySpecReduce_2 15 happyReduction_26
happyReduction_26 (HappyAbsSyn19  happy_var_2)
	_
	 =  HappyAbsSyn15
		 (Read happy_var_2
	)
happyReduction_26 _ _  = notHappyAtAll 

happyReduce_27 = happySpecReduce_2 15 happyReduction_27
happyReduction_27 (HappyAbsSyn19  happy_var_2)
	_
	 =  HappyAbsSyn15
		 (Return happy_var_2
	)
happyReduction_27 _ _  = notHappyAtAll 

happyReduce_28 = happySpecReduce_1 15 happyReduction_28
happyReduction_28 (HappyAbsSyn11  happy_var_1)
	 =  HappyAbsSyn15
		 (happy_var_1
	)
happyReduction_28 _  = notHappyAtAll 

happyReduce_29 = happySpecReduce_3 16 happyReduction_29
happyReduction_29 _
	(HappyAbsSyn17  happy_var_2)
	_
	 =  HappyAbsSyn16
		 (happy_var_2
	)
happyReduction_29 _ _ _  = notHappyAtAll 

happyReduce_30 = happySpecReduce_2 16 happyReduction_30
happyReduction_30 _
	_
	 =  HappyAbsSyn16
		 ([]
	)

happyReduce_31 = happySpecReduce_1 17 happyReduction_31
happyReduction_31 (HappyAbsSyn20  happy_var_1)
	 =  HappyAbsSyn17
		 ([happy_var_1]
	)
happyReduction_31 _  = notHappyAtAll 

happyReduce_32 = happySpecReduce_3 17 happyReduction_32
happyReduction_32 (HappyAbsSyn17  happy_var_3)
	_
	(HappyAbsSyn20  happy_var_1)
	 =  HappyAbsSyn17
		 (happy_var_1 : happy_var_3
	)
happyReduction_32 _ _ _  = notHappyAtAll 

happyReduce_33 = happySpecReduce_2 18 happyReduction_33
happyReduction_33 (HappyAbsSyn19  happy_var_2)
	_
	 =  HappyAbsSyn18
		 (Odd happy_var_2
	)
happyReduction_33 _ _  = notHappyAtAll 

happyReduce_34 = happySpecReduce_3 18 happyReduction_34
happyReduction_34 (HappyAbsSyn19  happy_var_3)
	_
	(HappyAbsSyn19  happy_var_1)
	 =  HappyAbsSyn18
		 (Equal happy_var_1 happy_var_3
	)
happyReduction_34 _ _ _  = notHappyAtAll 

happyReduce_35 = happySpecReduce_3 18 happyReduction_35
happyReduction_35 (HappyAbsSyn19  happy_var_3)
	_
	(HappyAbsSyn19  happy_var_1)
	 =  HappyAbsSyn18
		 (NotEqual happy_var_1 happy_var_3
	)
happyReduction_35 _ _ _  = notHappyAtAll 

happyReduce_36 = happySpecReduce_3 18 happyReduction_36
happyReduction_36 (HappyAbsSyn19  happy_var_3)
	_
	(HappyAbsSyn19  happy_var_1)
	 =  HappyAbsSyn18
		 (LessThan happy_var_1 happy_var_3
	)
happyReduction_36 _ _ _  = notHappyAtAll 

happyReduce_37 = happySpecReduce_3 18 happyReduction_37
happyReduction_37 (HappyAbsSyn19  happy_var_3)
	_
	(HappyAbsSyn19  happy_var_1)
	 =  HappyAbsSyn18
		 (GreaterThan happy_var_1 happy_var_3
	)
happyReduction_37 _ _ _  = notHappyAtAll 

happyReduce_38 = happySpecReduce_3 18 happyReduction_38
happyReduction_38 (HappyAbsSyn19  happy_var_3)
	_
	(HappyAbsSyn19  happy_var_1)
	 =  HappyAbsSyn18
		 (LessEqual happy_var_1 happy_var_3
	)
happyReduction_38 _ _ _  = notHappyAtAll 

happyReduce_39 = happySpecReduce_3 18 happyReduction_39
happyReduction_39 (HappyAbsSyn19  happy_var_3)
	_
	(HappyAbsSyn19  happy_var_1)
	 =  HappyAbsSyn18
		 (GreaterEqual happy_var_1 happy_var_3
	)
happyReduction_39 _ _ _  = notHappyAtAll 

happyReduce_40 = happySpecReduce_3 19 happyReduction_40
happyReduction_40 (HappyAbsSyn19  happy_var_3)
	_
	(HappyAbsSyn19  happy_var_1)
	 =  HappyAbsSyn19
		 (Addition happy_var_1 happy_var_3
	)
happyReduction_40 _ _ _  = notHappyAtAll 

happyReduce_41 = happySpecReduce_3 19 happyReduction_41
happyReduction_41 (HappyAbsSyn19  happy_var_3)
	_
	(HappyAbsSyn19  happy_var_1)
	 =  HappyAbsSyn19
		 (Subtraction happy_var_1 happy_var_3
	)
happyReduction_41 _ _ _  = notHappyAtAll 

happyReduce_42 = happySpecReduce_3 19 happyReduction_42
happyReduction_42 (HappyAbsSyn19  happy_var_3)
	_
	(HappyAbsSyn19  happy_var_1)
	 =  HappyAbsSyn19
		 (Multiplication happy_var_1 happy_var_3
	)
happyReduction_42 _ _ _  = notHappyAtAll 

happyReduce_43 = happySpecReduce_3 19 happyReduction_43
happyReduction_43 (HappyAbsSyn19  happy_var_3)
	_
	(HappyAbsSyn19  happy_var_1)
	 =  HappyAbsSyn19
		 (Division happy_var_1 happy_var_3
	)
happyReduction_43 _ _ _  = notHappyAtAll 

happyReduce_44 = happySpecReduce_2 19 happyReduction_44
happyReduction_44 (HappyAbsSyn19  happy_var_2)
	_
	 =  HappyAbsSyn19
		 (Negation happy_var_2
	)
happyReduction_44 _ _  = notHappyAtAll 

happyReduce_45 = happySpecReduce_3 19 happyReduction_45
happyReduction_45 _
	(HappyAbsSyn19  happy_var_2)
	_
	 =  HappyAbsSyn19
		 (happy_var_2
	)
happyReduction_45 _ _ _  = notHappyAtAll 

happyReduce_46 = happySpecReduce_2 19 happyReduction_46
happyReduction_46 (HappyAbsSyn16  happy_var_2)
	(HappyTerminal (TokenIdent happy_var_1))
	 =  HappyAbsSyn19
		 (FunctionCall happy_var_1 happy_var_2
	)
happyReduction_46 _ _  = notHappyAtAll 

happyReduce_47 = happySpecReduce_1 19 happyReduction_47
happyReduction_47 (HappyAbsSyn20  happy_var_1)
	 =  HappyAbsSyn19
		 (happy_var_1
	)
happyReduction_47 _  = notHappyAtAll 

happyReduce_48 = happySpecReduce_1 19 happyReduction_48
happyReduction_48 (HappyTerminal (TokenInt happy_var_1))
	 =  HappyAbsSyn19
		 (Integer happy_var_1
	)
happyReduction_48 _  = notHappyAtAll 

happyReduce_49 = happyReduce 4 20 happyReduction_49
happyReduction_49 (_ `HappyStk`
	(HappyAbsSyn19  happy_var_3) `HappyStk`
	_ `HappyStk`
	(HappyTerminal (TokenIdent happy_var_1)) `HappyStk`
	happyRest)
	 = HappyAbsSyn20
		 (ArrayIdentExpr happy_var_1 happy_var_3
	) `HappyStk` happyRest

happyReduce_50 = happySpecReduce_1 20 happyReduction_50
happyReduction_50 (HappyTerminal (TokenIdent happy_var_1))
	 =  HappyAbsSyn20
		 (NonArrayIdentExpr happy_var_1
	)
happyReduction_50 _  = notHappyAtAll 

happyReduce_51 = happyReduce 4 21 happyReduction_51
happyReduction_51 (_ `HappyStk`
	(HappyTerminal (TokenInt happy_var_3)) `HappyStk`
	_ `HappyStk`
	(HappyTerminal (TokenIdent happy_var_1)) `HappyStk`
	happyRest)
	 = HappyAbsSyn21
		 (ArrayIdentDecl happy_var_1 happy_var_3
	) `HappyStk` happyRest

happyReduce_52 = happySpecReduce_1 21 happyReduction_52
happyReduction_52 (HappyTerminal (TokenIdent happy_var_1))
	 =  HappyAbsSyn21
		 (NonArrayIdentDecl happy_var_1
	)
happyReduction_52 _  = notHappyAtAll 

happyNewToken action sts stk [] =
	action 56 56 (error "reading EOF!") (HappyState action) sts stk []

happyNewToken action sts stk (tk:tks) =
	let cont i = action i i tk (HappyState action) sts stk tks in
	case tk of {
	TokenProcedure -> cont 22;
	TokenFunction -> cont 23;
	TokenBegin -> cont 24;
	TokenEnd -> cont 25;
	TokenWhile -> cont 26;
	TokenDo -> cont 27;
	TokenIf -> cont 28;
	TokenThen -> cont 29;
	TokenElse -> cont 30;
	TokenWrite -> cont 31;
	TokenRead -> cont 32;
	TokenReturn -> cont 33;
	TokenOdd -> cont 34;
	TokenVar -> cont 35;
	TokenNEQ -> cont 36;
	TokenLT -> cont 37;
	TokenGT -> cont 38;
	TokenLEQ -> cont 39;
	TokenGEQ -> cont 40;
	TokenAssign -> cont 41;
	TokenEq -> cont 42;
	TokenPlus -> cont 43;
	TokenTimes -> cont 44;
	TokenDiv -> cont 45;
	TokenOP -> cont 46;
	TokenCP -> cont 47;
	TokenSemicolon -> cont 48;
	TokenComma -> cont 49;
	TokenPeriod -> cont 50;
	TokenOB -> cont 51;
	TokenCB -> cont 52;
	TokenMinus -> cont 53;
	TokenIdent happy_dollar_dollar -> cont 54;
	TokenInt happy_dollar_dollar -> cont 55;
	_ -> happyError' (tk:tks)
	}

happyError_ tk tks = happyError' (tk:tks)

newtype HappyIdentity a = HappyIdentity a
happyIdentity = HappyIdentity
happyRunIdentity (HappyIdentity a) = a

instance Monad HappyIdentity where
    return = HappyIdentity
    (HappyIdentity p) >>= q = q p

happyThen :: () => HappyIdentity a -> (a -> HappyIdentity b) -> HappyIdentity b
happyThen = (>>=)
happyReturn :: () => a -> HappyIdentity a
happyReturn = (return)
happyThen1 m k tks = (>>=) m (\a -> k a tks)
happyReturn1 :: () => a -> b -> HappyIdentity a
happyReturn1 = \a tks -> (return) a
happyError' :: () => [Token] -> HappyIdentity a
happyError' = HappyIdentity . happyError

parser tks = happyRunIdentity happySomeParser where
  happySomeParser = happyThen (happyParse action_0 tks) (\x -> case x of {HappyAbsSyn4 z -> happyReturn z; _other -> notHappyAtAll })

happySeq = happyDontSeq

data ParseTree
     = Program [Declaration] ParseTree
     | VarDecl [IdentDecl]
     | Proc Head Body
     | ArrayIdentDecl String Int
     | NonArrayIdentDecl String
     | CompoundStatement [Statement]
     | Assignment Expression Expression
     | ProcedureCall String [Expression]
     | If Condition Statement
     | IfElse Condition Statement Statement
     | Write Expression
     | Read Expression
     | Return Expression
     | While Condition Statement
     | Odd Expression
     | Equal Expression Expression
     | NotEqual Expression Expression
     | LessThan Expression Expression
     | GreaterThan Expression Expression
     | LessEqual Expression Expression
     | GreaterEqual Expression Expression
     | Integer Int
     | NonArrayIdentExpr String
     | ArrayIdentExpr String Expression
     | Addition Expression Expression
     | Subtraction Expression Expression
     | Multiplication Expression Expression
     | Division Expression Expression
     | Negation Expression
     | FunctionCall String [Expression]
     | Body Declaration Statement
     | ProcedureHead String [IdentDecl]
     | FunctionHead String [IdentDecl]
     | Identifier String
      deriving Show

type Declaration = ParseTree
type IdentDecl = ParseTree
type Statement = ParseTree
type Condition = ParseTree
type Expression = ParseTree
type Body = ParseTree
type Head = ParseTree

children :: ParseTree -> [ParseTree]
children (Program d s) = d ++ [s]
children (VarDecl d) = d
children (Proc h b) = [h, b]
children (ArrayIdentDecl id ix) = [(Identifier id), (Integer ix)]
children (NonArrayIdentDecl id) = [(Identifier id)]
children (CompoundStatement s) = s
children (Assignment a b) = [a, b]
children (ProcedureCall id args) = (Identifier id) : args
children (If cond stmt) = [cond, stmt]
children (IfElse cond s1 s2) = [cond, s1, s2]
children (Write expr) = [expr]
children (Read expr) = [expr]
children (Return expr) = [expr]
children (While cond s) = [cond, s]
children (Odd expr) = [expr]
children (Equal e1 e2) = [e1, e2]
children (NotEqual e1 e2) = [e1, e2]
children (LessThan e1 e2) = [e1, e2]
children (GreaterThan e1 e2) = [e1, e2]
children (LessEqual e1 e2) = [e1, e2]
children (GreaterEqual e1 e2) = [e1, e2]
children (Integer i) = [(Integer i)]
children (NonArrayIdentExpr id) = [(Identifier id)]
children (ArrayIdentExpr id ix) = [(Identifier id), ix]
children (Addition e1 e2) = [e1, e2]
children (Subtraction e1 e2) = [e1, e2]
children (Multiplication e1 e2) = [e1, e2]
children (Division e1 e2) = [e1, e2]
children (Negation e) = [e]
children (FunctionCall id args) = (Identifier id) : args
children (Body decl s) = [decl, s]
children (ProcedureHead id args) = (Identifier id) : args
children (FunctionHead id args) = (Identifier id) : args

nodeName :: ParseTree -> String
nodeName (Program d s) = "Program"
nodeName (VarDecl d) = "VarDecl"
nodeName (Proc h b) = "Proc"
nodeName (ArrayIdentDecl id ix) = "ArrayIdentDecl"
nodeName (NonArrayIdentDecl id) = "NonArrayIdentDecl"
nodeName (CompoundStatement s) = "CompoundStatement"
nodeName (Assignment a b) = "Assignment"
nodeName (ProcedureCall id args) = "ProcedureCall"
nodeName (If cond stmt) = "If"
nodeName (IfElse cond s1 s2) = "IfElse"
nodeName (Write expr) = "Write"
nodeName (Read expr) = "Read"
nodeName (Return expr) = "Return"
nodeName (While cond s) = "While"
nodeName (Odd expr) = "Odd"
nodeName (Equal e1 e2) = "Equal"
nodeName (NotEqual e1 e2) = "NotEqual"
nodeName (LessThan e1 e2) = "LessThan"
nodeName (GreaterThan e1 e2) = "GreaterThan"
nodeName (LessEqual e1 e2) = "LessEqual"
nodeName (GreaterEqual e1 e2) = "GreaterEqual"
nodeName (Integer i) = "Integer"
nodeName (NonArrayIdentExpr id) = "NonArrayIdentExpr"
nodeName (ArrayIdentExpr id ix) = "ArrayIdentExpr"
nodeName (Addition e1 e2) = "Addition"
nodeName (Subtraction e1 e2) = "Subtraction"
nodeName (Multiplication e1 e2) = "Multiplication"
nodeName (Division e1 e2) = "Division"
nodeName (Negation e) = "Negation"
nodeName (FunctionCall id args) = "FunctionCall"
nodeName (Body decl s) = "Body"
nodeName (ProcedureHead id args) = "ProcedureHead"
nodeName (FunctionHead id args) = "FunctionHead"

happyError :: [Token] -> a
happyError _ = error "Parse error"

data Token
      = TokenProcedure
      | TokenFunction
      | TokenBegin
      | TokenEnd
      | TokenWhile
      | TokenDo
      | TokenIf
      | TokenThen
      | TokenElse
      | TokenWrite
      | TokenRead
      | TokenReturn
      | TokenOdd
      | TokenVar
      | TokenNEQ
      | TokenLT
      | TokenGT
      | TokenLEQ
      | TokenGEQ
      | TokenAssign
      | TokenEq
      | TokenPlus
      | TokenTimes
      | TokenDiv
      | TokenOP
      | TokenCP
      | TokenSemicolon
      | TokenComma
      | TokenPeriod
      | TokenOB
      | TokenCB
      | TokenMinus
      | TokenIdent String
      | TokenInt Int
 deriving Show

lexer :: Int -> String -> [Token]
lexer line [] = []
lexer line (c:cs) 
      | isSpace c = lexer line cs
      | isAlpha c = lexIdent line (c:cs)
      | isDigit c = lexNum line (c:cs)
lexer line ('\n':cs) = lexer (line + 1) cs
lexer line ('=':cs) = TokenEq : lexer line cs
lexer line ('+':cs) = TokenPlus : lexer line cs
lexer line ('*':cs) = TokenTimes : lexer line cs
lexer line ('/':cs) = TokenDiv : lexer line cs
lexer line ('(':cs) = TokenOP : lexer line cs
lexer line (')':cs) = TokenCP : lexer line cs
lexer line (';':cs) = TokenSemicolon : lexer line cs
lexer line (',':cs) = TokenComma : lexer line cs
lexer line ('.':cs) = TokenPeriod : lexer line cs
lexer line ('[':cs) = TokenOB : lexer line cs
lexer line (']':cs) = TokenCB : lexer line cs
lexer line ('!':('=':cs)) = TokenNEQ : lexer line cs
lexer line ('<':('=':cs)) = TokenLEQ : lexer line cs
lexer line ('<':cs) = TokenLT : lexer line cs
lexer line ('>':('=':cs)) = TokenGEQ : lexer line cs
lexer line ('>':cs) = TokenGT : lexer line cs
lexer line (':':('=':cs)) = TokenAssign : lexer line cs
lexer line ('-':('-':cs)) = lexLineComment line cs
lexer line ('/':('/':cs)) = lexComment line cs
lexer line ('-':cs) = TokenMinus : lexer line cs

lexNum line cs = TokenInt (read num) : lexer line rest
      where (num,rest) = span isDigit cs

lexIdent line cs =
   case span (\c -> (isAlphaNum c || c == '_')) cs of
      ("procedure",rest) -> TokenProcedure : lexer line rest
      ("function",rest)  -> TokenFunction : lexer line rest
      ("begin",rest)  -> TokenBegin : lexer line rest
      ("end",rest)  -> TokenEnd : lexer line rest
      ("while",rest)  -> TokenWhile : lexer line rest
      ("do",rest)  -> TokenDo : lexer line rest
      ("if",rest)  -> TokenIf : lexer line rest
      ("then",rest)  -> TokenThen : lexer line rest
      ("else",rest)  -> TokenElse : lexer line rest
      ("write",rest)  -> TokenWrite : lexer line rest
      ("read",rest)  -> TokenRead : lexer line rest
      ("return",rest)  -> TokenReturn : lexer line rest
      ("odd",rest)  -> TokenOdd : lexer line rest
      ("var",rest)  -> TokenVar : lexer line rest
      (var,rest)   -> TokenIdent var : lexer line rest

lexLineComment line ('\n':cs) = lexer (line + 1) cs
lexLineComment line (c:cs) = lexLineComment line cs

lexComment line ('*':('/':cs)) = lexer line cs
lexComment line (c:cs) = lexComment line cs

--main = getContents >>= print . parser . lexer 1
{-# LINE 1 "GenericTemplate.hs" #-}
{-# LINE 1 "<built-in>" #-}
{-# LINE 1 "<command line>" #-}
{-# LINE 1 "GenericTemplate.hs" #-}
-- $Id$

{-# LINE 16 "GenericTemplate.hs" #-}
{-# LINE 28 "GenericTemplate.hs" #-}









































infixr 9 `HappyStk`
data HappyStk a = HappyStk a (HappyStk a)

-----------------------------------------------------------------------------
-- starting the parse

happyParse start_state = happyNewToken start_state notHappyAtAll notHappyAtAll

-----------------------------------------------------------------------------
-- Accepting the parse

-- If the current token is (1), it means we've just accepted a partial
-- parse (a %partial parser).  We must ignore the saved token on the top of
-- the stack in this case.
happyAccept (1) tk st sts (_ `HappyStk` ans `HappyStk` _) =
	happyReturn1 ans
happyAccept j tk st sts (HappyStk ans _) = 
	 (happyReturn1 ans)

-----------------------------------------------------------------------------
-- Arrays only: do the next action

{-# LINE 155 "GenericTemplate.hs" #-}

-----------------------------------------------------------------------------
-- HappyState data type (not arrays)



newtype HappyState b c = HappyState
        (Int ->                    -- token number
         Int ->                    -- token number (yes, again)
         b ->                           -- token semantic value
         HappyState b c ->              -- current state
         [HappyState b c] ->            -- state stack
         c)



-----------------------------------------------------------------------------
-- Shifting a token

happyShift new_state (1) tk st sts stk@(x `HappyStk` _) =
     let i = (case x of { HappyErrorToken (i) -> i }) in
--     trace "shifting the error token" $
     new_state i i tk (HappyState (new_state)) ((st):(sts)) (stk)

happyShift new_state i tk st sts stk =
     happyNewToken new_state ((st):(sts)) ((HappyTerminal (tk))`HappyStk`stk)

-- happyReduce is specialised for the common cases.

happySpecReduce_0 i fn (1) tk st sts stk
     = happyFail (1) tk st sts stk
happySpecReduce_0 nt fn j tk st@((HappyState (action))) sts stk
     = action nt j tk st ((st):(sts)) (fn `HappyStk` stk)

happySpecReduce_1 i fn (1) tk st sts stk
     = happyFail (1) tk st sts stk
happySpecReduce_1 nt fn j tk _ sts@(((st@(HappyState (action))):(_))) (v1`HappyStk`stk')
     = let r = fn v1 in
       happySeq r (action nt j tk st sts (r `HappyStk` stk'))

happySpecReduce_2 i fn (1) tk st sts stk
     = happyFail (1) tk st sts stk
happySpecReduce_2 nt fn j tk _ ((_):(sts@(((st@(HappyState (action))):(_))))) (v1`HappyStk`v2`HappyStk`stk')
     = let r = fn v1 v2 in
       happySeq r (action nt j tk st sts (r `HappyStk` stk'))

happySpecReduce_3 i fn (1) tk st sts stk
     = happyFail (1) tk st sts stk
happySpecReduce_3 nt fn j tk _ ((_):(((_):(sts@(((st@(HappyState (action))):(_))))))) (v1`HappyStk`v2`HappyStk`v3`HappyStk`stk')
     = let r = fn v1 v2 v3 in
       happySeq r (action nt j tk st sts (r `HappyStk` stk'))

happyReduce k i fn (1) tk st sts stk
     = happyFail (1) tk st sts stk
happyReduce k nt fn j tk st sts stk
     = case happyDrop (k - ((1) :: Int)) sts of
	 sts1@(((st1@(HappyState (action))):(_))) ->
        	let r = fn stk in  -- it doesn't hurt to always seq here...
       		happyDoSeq r (action nt j tk st1 sts1 r)

happyMonadReduce k nt fn (1) tk st sts stk
     = happyFail (1) tk st sts stk
happyMonadReduce k nt fn j tk st sts stk =
        happyThen1 (fn stk) (\r -> action nt j tk st1 sts1 (r `HappyStk` drop_stk))
       where sts1@(((st1@(HappyState (action))):(_))) = happyDrop k ((st):(sts))
             drop_stk = happyDropStk k stk

happyDrop (0) l = l
happyDrop n ((_):(t)) = happyDrop (n - ((1) :: Int)) t

happyDropStk (0) l = l
happyDropStk n (x `HappyStk` xs) = happyDropStk (n - ((1)::Int)) xs

-----------------------------------------------------------------------------
-- Moving to a new state after a reduction

{-# LINE 239 "GenericTemplate.hs" #-}
happyGoto action j tk st = action j j tk (HappyState action)


-----------------------------------------------------------------------------
-- Error recovery ((1) is the error token)

-- parse error if we are in recovery and we fail again
happyFail  (1) tk old_st _ stk =
--	trace "failing" $ 
    	happyError_ tk

{-  We don't need state discarding for our restricted implementation of
    "error".  In fact, it can cause some bogus parses, so I've disabled it
    for now --SDM

-- discard a state
happyFail  (1) tk old_st (((HappyState (action))):(sts)) 
						(saved_tok `HappyStk` _ `HappyStk` stk) =
--	trace ("discarding state, depth " ++ show (length stk))  $
	action (1) (1) tk (HappyState (action)) sts ((saved_tok`HappyStk`stk))
-}

-- Enter error recovery: generate an error token,
--                       save the old token and carry on.
happyFail  i tk (HappyState (action)) sts stk =
--      trace "entering error recovery" $
	action (1) (1) tk (HappyState (action)) sts ( (HappyErrorToken (i)) `HappyStk` stk)

-- Internal happy errors:

notHappyAtAll = error "Internal Happy error\n"

-----------------------------------------------------------------------------
-- Hack to get the typechecker to accept our action functions







-----------------------------------------------------------------------------
-- Seq-ing.  If the --strict flag is given, then Happy emits 
--	happySeq = happyDoSeq
-- otherwise it emits
-- 	happySeq = happyDontSeq

happyDoSeq, happyDontSeq :: a -> b -> b
happyDoSeq   a b = a `seq` b
happyDontSeq a b = b

-----------------------------------------------------------------------------
-- Don't inline any functions from the template.  GHC has a nasty habit
-- of deciding to inline happyGoto everywhere, which increases the size of
-- the generated parser quite a bit.

{-# LINE 303 "GenericTemplate.hs" #-}
{-# NOINLINE happyShift #-}
{-# NOINLINE happySpecReduce_0 #-}
{-# NOINLINE happySpecReduce_1 #-}
{-# NOINLINE happySpecReduce_2 #-}
{-# NOINLINE happySpecReduce_3 #-}
{-# NOINLINE happyReduce #-}
{-# NOINLINE happyMonadReduce #-}
{-# NOINLINE happyGoto #-}
{-# NOINLINE happyFail #-}

-- end of Happy Template.

