diff --git a/FixCalcParser.hs b/FixCalcParser.hs new file mode 100644 index 0000000..3a46ea8 --- /dev/null +++ b/FixCalcParser.hs @@ -0,0 +1,2482 @@ +{-# OPTIONS_GHC -w #-} +{-# OPTIONS -XMagicHash -XBangPatterns -XTypeSynonymInstances -XFlexibleInstances -cpp #-} +#if __GLASGOW_HASKELL__ >= 710 +{-# OPTIONS_GHC -XPartialTypeSignatures #-} +#endif +module FixCalcParser where +import ImpAST +import ImpConfig(defaultFlags,Flags(..),Heur(..)) +import ImpFixpoint2k(bottomUp2k,bottomUp2k_gen,bottomUp_mr,topDown2k,gfp2k,subrec_z) +import ImpFixpoint2k(subrec_z_mut,subrec_gen,combSelHull,getDisjuncts,widen) +import ImpHullWiden(narrow) +import ImpFixpoint2k(fixTestBU,fixTestTD,getOneStep,getEq,pickEqFromEq) +import ImpFixpoint2k(pickGEQfromEQ,fixTestBU_Lgen,satEQfromEQ,satGEQfromEQ) +import ImpFormula(simplify,subset,difference,complement,pairwiseCheck,hull,apply,debugApply) +import Fresh +import FixCalcLexer(runP,P(..),Tk(..),lexer,getLineNum,getInput) +import MyPrelude +------------------------------------------ +import Data.List(nub,elemIndex,transpose) +import Data.Maybe(fromJust) +import Control.Monad(foldM) +import qualified Data.Array as Happy_Data_Array +import qualified Data.Bits as Bits +import qualified GHC.Exts as Happy_GHC_Exts +import Control.Applicative(Applicative(..)) +import Control.Monad (ap) + +-- parser produced by Happy Version 1.20.1.1 + +newtype HappyAbsSyn t12 t19 t20 = HappyAbsSyn HappyAny +#if __GLASGOW_HASKELL__ >= 607 +type HappyAny = Happy_GHC_Exts.Any +#else +type HappyAny = forall a . a +#endif +newtype HappyWrap4 = HappyWrap4 ([RelEnv -> FS RelEnv]) +happyIn4 :: ([RelEnv -> FS RelEnv]) -> (HappyAbsSyn t12 t19 t20) +happyIn4 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap4 x) +{-# INLINE happyIn4 #-} +happyOut4 :: (HappyAbsSyn t12 t19 t20) -> HappyWrap4 +happyOut4 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut4 #-} +newtype HappyWrap5 = HappyWrap5 (RelEnv -> FS RelEnv) +happyIn5 :: (RelEnv -> FS RelEnv) -> (HappyAbsSyn t12 t19 t20) +happyIn5 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap5 x) +{-# INLINE happyIn5 #-} +happyOut5 :: (HappyAbsSyn t12 t19 t20) -> HappyWrap5 +happyOut5 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut5 #-} +newtype HappyWrap6 = HappyWrap6 (RelEnv -> FS [Value]) +happyIn6 :: (RelEnv -> FS [Value]) -> (HappyAbsSyn t12 t19 t20) +happyIn6 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap6 x) +{-# INLINE happyIn6 #-} +happyOut6 :: (HappyAbsSyn t12 t19 t20) -> HappyWrap6 +happyOut6 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut6 #-} +newtype HappyWrap7 = HappyWrap7 (RelEnv -> FS RelEnv) +happyIn7 :: (RelEnv -> FS RelEnv) -> (HappyAbsSyn t12 t19 t20) +happyIn7 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap7 x) +{-# INLINE happyIn7 #-} +happyOut7 :: (HappyAbsSyn t12 t19 t20) -> HappyWrap7 +happyOut7 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut7 #-} +newtype HappyWrap8 = HappyWrap8 (RelEnv -> FS Value) +happyIn8 :: (RelEnv -> FS Value) -> (HappyAbsSyn t12 t19 t20) +happyIn8 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap8 x) +{-# INLINE happyIn8 #-} +happyOut8 :: (HappyAbsSyn t12 t19 t20) -> HappyWrap8 +happyOut8 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut8 #-} +newtype HappyWrap9 = HappyWrap9 (RelEnv -> [RecPost]) +happyIn9 :: (RelEnv -> [RecPost]) -> (HappyAbsSyn t12 t19 t20) +happyIn9 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap9 x) +{-# INLINE happyIn9 #-} +happyOut9 :: (HappyAbsSyn t12 t19 t20) -> HappyWrap9 +happyOut9 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut9 #-} +newtype HappyWrap10 = HappyWrap10 ([Lit]) +happyIn10 :: ([Lit]) -> (HappyAbsSyn t12 t19 t20) +happyIn10 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap10 x) +{-# INLINE happyIn10 #-} +happyOut10 :: (HappyAbsSyn t12 t19 t20) -> HappyWrap10 +happyOut10 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut10 #-} +newtype HappyWrap11 = HappyWrap11 ([Int]) +happyIn11 :: ([Int]) -> (HappyAbsSyn t12 t19 t20) +happyIn11 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap11 x) +{-# INLINE happyIn11 #-} +happyOut11 :: (HappyAbsSyn t12 t19 t20) -> HappyWrap11 +happyOut11 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut11 #-} +happyIn12 :: t12 -> (HappyAbsSyn t12 t19 t20) +happyIn12 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn12 #-} +happyOut12 :: (HappyAbsSyn t12 t19 t20) -> t12 +happyOut12 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut12 #-} +newtype HappyWrap13 = HappyWrap13 (Formula) +happyIn13 :: (Formula) -> (HappyAbsSyn t12 t19 t20) +happyIn13 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap13 x) +{-# INLINE happyIn13 #-} +happyOut13 :: (HappyAbsSyn t12 t19 t20) -> HappyWrap13 +happyOut13 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut13 #-} +newtype HappyWrap14 = HappyWrap14 ((Formula,[[Update]])) +happyIn14 :: ((Formula,[[Update]])) -> (HappyAbsSyn t12 t19 t20) +happyIn14 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap14 x) +{-# INLINE happyIn14 #-} +happyOut14 :: (HappyAbsSyn t12 t19 t20) -> HappyWrap14 +happyOut14 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut14 #-} +newtype HappyWrap15 = HappyWrap15 ((Formula,[[Update]])) +happyIn15 :: ((Formula,[[Update]])) -> (HappyAbsSyn t12 t19 t20) +happyIn15 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap15 x) +{-# INLINE happyIn15 #-} +happyOut15 :: (HappyAbsSyn t12 t19 t20) -> HappyWrap15 +happyOut15 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut15 #-} +newtype HappyWrap16 = HappyWrap16 (Tk) +happyIn16 :: (Tk) -> (HappyAbsSyn t12 t19 t20) +happyIn16 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap16 x) +{-# INLINE happyIn16 #-} +happyOut16 :: (HappyAbsSyn t12 t19 t20) -> HappyWrap16 +happyOut16 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut16 #-} +newtype HappyWrap17 = HappyWrap17 ([[Update]]) +happyIn17 :: ([[Update]]) -> (HappyAbsSyn t12 t19 t20) +happyIn17 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap17 x) +{-# INLINE happyIn17 #-} +happyOut17 :: (HappyAbsSyn t12 t19 t20) -> HappyWrap17 +happyOut17 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut17 #-} +newtype HappyWrap18 = HappyWrap18 ([Update]) +happyIn18 :: ([Update]) -> (HappyAbsSyn t12 t19 t20) +happyIn18 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap18 x) +{-# INLINE happyIn18 #-} +happyOut18 :: (HappyAbsSyn t12 t19 t20) -> HappyWrap18 +happyOut18 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut18 #-} +happyIn19 :: t19 -> (HappyAbsSyn t12 t19 t20) +happyIn19 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn19 #-} +happyOut19 :: (HappyAbsSyn t12 t19 t20) -> t19 +happyOut19 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut19 #-} +happyIn20 :: t20 -> (HappyAbsSyn t12 t19 t20) +happyIn20 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn20 #-} +happyOut20 :: (HappyAbsSyn t12 t19 t20) -> t20 +happyOut20 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut20 #-} +newtype HappyWrap21 = HappyWrap21 (QSizeVar) +happyIn21 :: (QSizeVar) -> (HappyAbsSyn t12 t19 t20) +happyIn21 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap21 x) +{-# INLINE happyIn21 #-} +happyOut21 :: (HappyAbsSyn t12 t19 t20) -> HappyWrap21 +happyOut21 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut21 #-} +happyInTok :: (Tk) -> (HappyAbsSyn t12 t19 t20) +happyInTok x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyInTok #-} +happyOutTok :: (HappyAbsSyn t12 t19 t20) -> (Tk) +happyOutTok x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOutTok #-} + + +happyExpList :: HappyAddr +happyExpList = HappyA# "\x00\x00\x20\x80\x02\x00\xdc\xbf\x7f\x00\x00\x20\x80\x02\x00\xdc\xbf\x7f\x00\x00\x20\x80\x02\x00\xdc\xbf\x7f\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x68\x00\x00\x60\x40\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\xe0\x8d\x00\xe0\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x20\x80\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x20\x80\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf0\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf8\x01\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x10\x03\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x60\x00\x00\x00\x00\x00\x00\x00\x00\xe0\x0d\x00\xe0\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x20\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x02\x00\xd8\xbd\x79\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x40\x40\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\xe0\x0d\x00\xe0\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x03\x00\x00\x00\x00\x00\x10\x00\x06\x00\x00\x00\x00\x00\x00\x16\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x60\x0c\x00\x00\x00\x00\x00\x00\x00\x60\x0c\x00\x00\x00\x00\x00\x00\x00\x60\x0c\x00\x00\x00\x00\x00\x00\x00\x60\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x60\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe0\x0d\x00\xe0\x00\x00\x00\x00\x00\xe0\x0d\x00\xe0\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x60\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x10\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x08\x00\x00\x00\x00\x00\x00\x10\x00\x06\x00\x00\x00\x00\x00\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0c\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\xe0\x0d\x00\xe0\x00\x00\x00\x00\x00\xe0\x0d\x00\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\xe0\x0d\x00\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x06\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x06\x00\x00\x00\x00\x00\x00\x10\x00\x06\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\xe0\x0d\x00\xe0\x00\x00\x00\x00\x00\x00\x00\x04\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"# + +{-# NOINLINE happyExpListPerState #-} +happyExpListPerState st = + token_strs_expected + where token_strs = ["error","%dummy","%start_parseCalc","LCommand","Command","ParseFormula1","ParseFormula2","ParseFormula","Llit","Llit2","LInt","Formula","QFormula","LBExpr","BExpr","RelOp","LAExpr","AExpr","LPorUSizeVar","LPorUSizeVar1","PorUSizeVar","lit","intNum","true","false","'+'","'-'","'('","')'","';'","':='","'['","']'","'{'","'}'","','","'='","'<'","'>'","'>='","'<='","'&&'","'||'","':'","'.'","'!'","exists","forall","prime","rec","apply","widen","narrow","subset","complement","bottomup","bottomup_mr","bottomup_gen","topdown","gfp","selhull","manualhull","intersection","pairwisecheck","hull","fixtestpost","fixtestinv","pickEqFromEq","pickGEqFromEq","SatEQfromEQ","SatGEQfromEQ","%eof"] + bit_start = st Prelude.* 72 + bit_end = (st Prelude.+ 1) Prelude.* 72 + read_bit = readArrayBit happyExpList + bits = Prelude.map read_bit [bit_start..bit_end Prelude.- 1] + bits_indexed = Prelude.zip bits [0..71] + token_strs_expected = Prelude.concatMap f bits_indexed + f (Prelude.False, _) = [] + f (Prelude.True, nr) = [token_strs Prelude.!! nr] + +happyActOffsets :: HappyAddr +happyActOffsets = HappyA# "\x01\x00\x01\x00\x01\x00\x06\x00\x0a\x00\x22\x00\x41\x00\x09\x00\x02\x00\x17\x00\x38\x00\x3c\x00\x57\x00\x4d\x00\x71\x00\x85\x00\x8f\x00\x99\x00\xa3\x00\xa9\x00\x6e\x00\xc7\x00\xb3\x00\xc6\x00\xf0\x00\x07\x01\x08\x01\x09\x01\xca\x00\xc9\x00\xdf\x00\xff\x00\x10\x01\x11\x01\x0a\x01\x00\x00\x00\x00\x12\x01\x4b\x00\x0b\x01\x13\x01\x0c\x01\x17\x01\x18\x01\x00\x00\x19\x01\x56\x00\x14\x01\x47\x00\x00\x00\xd3\x00\x00\x00\xc8\x00\xd9\x00\x00\x00\x42\x00\x1a\x01\x00\x00\x00\x00\x80\x00\x4c\x00\x1a\x01\x15\x01\x16\x01\x1b\x01\x1c\x01\x0f\x01\x69\x00\x00\x00\x15\x00\x1f\x01\x20\x01\x22\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1d\x01\x1e\x01\x2f\x00\x23\x01\x24\x01\x25\x01\x26\x01\x27\x01\x28\x01\x21\x01\x2f\x01\x2f\x01\x29\x01\x30\x01\x30\x01\x4c\x00\x2a\x01\x2b\x01\x00\x00\xc5\x00\xff\xff\xf9\x00\x00\x00\x31\x01\x00\x00\x31\x01\x33\x01\x00\x00\x00\x00\xcf\x00\xcf\x00\xcf\x00\xcf\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xcf\x00\x00\x00\x4c\x00\x4c\x00\x34\x01\x2c\x01\x36\x01\x2d\x01\x2e\x01\x32\x01\x37\x01\x35\x01\x38\x01\x39\x01\x3d\x01\x3a\x01\x3e\x01\x3b\x01\x3f\x01\x43\x01\x44\x01\x45\x01\x00\x00\x00\x00\x00\x00\x00\x00\x41\x01\x42\x01\x46\x01\x47\x01\x4d\x01\x48\x01\x49\x01\x4e\x01\x4a\x01\x51\x01\x53\x01\x56\x01\x4f\x01\x58\x01\x50\x01\x4b\x01\x00\x00\x52\x01\xcf\x00\x03\x01\x52\x01\x00\x00\x00\x00\x97\x00\x6f\x00\x00\x00\x00\x00\x00\x00\x59\x01\xfb\xff\x03\x00\x2b\x00\x55\x00\xf2\xff\x00\x00\x57\x01\x00\x00\x5c\x01\x5d\x01\x5e\x01\x61\x01\x63\x01\x64\x01\x00\x00\x00\x00\x5f\x01\x60\x01\x62\x01\x65\x01\x5a\x01\x3c\x01\x67\x01\x68\x01\x4c\x00\x4c\x00\x00\x00\x54\x01\x4c\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf9\x00\x66\x01\x69\x01\x6a\x01\x6b\x01\x6c\x01\x6e\x01\x6d\x01\x6f\x01\x70\x01\x71\x01\x72\x01\x73\x01\x75\x01\x74\x01\x77\x01\x7b\x01\x7a\x01\x7c\x01\x78\x01\x7e\x01\x85\x01\x7f\x01\x00\x00\x8a\x01\x81\x01\x00\x00\x8c\x01\x8d\x01\x84\x01\x8f\x01\x86\x01\xb6\x00\x87\x01\x53\x00\x58\x00\x88\x01\x89\x01\x00\x00\x8b\x01\x00\x00\x00\x00\x00\x00\x00\x00\x94\x01\x00\x00\x00\x00\x96\x01\x00\x00\x97\x01\x91\x01\x99\x01\x93\x01\x95\x01\x9a\x01\x98\x01\x9c\x01\x9b\x01\x9d\x01\x9d\x01\x9e\x01\xa0\x01\x00\x00\x9f\x01\x00\x00\x00\x00\xa1\x01\x00\x00\xa2\x01\x00\x00\xa3\x01\x00\x00\x00\x00\xa4\x01\x00\x00\xa5\x01\xa6\x01\xa7\x01\xac\x01\x40\x01\xad\x01\xa8\x01\xa9\x01\xaa\x01\xab\x01\xae\x01\xb2\x01\xb1\x01\xbc\x01\xbd\x01\xb4\x01\x00\x00\x90\x01\x00\x00\xb5\x01\xc0\x01\xba\x01\xbb\x01\xc3\x01\x00\x00\xb9\x01\x00\x00\x00\x00\xbe\x01\xc5\x01\xbf\x01\xc1\x01\xc4\x01\x00\x00\x00\x00\x0d\x01\x4c\x00\xb9\x00\x00\x00\x00\x00"# + +happyGotoOffsets :: HappyAddr +happyGotoOffsets = HappyA# "\xe8\x00\xf8\x00\xed\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc2\x01\x68\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc6\x01\x00\x00\xc7\x01\x00\x00\x00\x00\x00\x00\x5b\x01\x00\x00\x00\x00\xb6\x01\x72\x00\xc3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x79\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc8\x01\xc9\x01\x00\x00\xad\x00\xfa\x00\x7c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xca\x01\x00\x00\xfc\x00\x00\x00\x00\x00\x00\x00\x7a\x00\x84\x00\xe5\x00\x8e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe7\x00\x00\x00\x86\x00\x90\x00\xcb\x01\x00\x00\xce\x01\x00\x00\x00\x00\x00\x00\xd0\x01\x00\x00\xd1\x01\x00\x00\xd2\x01\x00\x00\xd3\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x98\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xcc\x01\x00\x00\x00\x00\x00\x00\x00\x00\xd5\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9a\x00\xa4\x00\x00\x00\x00\x00\xae\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd7\x01\x00\x00\x00\x00\x00\x00\xd8\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd4\x01\x00\x00\x00\x00\xf3\x00\x00\x00\xda\x01\x00\x00\xdb\x01\x00\x00\x00\x00\xdc\x01\x00\x00\xdd\x01\x00\x00\xde\x01\xdf\x01\x00\x00\xe1\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe2\x01\x00\x00\x00\x00\xe3\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf6\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb8\x00\x00\x00\x00\x00\x00\x00"# + +happyAdjustOffset :: Happy_GHC_Exts.Int# -> Happy_GHC_Exts.Int# +happyAdjustOffset off = off + +happyDefActions :: HappyAddr +happyDefActions = HappyA# "\xfd\xff\x00\x00\xfd\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd7\xff\xd6\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdd\xff\x00\x00\x00\x00\x00\x00\x00\x00\xcf\xff\xc9\xff\xc5\xff\x00\x00\xbb\xff\xb3\xff\xad\xff\xb5\xff\xcb\xff\xca\xff\x00\x00\x00\x00\xb1\xff\x00\x00\x00\x00\x00\x00\x00\x00\xd3\xff\x00\x00\xf4\xff\x00\x00\x00\x00\x00\x00\x00\x00\xf8\xff\xfb\xff\xf9\xff\xfe\xff\xd8\xff\xde\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb0\xff\xae\xff\xad\xff\x00\x00\xbb\xff\xb2\xff\xb4\xff\xb7\xff\x00\x00\x00\x00\xac\xff\xab\xff\x00\x00\x00\x00\x00\x00\x00\x00\xc1\xff\xbd\xff\xbf\xff\xc0\xff\xbe\xff\x00\x00\xe7\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe8\xff\xea\xff\xec\xff\xee\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd5\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xcc\xff\xcd\xff\xc3\xff\x00\x00\xbc\xff\xc2\xff\xb9\xff\xba\xff\xaa\xff\x00\x00\xb6\xff\xb8\xff\xce\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd2\xff\x00\x00\xe4\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfc\xff\xf5\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc6\xff\x00\x00\x00\x00\xaf\xff\xc4\xff\xa9\xff\xa8\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd1\xff\x00\x00\x00\x00\x00\x00\xd4\xff\x00\x00\x00\x00\xe1\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfa\xff\x00\x00\xe9\xff\xeb\xff\xed\xff\xef\xff\x00\x00\xc7\xff\xc8\xff\xb1\xff\xe6\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf6\xff\x00\x00\xdb\xff\xd0\xff\x00\x00\xdc\xff\x00\x00\xe0\xff\x00\x00\xe2\xff\xda\xff\x00\x00\xd9\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf2\xff\x00\x00\xe3\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf7\xff\x00\x00\xdf\xff\xf3\xff\x00\x00\xb1\xff\x00\x00\x00\x00\x00\x00\xf1\xff\xf0\xff\x00\x00\x00\x00\x00\x00\xe5\xff"# + +happyCheck :: HappyAddr +happyCheck = HappyA# "\xff\xff\x06\x00\x01\x00\x01\x00\x02\x00\x03\x00\x04\x00\x08\x00\x06\x00\x07\x00\x01\x00\x08\x00\x0b\x00\x0b\x00\x0d\x00\x09\x00\x1e\x00\x1f\x00\x17\x00\x09\x00\x15\x00\x16\x00\x01\x00\x25\x00\x15\x00\x16\x00\x28\x00\x19\x00\x1a\x00\x1b\x00\x07\x00\x1e\x00\x1f\x00\x20\x00\x0d\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x09\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x1f\x00\x20\x00\x07\x00\x22\x00\x23\x00\x24\x00\x0f\x00\x26\x00\x27\x00\x28\x00\x29\x00\x07\x00\x2b\x00\x2c\x00\x17\x00\x07\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x07\x00\x07\x00\x09\x00\x0a\x00\x01\x00\x01\x00\x02\x00\x03\x00\x04\x00\x22\x00\x06\x00\x07\x00\x07\x00\x0e\x00\x0b\x00\x01\x00\x01\x00\x2a\x00\x18\x00\x08\x00\x15\x00\x16\x00\x1c\x00\x1d\x00\x08\x00\x0b\x00\x21\x00\x22\x00\x0f\x00\x19\x00\x1a\x00\x1b\x00\x15\x00\x16\x00\x01\x00\x2a\x00\x17\x00\x15\x00\x16\x00\x01\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0b\x00\x0d\x00\x0e\x00\x08\x00\x07\x00\x11\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0f\x00\x0d\x00\x0e\x00\x01\x00\x02\x00\x11\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0e\x00\x0d\x00\x0e\x00\x11\x00\x07\x00\x11\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0e\x00\x0d\x00\x0e\x00\x11\x00\x07\x00\x11\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0e\x00\x0d\x00\x0e\x00\x11\x00\x07\x00\x11\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0e\x00\x0d\x00\x0e\x00\x11\x00\x07\x00\x11\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x07\x00\x0d\x00\x0e\x00\x1c\x00\x1d\x00\x11\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x07\x00\x0d\x00\x0e\x00\x10\x00\x11\x00\x11\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0e\x00\x0d\x00\x0e\x00\x0e\x00\x01\x00\x11\x00\x01\x00\x15\x00\x16\x00\x07\x00\x15\x00\x16\x00\x01\x00\x02\x00\x0f\x00\x10\x00\x11\x00\x06\x00\x07\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x18\x00\x05\x00\x06\x00\x01\x00\x1c\x00\x1d\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x0d\x00\x0e\x00\x0d\x00\x0e\x00\x11\x00\x07\x00\x11\x00\x01\x00\x02\x00\x03\x00\x04\x00\x33\x00\x05\x00\x06\x00\x01\x00\x08\x00\x0f\x00\x10\x00\x11\x00\x0f\x00\x10\x00\x11\x00\x05\x00\x06\x00\x10\x00\x11\x00\x10\x00\x11\x00\x07\x00\x07\x00\x07\x00\x01\x00\x01\x00\x01\x00\x01\x00\x0b\x00\x0b\x00\x0b\x00\x01\x00\x01\x00\x01\x00\x01\x00\x07\x00\x07\x00\x0f\x00\x0b\x00\x01\x00\x01\x00\x07\x00\x01\x00\x17\x00\xff\xff\x09\x00\x09\x00\x0c\x00\x08\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x01\x00\x01\x00\x01\x00\x0a\x00\x01\x00\x01\x00\x0c\x00\x01\x00\x01\x00\x01\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x01\x00\x01\x00\xff\xff\x0f\x00\x01\x00\xff\xff\x0f\x00\x09\x00\x06\x00\x08\x00\x0f\x00\x0f\x00\x0f\x00\x08\x00\x08\x00\x08\x00\x0c\x00\x02\x00\x02\x00\x0b\x00\x01\x00\x0c\x00\x0c\x00\x02\x00\x0c\x00\x01\x00\x0f\x00\x01\x00\x01\x00\x0c\x00\x0c\x00\x01\x00\x01\x00\x01\x00\x15\x00\x0f\x00\x01\x00\x0c\x00\x01\x00\x01\x00\x12\x00\x08\x00\x08\x00\x0f\x00\x08\x00\xff\xff\x11\x00\x08\x00\x07\x00\x07\x00\xff\xff\x01\x00\xff\xff\xff\xff\xff\xff\x0f\x00\x08\x00\x02\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x04\x00\x0f\x00\x08\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x09\x00\x0b\x00\x01\x00\x0f\x00\x0c\x00\x0b\x00\x0b\x00\x01\x00\x0b\x00\x01\x00\x01\x00\x0b\x00\x01\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x01\x00\x0b\x00\x01\x00\x01\x00\x08\x00\x01\x00\x08\x00\x02\x00\x08\x00\x02\x00\x02\x00\x08\x00\x01\x00\x12\x00\x08\x00\xff\xff\xff\xff\x08\x00\xff\xff\xff\xff\xff\xff\xff\xff\x0c\x00\xff\xff\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x08\x00\x08\x00\x08\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x09\x00\x0b\x00\x01\x00\x01\x00\x0b\x00\x0b\x00\x01\x00\x08\x00\x08\x00\x01\x00\x0c\x00\x01\x00\x11\x00\x06\x00\x08\x00\x0c\x00\x0c\x00\x08\x00\xff\xff\x06\x00\x06\x00\xff\xff\x06\x00\x0c\x00\x0c\x00\x06\x00\x05\x00\x05\x00\x02\x00\x06\x00\x06\x00\x06\x00\x11\x00\x05\x00\x11\x00\xff\xff\x07\x00\x06\x00\x06\x00\xff\xff\x07\x00\x07\x00\x07\x00\x07\x00\x06\x00\x06\x00\x06\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"# + +happyTable :: HappyAddr +happyTable = HappyA# "\x00\x00\xc8\x00\x07\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\xab\x00\x3c\x00\x3d\x00\x43\x00\xc7\x00\x08\x00\x3e\x00\x09\x00\x4c\x00\x0a\x00\xc3\x00\xc9\x00\x4b\x00\x78\x00\x79\x00\x52\x00\x10\x00\x78\x00\x79\x00\xc4\x00\x3f\x00\x40\x00\x41\x00\x30\x00\x0a\x00\x0b\x00\x0c\x00\x09\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x4a\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x53\x00\x0c\x00\x44\x00\x0d\x00\x0e\x00\x0f\x00\xac\x00\x11\x00\x12\x00\x54\x00\x14\x00\x2f\x00\x15\x00\x16\x00\xc6\x00\x2e\x00\x55\x00\x56\x00\x57\x00\x58\x00\x44\x00\x69\x00\x45\x00\x46\x00\x83\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x48\x00\x3c\x00\x3d\x00\x2c\x00\x77\x00\x84\x00\x7b\x00\x2d\x00\x49\x00\x6a\x00\xfc\x00\x78\x00\x79\x00\x6b\x00\x6c\x00\xfb\x00\x7c\x00\x47\x00\x48\x00\xac\x00\x3f\x00\x40\x00\x41\x00\x78\x00\x79\x00\x59\x00\x49\x00\xc5\x00\x78\x00\x79\x00\x25\x00\x30\x00\x31\x00\x32\x00\x33\x00\x5a\x00\x34\x00\x35\x00\xcb\x00\x2b\x00\x36\x00\x63\x00\x31\x00\x32\x00\x33\x00\xac\x00\x34\x00\x64\x00\x63\x00\x67\x00\x36\x00\xad\x00\x31\x00\x32\x00\x33\x00\xa5\x00\x34\x00\x35\x00\x36\x00\x2a\x00\x36\x00\x9f\x00\x31\x00\x32\x00\x33\x00\xa4\x00\x34\x00\x35\x00\x36\x00\x29\x00\x36\x00\x9e\x00\x31\x00\x32\x00\x33\x00\xa2\x00\x34\x00\x35\x00\x36\x00\x28\x00\x36\x00\xf0\x00\x31\x00\x32\x00\x33\x00\xcd\x00\x34\x00\x35\x00\x36\x00\x27\x00\x36\x00\xef\x00\x31\x00\x32\x00\x33\x00\x26\x00\x34\x00\x35\x00\xcc\x00\xcd\x00\x36\x00\xed\x00\x31\x00\x32\x00\x33\x00\x23\x00\x34\x00\x35\x00\xaf\x00\x61\x00\x36\x00\x3d\x01\x31\x00\x32\x00\x33\x00\xfe\x00\x34\x00\x35\x00\x3f\x01\x24\x00\x36\x00\x8b\x00\x78\x00\x79\x00\x22\x00\x78\x00\x79\x00\x63\x00\x39\x00\x5f\x00\x60\x00\x61\x00\x3c\x00\xa2\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x6a\x00\x6d\x00\x6e\x00\x8a\x00\x6b\x00\x6c\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x1c\x00\x02\x00\x03\x00\x04\x00\x05\x00\x4c\x00\x02\x00\x03\x00\x04\x00\x05\x00\xa3\x00\x35\x00\xa0\x00\x35\x00\x36\x00\x21\x00\x36\x00\x02\x00\x03\x00\x04\x00\x05\x00\xff\xff\x6d\x00\x6e\x00\x89\x00\xaa\x00\x19\x01\x60\x00\x61\x00\x36\x01\x60\x00\x61\x00\x6d\x00\x6e\x00\xae\x00\x61\x00\xa7\x00\x61\x00\x20\x00\x1f\x00\x1e\x00\x88\x00\x87\x00\x85\x00\x81\x00\x86\x00\x82\x00\x80\x00\x7f\x00\x7e\x00\x7d\x00\x63\x00\x5f\x00\x5e\x00\x5b\x00\x7a\x00\x50\x00\x4f\x00\x5d\x00\x4e\x00\x3d\x01\x00\x00\xbc\x00\xbb\x00\x5c\x00\xb4\x00\xba\x00\xb9\x00\xb8\x00\xb7\x00\xb6\x00\xb5\x00\x43\x00\x63\x00\x63\x00\xb1\x00\xa7\x00\x43\x00\xad\x00\x43\x00\x96\x00\x96\x00\xac\x00\x9d\x00\x9b\x00\x9a\x00\x43\x00\x43\x00\x00\x00\x99\x00\xdd\x00\x00\x00\x97\x00\xf4\x00\x2a\x01\x8f\x00\x94\x00\x92\x00\x90\x00\x8e\x00\x8d\x00\x8c\x00\xdc\x00\xd9\x00\xd6\x00\xdb\x00\xd4\x00\xda\x00\xd8\x00\xd3\x00\xd5\x00\xd2\x00\xd7\x00\xd0\x00\x63\x00\xd1\x00\xcf\x00\xc0\x00\xbf\x00\xbe\x00\x78\x00\x70\x00\xbd\x00\xc1\x00\x83\x00\x7b\x00\xef\x00\xf9\x00\xf8\x00\xf5\x00\xf7\x00\x00\x00\x67\x00\xf6\x00\xf3\x00\xf2\x00\x00\x00\x96\x00\x00\x00\x00\x00\x00\x00\xed\x00\xe8\x00\xe1\x00\xec\x00\xeb\x00\xea\x00\xe9\x00\xe7\x00\x50\x00\xe6\x00\xde\x00\xe4\x00\xe3\x00\xe2\x00\xdf\x00\x0c\x01\x0b\x01\x07\x01\x09\x01\x0a\x01\x08\x01\x06\x01\x05\x01\x04\x01\x03\x01\x02\x01\x01\x01\x00\x01\xff\x00\xfd\x00\x84\x00\x7c\x00\x43\x00\xfa\x00\x63\x00\x43\x00\x18\x01\x43\x00\x16\x01\xe1\x00\x15\x01\xe1\x00\xe1\x00\x13\x01\x43\x00\x2c\x01\x11\x01\x00\x00\x00\x00\x0e\x01\x00\x00\x00\x00\x00\x00\x00\x00\x23\x01\x00\x00\x22\x01\x21\x01\x20\x01\x1f\x01\x1e\x01\x1d\x01\x1c\x01\x2b\x01\x29\x01\x24\x01\x28\x01\x27\x01\x26\x01\x25\x01\x31\x01\x30\x01\x2f\x01\x2e\x01\x2d\x01\x36\x01\x43\x00\x34\x01\x33\x01\x43\x00\x39\x01\x63\x00\x65\x00\x41\x00\x3b\x01\x38\x01\x3c\x01\x3a\x01\x00\x00\xb2\x00\xb1\x00\x00\x00\x9d\x00\x75\x00\x6e\x00\x9b\x00\x97\x00\x94\x00\xc1\x00\x92\x00\x90\x00\x1a\x01\xa8\x00\xe4\x00\xc9\x00\x00\x00\xdf\x00\x18\x01\x16\x01\x00\x00\x13\x01\x11\x01\x0f\x01\x0e\x01\x0c\x01\x34\x01\x31\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"# + +happyReduceArr = Happy_Data_Array.array (1, 87) [ + (1 , happyReduce_1), + (2 , happyReduce_2), + (3 , happyReduce_3), + (4 , happyReduce_4), + (5 , happyReduce_5), + (6 , happyReduce_6), + (7 , happyReduce_7), + (8 , happyReduce_8), + (9 , happyReduce_9), + (10 , happyReduce_10), + (11 , happyReduce_11), + (12 , happyReduce_12), + (13 , happyReduce_13), + (14 , happyReduce_14), + (15 , happyReduce_15), + (16 , happyReduce_16), + (17 , happyReduce_17), + (18 , happyReduce_18), + (19 , happyReduce_19), + (20 , happyReduce_20), + (21 , happyReduce_21), + (22 , happyReduce_22), + (23 , happyReduce_23), + (24 , happyReduce_24), + (25 , happyReduce_25), + (26 , happyReduce_26), + (27 , happyReduce_27), + (28 , happyReduce_28), + (29 , happyReduce_29), + (30 , happyReduce_30), + (31 , happyReduce_31), + (32 , happyReduce_32), + (33 , happyReduce_33), + (34 , happyReduce_34), + (35 , happyReduce_35), + (36 , happyReduce_36), + (37 , happyReduce_37), + (38 , happyReduce_38), + (39 , happyReduce_39), + (40 , happyReduce_40), + (41 , happyReduce_41), + (42 , happyReduce_42), + (43 , happyReduce_43), + (44 , happyReduce_44), + (45 , happyReduce_45), + (46 , happyReduce_46), + (47 , happyReduce_47), + (48 , happyReduce_48), + (49 , happyReduce_49), + (50 , happyReduce_50), + (51 , happyReduce_51), + (52 , happyReduce_52), + (53 , happyReduce_53), + (54 , happyReduce_54), + (55 , happyReduce_55), + (56 , happyReduce_56), + (57 , happyReduce_57), + (58 , happyReduce_58), + (59 , happyReduce_59), + (60 , happyReduce_60), + (61 , happyReduce_61), + (62 , happyReduce_62), + (63 , happyReduce_63), + (64 , happyReduce_64), + (65 , happyReduce_65), + (66 , happyReduce_66), + (67 , happyReduce_67), + (68 , happyReduce_68), + (69 , happyReduce_69), + (70 , happyReduce_70), + (71 , happyReduce_71), + (72 , happyReduce_72), + (73 , happyReduce_73), + (74 , happyReduce_74), + (75 , happyReduce_75), + (76 , happyReduce_76), + (77 , happyReduce_77), + (78 , happyReduce_78), + (79 , happyReduce_79), + (80 , happyReduce_80), + (81 , happyReduce_81), + (82 , happyReduce_82), + (83 , happyReduce_83), + (84 , happyReduce_84), + (85 , happyReduce_85), + (86 , happyReduce_86), + (87 , happyReduce_87) + ] + +happy_n_terms = 52 :: Prelude.Int +happy_n_nonterms = 18 :: Prelude.Int + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_1 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _) -> P (HappyAbsSyn _ _ _) +#endif +happyReduce_1 = happySpecReduce_2 0# happyReduction_1 +happyReduction_1 happy_x_2 + happy_x_1 + = case happyOut5 happy_x_1 of { (HappyWrap5 happy_var_1) -> + case happyOut4 happy_x_2 of { (HappyWrap4 happy_var_2) -> + happyIn4 + (happy_var_1:happy_var_2 + )}} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_2 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _) -> P (HappyAbsSyn _ _ _) +#endif +happyReduce_2 = happySpecReduce_0 0# happyReduction_2 +happyReduction_2 = happyIn4 + ([] + ) + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_3 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _) -> P (HappyAbsSyn _ _ _) +#endif +happyReduce_3 = happyReduce 4# 1# happyReduction_3 +happyReduction_3 (happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOutTok happy_x_1 of { (TkAlphaNum happy_var_1) -> + case happyOut8 happy_x_3 of { (HappyWrap8 happy_var_3) -> + happyIn5 + (\env -> putStrNoLnFSOpt ("# " ++ happy_var_1 ++ ":=") >> + happy_var_3 env >>= \rhs -> + putStrFS_debug ("# " ++ happy_var_1 ++ ":=" )>> + case rhs of { + R (RecPost _ f triple) -> + return (R (RecPost happy_var_1 f triple)); + F f -> + simplify f >>= \sf -> + return (F sf); + QF (qv,f) -> + simplify f >>= \sf -> + return (QF (qv,sf)) + } >>= \renamedRHS -> + putStrFS_debug ("#bottomup " ++ happy_var_1 ++ ":=") >> + return (extendRelEnv env (happy_var_1,renamedRHS)) + ) `HappyStk` happyRest}} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_4 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _) -> P (HappyAbsSyn _ _ _) +#endif +happyReduce_4 = happySpecReduce_2 1# happyReduction_4 +happyReduction_4 happy_x_2 + happy_x_1 + = case happyOut7 happy_x_1 of { (HappyWrap7 happy_var_1) -> + happyIn5 + (\env -> happy_var_1 env >>= \res -> + return res + )} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_5 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _) -> P (HappyAbsSyn _ _ _) +#endif +happyReduce_5 = happyReduce 6# 1# happyReduction_5 +happyReduction_5 (happy_x_6 `HappyStk` + happy_x_5 `HappyStk` + happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOut10 happy_x_2 of { (HappyWrap10 happy_var_2) -> + case happyOut6 happy_x_5 of { (HappyWrap6 happy_var_5) -> + happyIn5 + (\env -> + happy_var_5 env >>= \fl -> + if (length fl /= length happy_var_2) + then + error "Mismatch in number of LHS and RHS" + else + let new_fl = zip happy_var_2 fl in + mapM (\(id,rhs) -> + case rhs of { + R (RecPost _ f triple) -> + --putStrFS_debug("bach_f_rec="++ show f) >> + return (R (RecPost id f triple)); + (F f) -> + --putStrFS_debug("bach_f="++ show f) >> + simplify f >>= \fsimpl -> + --putStrFS(show fsimpl) >> + return (F fsimpl); + (QF (qv,f)) -> + --putStrFS_debug("bach_f="++ show f) >> + simplify f >>= \fsimpl -> + --putStrFS(show fsimpl) >> + return (QF (qv,fsimpl))} + ) new_fl >>= \rhs1 -> + let rhs_new = zip happy_var_2 rhs1 in + foldM (\env1 -> \(id,rhs2) -> + case rhs2 of + F f -> + --putStrFS_debug ("#bach_gen " ++ id ++ ":="++(show f)++"\n") >> + putStrNoLnFSOpt ("# " ++ id ++ ":="++(show f)++"\n") >> + return (extendRelEnv env1 (id,rhs2)) + _ -> error "impossible : should be a formula" + ) env rhs_new + ) `HappyStk` happyRest}} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_6 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _) -> P (HappyAbsSyn _ _ _) +#endif +happyReduce_6 = happySpecReduce_2 1# happyReduction_6 +happyReduction_6 happy_x_2 + happy_x_1 + = case happyOut6 happy_x_1 of { (HappyWrap6 happy_var_1) -> + happyIn5 + (\env -> happy_var_1 env >>= \fl -> + mapM (\rhs -> + case rhs of + (F f) -> + simplify f >>= \fsimpl -> + putStrFS(show fsimpl) >> + return (F fsimpl) + (QF (qv,f)) -> + simplify f >>= \fsimpl -> + putStrFS(show (qv,fsimpl)) >> + return (QF (qv,fsimpl)) + (R recpost) -> + putStrFS(show recpost) >> + return rhs + ) fl >>= \rhs1 -> + foldM (\env1 -> \rhs2 -> + return (extendRelEnv env1 (" ",rhs2))) env rhs1 + )} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_7 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _) -> P (HappyAbsSyn _ _ _) +#endif +happyReduce_7 = happySpecReduce_2 1# happyReduction_7 +happyReduction_7 happy_x_2 + happy_x_1 + = case happyOut8 happy_x_1 of { (HappyWrap8 happy_var_1) -> + happyIn5 + (\env -> happy_var_1 env >>= \rhs -> + case rhs of + (F f) -> + simplify f >>= \fsimpl -> + putStrFSOpt("\n" ++ showSet fsimpl ++ "\n") >> + return env + (QF (qv,f)) -> + simplify f >>= \fsimpl -> + putStrFSOpt("\n{[" ++ show qv ++ "] : " ++ showSet fsimpl ++ "}\n") >> + return env + (R recpost) -> + putStrFS ("\n" ++ show recpost ++ "\n") >> + return env + )} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_8 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _) -> P (HappyAbsSyn _ _ _) +#endif +happyReduce_8 = happyReduce 11# 1# happyReduction_8 +happyReduction_8 (happy_x_11 `HappyStk` + happy_x_10 `HappyStk` + happy_x_9 `HappyStk` + happy_x_8 `HappyStk` + happy_x_7 `HappyStk` + happy_x_6 `HappyStk` + happy_x_5 `HappyStk` + happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOut10 happy_x_4 of { (HappyWrap10 happy_var_4) -> + case happyOut10 happy_x_8 of { (HappyWrap10 happy_var_8) -> + happyIn5 + (\env -> --putStrFS("# fixtestPost("++ (show happy_var_4) ++ "," ++ (show happy_var_8) ++ ");") >> + if(length happy_var_4 ==length happy_var_8) + then + let (qvr,rcp) = unzip (map (\x -> case lookupVar x env of + Just (R recpost@(RecPost _ _ (sv1,sv2,_)))-> ((sv1++sv2),recpost) + _ -> error ("Arguments of fixtest are incorrect")) happy_var_4) + in + let mf = map (\(x,qv1) -> case lookupVar x env of + Just (F f) -> f; + Just (QF (qv2,f)) -> + let subs = zip qv2 qv1 in + apply subs f + _-> error ("Arguments of fixtest are incorrect")) $ (zip happy_var_8 qvr) + in + fixTestBU_Lgen rcp mf >>= \fixok -> + putStrFSOpt("\n# " ++ show fixok ++ "\n") >> + return env + else + error ("Mismatch numbers of [] and [] in RHS!") + ) `HappyStk` happyRest}} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_9 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _) -> P (HappyAbsSyn _ _ _) +#endif +happyReduce_9 = happyReduce 7# 1# happyReduction_9 +happyReduction_9 (happy_x_7 `HappyStk` + happy_x_6 `HappyStk` + happy_x_5 `HappyStk` + happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOutTok happy_x_3 of { (TkAlphaNum happy_var_3) -> + case happyOutTok happy_x_5 of { (TkAlphaNum happy_var_5) -> + happyIn5 + (\env -> putStrFS("# fixtestInv("++ happy_var_3 ++ "," ++ happy_var_5 ++ ");") >> + case (lookupVar happy_var_3 env,lookupVar happy_var_5 env) of + (Just (R recpost),Just (F f)) -> + getOneStep recpost fTrue >>= \oneStep -> + fixTestTD oneStep f >>= \fixok -> + putStrFSOpt("\n# " ++ show fixok ++ "\n") >> + return env + (Just (R recpost@(RecPost _ _ (sv1,sv2,_))),Just (QF (qv2,f))) -> + getOneStep recpost fTrue >>= \oneStep -> + let qv1 = sv1++sv2 in + let subs = zip qv2 qv1 in + let sf = apply subs f in + fixTestTD oneStep sf >>= \fixok -> + putStrFSOpt("\n# " ++ show fixok ++ "\n") >> + return env + (_,_) -> error ("Arguments of fixtestInv are incorrect") + ) `HappyStk` happyRest}} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_10 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _) -> P (HappyAbsSyn _ _ _) +#endif +happyReduce_10 = happyReduce 4# 1# happyReduction_10 +happyReduction_10 (happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOutTok happy_x_1 of { (TkAlphaNum happy_var_1) -> + case happyOutTok happy_x_3 of { (TkAlphaNum happy_var_3) -> + happyIn5 + (\env -> putStrFSOpt("# "++ happy_var_1 ++ " subset " ++ happy_var_3 ++ ";") >> + case (lookupVar happy_var_1 env,lookupVar happy_var_3 env) of + (Just (F f1),Just (F f2)) -> + subset f1 f2 >>= \subok -> + putStrFSOpt("\n# " ++ show subok ++ "\n") >> + return env + (Just (QF (qv1,f1)),Just (QF (qv2,f2))) -> + if (length qv1) == (length qv2) then + let subs = zip qv2 qv1 in + let sf2 = apply subs f2 in + subset f1 sf2 >>= \subok -> + putStrFSOpt("\n# " ++ show subok ++ "\n") >> + return env + else error ("Arguments of subset are not valid QFormulas\n") + (_,_) -> error ("Arguments of subset are not valid\n") + ) `HappyStk` happyRest}} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_11 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _) -> P (HappyAbsSyn _ _ _) +#endif +happyReduce_11 = happySpecReduce_2 1# happyReduction_11 +happyReduction_11 happy_x_2 + happy_x_1 + = case happyOutTok happy_x_1 of { (TkAlphaNum happy_var_1) -> + happyIn5 + (\env -> putStrFSOpt("\n# "++ happy_var_1 ++ ";") >> + case lookupVar happy_var_1 env of + Just (R recpost) -> putStrFS("\n" ++ show recpost ++ "\n") >> + return env + Just (F f) -> putStrFS("\n" ++ show f ++ "\n") >> + return env + Just (QF qf) -> putStrFS("\n" ++ show qf ++ "\n") >> + return env + Nothing -> error ("# Variable not declared - "++happy_var_1++"\n") + )} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_12 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _) -> P (HappyAbsSyn _ _ _) +#endif +happyReduce_12 = happyReduce 12# 2# happyReduction_12 +happyReduction_12 (happy_x_12 `HappyStk` + happy_x_11 `HappyStk` + happy_x_10 `HappyStk` + happy_x_9 `HappyStk` + happy_x_8 `HappyStk` + happy_x_7 `HappyStk` + happy_x_6 `HappyStk` + happy_x_5 `HappyStk` + happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOut9 happy_x_4 of { (HappyWrap9 happy_var_4) -> + case happyOut11 happy_x_8 of { (HappyWrap11 happy_var_8) -> + case happyOutTok happy_x_11 of { (TkAlphaNum happy_var_11) -> + happyIn6 + (\env -> + let heur = case happy_var_11 of {"SimHeur" -> SimilarityHeur; + "DiffHeur" -> DifferenceHeur; + "HausHeur" -> HausdorffHeur; + "InterHeur" -> SimInteractiveHeur; + lit -> error ("Heuristic not implemented parser.y - "++lit)} + in + bottomUp2k_gen (happy_var_4 env) (map (\x -> (x,heur)) (happy_var_8)) (map (\x -> fFalse) (happy_var_4 env)) + >>= \resl -> return (map (\x -> F x) (fst (unzip resl))) + ) `HappyStk` happyRest}}} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_13 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _) -> P (HappyAbsSyn _ _ _) +#endif +happyReduce_13 = happyReduce 10# 2# happyReduction_13 +happyReduction_13 (happy_x_10 `HappyStk` + happy_x_9 `HappyStk` + happy_x_8 `HappyStk` + happy_x_7 `HappyStk` + happy_x_6 `HappyStk` + happy_x_5 `HappyStk` + happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOut10 happy_x_4 of { (HappyWrap10 happy_var_4) -> + case happyOut10 happy_x_8 of { (HappyWrap10 happy_var_8) -> + happyIn6 + (\env -> + putStrFSOpt ("apply(" ++ show happy_var_4 ++ "," ++ show happy_var_8 ++ ");") >> + if(length happy_var_4 ==length happy_var_8) then + let qv_rp = map (\x -> case lookupVar x env of { + Just (R recpost@(RecPost _ _ (sv1,sv2,_)))-> ((sv1++sv2),recpost); + _ -> error ("apply: mismatched argume")}) happy_var_4 in + let (mqv,mrp) = unzip qv_rp in + let mf = map (\(x,qv1) -> case lookupVar x env of { + Just (F f) -> f; + Just (QF (qv2,f)) -> + let subs = zip qv2 qv1 in + apply subs f; + _-> error ("apply: mismatched arguments of relation") + }) $ (zip happy_var_8 mqv) in + subrec_gen mrp mf >>= \fn -> + mapM (\x -> simplify x >>= \f -> return (F f)) fn >>= \fs -> + return fs + else error ("apply: mismatched arguments of relations!") + ) `HappyStk` happyRest}} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_14 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _) -> P (HappyAbsSyn _ _ _) +#endif +happyReduce_14 = happyReduce 14# 2# happyReduction_14 +happyReduction_14 (happy_x_14 `HappyStk` + happy_x_13 `HappyStk` + happy_x_12 `HappyStk` + happy_x_11 `HappyStk` + happy_x_10 `HappyStk` + happy_x_9 `HappyStk` + happy_x_8 `HappyStk` + happy_x_7 `HappyStk` + happy_x_6 `HappyStk` + happy_x_5 `HappyStk` + happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOut10 happy_x_4 of { (HappyWrap10 happy_var_4) -> + case happyOut11 happy_x_8 of { (HappyWrap11 happy_var_8) -> + case happyOut10 happy_x_12 of { (HappyWrap10 happy_var_12) -> + happyIn6 + (\env -> + putStrFSOpt ("selhull(" ++ show happy_var_4 ++ "," ++ show happy_var_8 ++ "," ++ show happy_var_12 ++ ");") >> + if ((length happy_var_4) == (length happy_var_8)) && ((length happy_var_4) == (length happy_var_8)) then + let params = zip3 happy_var_4 happy_var_8 happy_var_12 in + mapM (\ (id,val,hr) -> case lookupVar id env of { + Just (R recpost) -> error ("Argument of selhull is not a formula\n"); + Nothing -> error ("Variable not declared - "++ show id ++"\n"); + Just (QF qf) -> error ("Argument of selhull is not a formula\n"); + Just (F f) -> + let heur = case hr of { + "SimHeur" -> SimilarityHeur; + "DiffHeur" -> DifferenceHeur; + "HausHeur" -> HausdorffHeur; + lit -> error ("Heuristic not implemented parser.y4 - "++lit) + } in + combSelHull (val,heur) (getDisjuncts f) [] >>= \disj -> return (F (Or disj)) + }) params + else error ("selhull: invalid arguments") + ) `HappyStk` happyRest}}} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_15 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _) -> P (HappyAbsSyn _ _ _) +#endif +happyReduce_15 = happyReduce 14# 2# happyReduction_15 +happyReduction_15 (happy_x_14 `HappyStk` + happy_x_13 `HappyStk` + happy_x_12 `HappyStk` + happy_x_11 `HappyStk` + happy_x_10 `HappyStk` + happy_x_9 `HappyStk` + happy_x_8 `HappyStk` + happy_x_7 `HappyStk` + happy_x_6 `HappyStk` + happy_x_5 `HappyStk` + happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOut10 happy_x_4 of { (HappyWrap10 happy_var_4) -> + case happyOut10 happy_x_8 of { (HappyWrap10 happy_var_8) -> + case happyOut10 happy_x_12 of { (HappyWrap10 happy_var_12) -> + happyIn6 + (\env -> + putStrFSOpt ("widen(" ++ show happy_var_4 ++ "," ++ show happy_var_8 ++ "," ++ show happy_var_12 ++ ");") >> + if ((length happy_var_4) == (length happy_var_8)) && ((length happy_var_4) == (length happy_var_8)) then + let params = zip3 happy_var_4 happy_var_8 happy_var_12 in + mapM (\ (val1,val2,hr) -> + case (lookupVar val1 env, lookupVar val2 env) of { + (Just (F f1), Just (F f2)) -> + let heur = case hr of { + "SimHeur" -> SimilarityHeur; + "DiffHeur" -> DifferenceHeur; + "HausHeur" -> HausdorffHeur; + lit -> error ("Heuristic not implemented parser.y4 - "++lit) + } in + widen heur [] (getDisjuncts f1,getDisjuncts f2) >>= \disj -> + return (F (Or disj)); + (_,_) -> error "widen: invalid arguments" + }) params + else error ("widen: invalid arguments") + ) `HappyStk` happyRest}}} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_16 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _) -> P (HappyAbsSyn _ _ _) +#endif +happyReduce_16 = happyReduce 6# 3# happyReduction_16 +happyReduction_16 (happy_x_6 `HappyStk` + happy_x_5 `HappyStk` + happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOutTok happy_x_1 of { (TkAlphaNum happy_var_1) -> + case happyOutTok happy_x_5 of { (TkAlphaNum happy_var_5) -> + happyIn7 + (\env -> + case (lookupVar happy_var_5 env) of + Just (F f) -> + simplify f >>= \f1 -> + return f1 + _ -> error ("PickEqFromEq sorely supports Formula") + >>= \fl -> + putStrFS_debug("#After parse Formula: "++show (fl)) >> + let rs1=getEq fl in + putStrFS_debug("#getEq: "++show (rs1)) >> + let eq_udt_list =pickEqFromEq rs1 in + putStrFS_debug("#list eq after pick="++show (eq_udt_list)) >> + let rhs=concat (map (\x -> return (EqK x)) eq_udt_list) in + putStrFS_debug("#concat="++show (rhs)) >> + --foldM (\env1 -> \rhs1 -> return (extendRelEnv env1 (happy_var_1,(F rhs1)))) env rhs --formula in which are disj or conj => needs to be modified here? + return (extendRelEnv env (happy_var_1,(F (And rhs)))) + --return env + ) `HappyStk` happyRest}} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_17 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _) -> P (HappyAbsSyn _ _ _) +#endif +happyReduce_17 = happyReduce 4# 3# happyReduction_17 +happyReduction_17 (happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOutTok happy_x_3 of { (TkAlphaNum happy_var_3) -> + happyIn7 + (\env -> + case (lookupVar happy_var_3 env) of + Just (F f) -> + simplify f >>= \f1 -> + return f1 + _ -> error ("PickEqFromEq solely supports Formula") + >>= \fl -> + putStrFS_debug("#After parse Formula: "++show (fl)) >> + let rs1=getEq fl in + putStrFS_debug("#getEq: "++show (rs1)) >> + let eq_udt_list =pickEqFromEq rs1 in + putStrFS_debug("#list eq after pick="++show (eq_udt_list)) >> + let rhs=concat (map (\x -> return (EqK x)) eq_udt_list) in + putStrFS_debug("#concat="++show (rhs)) >> + putStrFS_DD 0 ("# pickEqFromEq("++happy_var_3++")") >> + putStrFS(show (And rhs)) >> + return (extendRelEnv env (" ",(F (And rhs)))) + --return env + ) `HappyStk` happyRest} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_18 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _) -> P (HappyAbsSyn _ _ _) +#endif +happyReduce_18 = happyReduce 6# 3# happyReduction_18 +happyReduction_18 (happy_x_6 `HappyStk` + happy_x_5 `HappyStk` + happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOutTok happy_x_1 of { (TkAlphaNum happy_var_1) -> + case happyOutTok happy_x_5 of { (TkAlphaNum happy_var_5) -> + happyIn7 + (\env -> + case (lookupVar happy_var_5 env) of + Just (F f) -> + simplify f >>= \f1 -> + return f1 + _ -> error ("PickGEqFromEq sorely supports Formula") + >>= \fl -> + putStrFS_debug("#After parse Formula GEq: "++show (fl)) >> + pickGEQfromEQ fl >>= \gEq -> + --mapM (\g1 ->putStrFS_debug("#list GEq after pick="++show (g1))) gEq >> + let rhs=concat ((mapM (\x -> return x) gEq) :: [[Formula]]) in + putStrFS_debug("#concat="++show (rhs)) >> + return (extendRelEnv env (happy_var_1,(F (And rhs)))) + --return env + ) `HappyStk` happyRest}} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_19 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _) -> P (HappyAbsSyn _ _ _) +#endif +happyReduce_19 = happyReduce 4# 3# happyReduction_19 +happyReduction_19 (happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOutTok happy_x_3 of { (TkAlphaNum happy_var_3) -> + happyIn7 + (\env -> + case (lookupVar happy_var_3 env) of + Just (F f) -> + simplify f >>= \f1 -> + return f1 + _ -> error ("PickGEqFromEq sorely supports Formula") + >>= \fl -> + putStrFS_debug("#After parse Formula GEq: "++show (fl)) >> + pickGEQfromEQ fl >>= \gEq -> + --mapM (\g1 ->putStrFS_debug("#list GEq after pick="++show (g1))) gEq >> + let rhs=concat ((mapM (\x -> return x) gEq) :: [[Formula]]) in + putStrFS_debug("#concat="++show (rhs)) >> + putStrFS("#pickGEqFromEq of "++happy_var_3++" : "++show (And rhs)) >> + return (extendRelEnv env (" ",(F (And rhs)))) + --return env + ) `HappyStk` happyRest} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_20 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _) -> P (HappyAbsSyn _ _ _) +#endif +happyReduce_20 = happyReduce 6# 3# happyReduction_20 +happyReduction_20 (happy_x_6 `HappyStk` + happy_x_5 `HappyStk` + happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOutTok happy_x_1 of { (TkAlphaNum happy_var_1) -> + case happyOutTok happy_x_5 of { (TkAlphaNum happy_var_5) -> + happyIn7 + (\env -> + case (lookupVar happy_var_5 env) of + Just (F f) -> + simplify f >>= \f1 -> + return f1 + _ -> error ("satEQfromEQ sorely supports Formula") + >>= \fl -> + --putStrFS_debug("#satEQEQ After parse Formula: "++show (fl)) >> + satEQfromEQ fl >>= \fsatEQ -> return (extendRelEnv env (happy_var_1,(F (And fsatEQ)))) + --return env + ) `HappyStk` happyRest}} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_21 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _) -> P (HappyAbsSyn _ _ _) +#endif +happyReduce_21 = happyReduce 4# 3# happyReduction_21 +happyReduction_21 (happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOutTok happy_x_3 of { (TkAlphaNum happy_var_3) -> + happyIn7 + (\env -> + case (lookupVar happy_var_3 env) of + Just (F f) -> + simplify f >>= \f1 -> + return f1 + _ -> error ("satEQfromEQ sorely supports Formula") + >>= \fl -> + --putStrFS_debug("#satEQEQ After parse Formula: "++show (fl)) >> + satEQfromEQ fl >>= \fsatEQ -> return (extendRelEnv env (" ",(F (And fsatEQ)))) + --return env + ) `HappyStk` happyRest} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_22 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _) -> P (HappyAbsSyn _ _ _) +#endif +happyReduce_22 = happyReduce 6# 3# happyReduction_22 +happyReduction_22 (happy_x_6 `HappyStk` + happy_x_5 `HappyStk` + happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOutTok happy_x_1 of { (TkAlphaNum happy_var_1) -> + case happyOutTok happy_x_5 of { (TkAlphaNum happy_var_5) -> + happyIn7 + (\env -> + case (lookupVar happy_var_5 env) of + Just (F f) -> + putStrFS("EQEQ org:"++ show f)>> + simplify f >>= \f1 -> + putStrFS("EQEQ sim:"++ show f1)>> + return f1 + _ -> error ("satGEQFromEQ sorely supports Formula") + >>= \fl -> + --putStrFS_debug("#saeGEQEQ After parse Formula GEq: "++show (fl)) >> + satGEQfromEQ fl >>= \rhs -> return (extendRelEnv env (happy_var_1,(F (And rhs)))) + --return env + ) `HappyStk` happyRest}} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_23 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _) -> P (HappyAbsSyn _ _ _) +#endif +happyReduce_23 = happyReduce 4# 3# happyReduction_23 +happyReduction_23 (happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOutTok happy_x_3 of { (TkAlphaNum happy_var_3) -> + happyIn7 + (\env -> + case (lookupVar happy_var_3 env) of + Just (F f) -> + simplify f >>= \f1 -> + return f1 + _ -> error ("satGEQFromEQ sorely supports Formula") + >>= \fl -> + --putStrFS_debug("#saeGEQEQ After parse Formula GEq: "++show (fl)) >> + satGEQfromEQ fl >>= \rhs -> return (extendRelEnv env (" ",(F (And rhs)))) + --return env + ) `HappyStk` happyRest} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_24 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _) -> P (HappyAbsSyn _ _ _) +#endif +happyReduce_24 = happySpecReduce_3 4# happyReduction_24 +happyReduction_24 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut12 happy_x_2 of { happy_var_2 -> + happyIn8 + (\env -> putStrFSOpt ("{ ... };") >> + if "f_" `elem` (map (\(SizeVar anno,_) -> take 2 anno) (fqsv happy_var_2)) then + error ("Free variables of formula should not start with \"f_\" (\"f_\" are fresh variables)") + else return (F happy_var_2) + )} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_25 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _) -> P (HappyAbsSyn _ _ _) +#endif +happyReduce_25 = happyReduce 7# 4# happyReduction_25 +happyReduction_25 (happy_x_7 `HappyStk` + happy_x_6 `HappyStk` + happy_x_5 `HappyStk` + happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOut19 happy_x_3 of { happy_var_3 -> + case happyOut12 happy_x_6 of { happy_var_6 -> + happyIn8 + (\env -> putStrFSOpt ("{ ... };") >> + if "f_" `elem` (map (\(SizeVar anno,_) -> take 2 anno) (fqsv happy_var_6)) then + error ("Free variables of formula should not start with \"f_\" (\"f_\" are fresh variables)") + else if (length happy_var_3 == 0) then return (F happy_var_6) + else return (QF (reverse happy_var_3,happy_var_6)) + ) `HappyStk` happyRest}} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_26 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _) -> P (HappyAbsSyn _ _ _) +#endif +happyReduce_26 = happyReduce 17# 4# happyReduction_26 +happyReduction_26 (happy_x_17 `HappyStk` + happy_x_16 `HappyStk` + happy_x_15 `HappyStk` + happy_x_14 `HappyStk` + happy_x_13 `HappyStk` + happy_x_12 `HappyStk` + happy_x_11 `HappyStk` + happy_x_10 `HappyStk` + happy_x_9 `HappyStk` + happy_x_8 `HappyStk` + happy_x_7 `HappyStk` + happy_x_6 `HappyStk` + happy_x_5 `HappyStk` + happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOut19 happy_x_3 of { happy_var_3 -> + case happyOut19 happy_x_8 of { happy_var_8 -> + case happyOut19 happy_x_13 of { happy_var_13 -> + case happyOut12 happy_x_16 of { happy_var_16 -> + happyIn8 + (\env -> putStrFSOpt ("{ ... };") >> + if "f_" `elem` (map (\(SizeVar anno,_) -> take 2 anno) (fqsv happy_var_16)) then + error ("Free variables of formula should not start with \"f_\" (\"f_\" are fresh variables)") + else return (R (RecPost "dummy" happy_var_16 (reverse happy_var_3,reverse happy_var_8,reverse happy_var_13))) + ) `HappyStk` happyRest}}}} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_27 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _) -> P (HappyAbsSyn _ _ _) +#endif +happyReduce_27 = happyReduce 4# 4# happyReduction_27 +happyReduction_27 (happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOutTok happy_x_1 of { (TkAlphaNum happy_var_1) -> + case happyOutTok happy_x_3 of { (TkAlphaNum happy_var_3) -> + happyIn8 + (\env -> putStrFSOpt (happy_var_1 ++ "(" ++ happy_var_3 ++ ");") >> + let (cabst,qv1) = case lookupVar happy_var_1 env of { + Just (R recpost@(RecPost _ _ (sv1,sv2,_))) -> (recpost, sv1++sv2); + Just (F f) -> error ("Argument of subrec is not a constraint abstraction\n"); + Just (QF qf) -> error ("Argument of subrec is not a constraint abstraction\n"); + Nothing -> error ("Variable not declared - "++happy_var_1++"\n")} in + case lookupVar happy_var_3 env of { + Just (F f) -> + subrec_z cabst f >>= \fn -> simplify fn >>= \fnext -> return (F fnext); + Just (QF (qv2,f)) -> + let subs = zip qv2 qv1 in + let sf = apply subs f in + {-- print_DD True 2 [("== QF qv1 = ", show qv1)] >> + print_DD True 2 [("== QF qv2 = ", show qv2)] >> + print_DD True 2 [("== QF subs = ", show subs)] >> + print_DD True 2 [("== QF f = ", show f)] >> + print_DD True 2 [("== QF sf = ", show sf)] >> --} + subrec_z cabst sf >>= \fn -> simplify fn >>= \fnext -> return (F fnext); + Just (R recpost) -> error ("Argument of subrec is not a formula\n"); + Nothing -> error ("Variable not declared - "++happy_var_3++"\n") + } + ) `HappyStk` happyRest}} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_28 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _) -> P (HappyAbsSyn _ _ _) +#endif +happyReduce_28 = happyReduce 10# 4# happyReduction_28 +happyReduction_28 (happy_x_10 `HappyStk` + happy_x_9 `HappyStk` + happy_x_8 `HappyStk` + happy_x_7 `HappyStk` + happy_x_6 `HappyStk` + happy_x_5 `HappyStk` + happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOutTok happy_x_1 of { (TkAlphaNum happy_var_1) -> + case happyOut10 happy_x_4 of { (HappyWrap10 happy_var_4) -> + case happyOut10 happy_x_8 of { (HappyWrap10 happy_var_8) -> + happyIn8 + (\env -> putStrFSOpt (happy_var_1 ++ "([" ++ show happy_var_4 ++ "],[" ++ show happy_var_8 ++ "]);") >> + let (cabst,qv1) = case lookupVar happy_var_1 env of { + Just (R recpost@(RecPost _ _ (sv1,sv2,_))) -> (recpost, sv1++sv2); + Just (F f) -> error ("Argument of subrec is not a constraint abstraction\n"); + Just (QF qf) -> error ("Argument of subrec is not a constraint abstraction\n"); + Nothing -> error ("Variable not declared - "++happy_var_1++"\n")} in + if(length happy_var_4 ==length happy_var_8) then + let (mqv,mrp) = unzip (map (\x -> case lookupVar x env of + Just (R recpost@(RecPost _ _ (sv1,sv2,_)))-> ((sv1++sv2),recpost) + _ -> error ("Relation arguments of subrec are incorrect")) happy_var_4 ) + in + let mf = map (\(x,qv1) -> case lookupVar x env of + Just (F f) -> f; + Just (QF (qv2,f)) -> + let subs = zip qv2 qv1 in + apply subs f + _-> error ("Formula arguments of subrec are incorrect")) $ (zip happy_var_8 mqv) + in + let r_input = zip mrp mf in + subrec_z_mut cabst r_input >>= \fn -> simplify fn >>= \fnext -> return (F fnext); + else + error ("Mismatch numbers of [] and [] in RHS!") + ) `HappyStk` happyRest}}} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_29 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _) -> P (HappyAbsSyn _ _ _) +#endif +happyReduce_29 = happyReduce 8# 4# happyReduction_29 +happyReduction_29 (happy_x_8 `HappyStk` + happy_x_7 `HappyStk` + happy_x_6 `HappyStk` + happy_x_5 `HappyStk` + happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOutTok happy_x_3 of { (TkAlphaNum happy_var_3) -> + case happyOutTok happy_x_5 of { (TkIntNum happy_var_5) -> + case happyOutTok happy_x_7 of { (TkAlphaNum happy_var_7) -> + happyIn8 + (\env -> putStrFSOpt ("bottomup(" ++ happy_var_3 ++ "," ++ show happy_var_5 ++ "," ++ happy_var_7 ++ ");") >> + case lookupVar happy_var_3 env of + Just (F f) -> error ("Argument of bottomup is not a constraint abstraction\n") + Just (QF qf) -> error ("Argument of bottomup is not a constraint abstraction\n") + Nothing -> error ("Variable not declared - "++happy_var_3++"\n") + Just (R recpost) -> + let heur = case happy_var_7 of {"SimHeur" -> SimilarityHeur; "DiffHeur" -> DifferenceHeur; "HausHeur" -> HausdorffHeur; lit -> error ("Heuristic not implemented parser.y2 - "++lit)} in + bottomUp2k recpost (happy_var_5,heur) fFalse >>= \(post,cnt) -> return (F post) + ) `HappyStk` happyRest}}} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_30 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _) -> P (HappyAbsSyn _ _ _) +#endif +happyReduce_30 = happyReduce 6# 4# happyReduction_30 +happyReduction_30 (happy_x_6 `HappyStk` + happy_x_5 `HappyStk` + happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOutTok happy_x_3 of { (TkAlphaNum happy_var_3) -> + case happyOutTok happy_x_5 of { (TkAlphaNum happy_var_5) -> + happyIn8 + (\env -> putStrFS ("bottomup_mr(" ++ happy_var_3 ++ "," ++ happy_var_5 ++ ");") >> + case lookupVar happy_var_3 env of + Just (F f) -> error ("First argument of bottomup_mr is not a constraint abstraction\n") + Just (QF qf) -> error ("First argument of bottomup_mr is not a constraint abstraction\n") + Nothing -> error ("Variable not declared - "++happy_var_3++"\n") + Just (R recpost1) -> + case lookupVar happy_var_5 env of + Just (F f) -> error ("Second argument of bottomup_mr is not a constraint abstraction\n") + Just (QF qf) -> error ("Second argument of bottomup_mr is not a constraint abstraction\n") + Nothing -> error ("Variable not declared - "++happy_var_5++"\n") + Just (R recpost2) -> bottomUp_mr recpost1 recpost2 >>= \(post,cnt) -> return (F post) + ) `HappyStk` happyRest}} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_31 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _) -> P (HappyAbsSyn _ _ _) +#endif +happyReduce_31 = happyReduce 8# 4# happyReduction_31 +happyReduction_31 (happy_x_8 `HappyStk` + happy_x_7 `HappyStk` + happy_x_6 `HappyStk` + happy_x_5 `HappyStk` + happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOutTok happy_x_3 of { (TkAlphaNum happy_var_3) -> + case happyOutTok happy_x_5 of { (TkIntNum happy_var_5) -> + case happyOutTok happy_x_7 of { (TkAlphaNum happy_var_7) -> + happyIn8 + (\env -> putStrFSOpt ("topdown(" ++ happy_var_3 ++ "," ++ show happy_var_5 ++ "," ++ happy_var_7 ++ ");") >> + case lookupVar happy_var_3 env of + Just (F f) -> error ("Argument of topdown is not a constraint abstraction\n") + Just (QF qf) -> error ("Argument of topdown is not a constraint abstraction\n") + Nothing -> error ("Variable not declared - "++happy_var_3++"\n") + Just (R recpost) -> + let heur = case happy_var_7 of {"SimHeur" -> SimilarityHeur; "DiffHeur" -> DifferenceHeur; "HausHeur" -> HausdorffHeur; lit -> error ("Heuristic not implemented parser.y3 - "++lit)} in + topDown2k recpost (happy_var_5,heur) fTrue >>= \(inv,cnt) -> return (F inv) + ) `HappyStk` happyRest}}} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_32 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _) -> P (HappyAbsSyn _ _ _) +#endif +happyReduce_32 = happyReduce 12# 4# happyReduction_32 +happyReduction_32 (happy_x_12 `HappyStk` + happy_x_11 `HappyStk` + happy_x_10 `HappyStk` + happy_x_9 `HappyStk` + happy_x_8 `HappyStk` + happy_x_7 `HappyStk` + happy_x_6 `HappyStk` + happy_x_5 `HappyStk` + happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOut9 happy_x_4 of { (HappyWrap9 happy_var_4) -> + case happyOut11 happy_x_8 of { (HappyWrap11 happy_var_8) -> + case happyOutTok happy_x_11 of { (TkAlphaNum happy_var_11) -> + happyIn8 + (\env -> + let heur = case happy_var_11 of {"SimHeur" -> SimilarityHeur; + "DiffHeur" -> DifferenceHeur; + "HausHeur" -> HausdorffHeur; + "InterHeur" -> SimInteractiveHeur; + lit -> error ("Heuristic not implemented parser.y - "++lit)} + in + gfp2k (happy_var_4 env) (map (\x -> (x,heur)) (happy_var_8)) (map (\x -> fTrue) (happy_var_4 env)) + >>= \resl -> return (F (fOr (fst (unzip resl)))) + ) `HappyStk` happyRest}}} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_33 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _) -> P (HappyAbsSyn _ _ _) +#endif +happyReduce_33 = happySpecReduce_3 4# happyReduction_33 +happyReduction_33 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOutTok happy_x_1 of { (TkAlphaNum happy_var_1) -> + case happyOutTok happy_x_3 of { (TkAlphaNum happy_var_3) -> + happyIn8 + (\env -> putStrFSOpt("# "++ happy_var_1 ++ " complement " ++ happy_var_3 ++ ";") >> + case (lookupVar happy_var_1 env,lookupVar happy_var_3 env) of + (Just (F f1),Just (F f2)) -> + difference f1 f2 >>= \result -> + return (F result) + (_,_) -> error ("Arguments of complement are not valid\n") + )}} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_34 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _) -> P (HappyAbsSyn _ _ _) +#endif +happyReduce_34 = happySpecReduce_2 4# happyReduction_34 +happyReduction_34 happy_x_2 + happy_x_1 + = case happyOutTok happy_x_2 of { (TkAlphaNum happy_var_2) -> + happyIn8 + (\env -> putStrFSOpt("complement " ++ happy_var_2 ++ ";") >> + case (lookupVar happy_var_2 env) of + Just (F f1) -> + complement f1 >>= \result -> + return (F result) + _ -> error ("Arguments of complement are not valid\n") + )} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_35 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _) -> P (HappyAbsSyn _ _ _) +#endif +happyReduce_35 = happyReduce 8# 4# happyReduction_35 +happyReduction_35 (happy_x_8 `HappyStk` + happy_x_7 `HappyStk` + happy_x_6 `HappyStk` + happy_x_5 `HappyStk` + happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOutTok happy_x_3 of { (TkAlphaNum happy_var_3) -> + case happyOutTok happy_x_5 of { (TkIntNum happy_var_5) -> + case happyOutTok happy_x_7 of { (TkAlphaNum happy_var_7) -> + happyIn8 + (\env -> putStrFSOpt ("selhull(" ++ happy_var_3 ++ "," ++ show happy_var_5 ++ "," ++ happy_var_7 ++ ");") >> + case lookupVar happy_var_3 env of + Just (R recpost) -> error ("Argument of selhull is not a formula\n") + Nothing -> error ("Variable not declared - "++happy_var_3++"\n") + Just (QF qf) -> error ("Argument of selhull is not a formula\n") + Just (F f) -> + let heur = case happy_var_7 of {"SimHeur" -> SimilarityHeur; "DiffHeur" -> DifferenceHeur; "HausHeur" -> HausdorffHeur; lit -> error ("Heuristic not implemented parser.y4 - "++lit)} in + combSelHull (happy_var_5,heur) (getDisjuncts f) [] >>= \disj -> return (F (Or disj)) + ) `HappyStk` happyRest}}} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_36 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _) -> P (HappyAbsSyn _ _ _) +#endif +happyReduce_36 = happyReduce 8# 4# happyReduction_36 +happyReduction_36 (happy_x_8 `HappyStk` + happy_x_7 `HappyStk` + happy_x_6 `HappyStk` + happy_x_5 `HappyStk` + happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOutTok happy_x_3 of { (TkAlphaNum happy_var_3) -> + case happyOut11 happy_x_6 of { (HappyWrap11 happy_var_6) -> + happyIn8 + (\env -> putStrFSOpt ("manualhull(" ++ happy_var_3 ++ "," ++ show happy_var_6 ++ ");") >> + case lookupVar happy_var_3 env of + Just (F f) -> + let disj = getDisjuncts f in + if length disj == length happy_var_6 then + let grouped = groupDisjuncts (zip disj happy_var_6) (nub happy_var_6) (replicate (length (nub happy_var_6)) fFalse) in + mapM (\x -> hull x) grouped >>= \hulled -> + return (F (fOr hulled)) + else + error ("Length of the list " ++ show happy_var_6 ++ " is different than the number of disjuncts in formula.") + _ -> error ("First argument of manualhull is not a formula.") + ) `HappyStk` happyRest}} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_37 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _) -> P (HappyAbsSyn _ _ _) +#endif +happyReduce_37 = happyReduce 8# 4# happyReduction_37 +happyReduction_37 (happy_x_8 `HappyStk` + happy_x_7 `HappyStk` + happy_x_6 `HappyStk` + happy_x_5 `HappyStk` + happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOutTok happy_x_3 of { (TkAlphaNum happy_var_3) -> + case happyOutTok happy_x_5 of { (TkAlphaNum happy_var_5) -> + case happyOutTok happy_x_7 of { (TkAlphaNum happy_var_7) -> + happyIn8 + (\env -> putStrFSOpt ("narrow(" ++ happy_var_3 ++ "," ++ happy_var_5 ++ "," ++ happy_var_7 ++ ");") >> + case (lookupVar happy_var_3 env,lookupVar happy_var_5 env) of + (Just (F f1),Just (F f2)) -> + let heur = case happy_var_7 of {"SimHeur" -> SimilarityHeur; "DiffHeur" -> DifferenceHeur; "HausHeur" -> HausdorffHeur; lit -> error ("Heuristic not implemented parser.y5 - "++lit)} in + narrow heur [] (getDisjuncts f1,getDisjuncts f2) >>= \disj -> + return (F (Or disj)) + (Just (R recpost),_) -> error ("Argument of narrow is not a formula\n") + (_,Just (R recpost)) -> error ("Argument of narrow is not a formula\n") + (Just (QF qf),_) -> error ("Argument of narrow is not a formula\n") + (_,Just (QF qf)) -> error ("Argument of narrow is not a formula\n") + (_,_) -> error ("Variable not declared - "++happy_var_3++"\n") + ) `HappyStk` happyRest}}} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_38 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _) -> P (HappyAbsSyn _ _ _) +#endif +happyReduce_38 = happyReduce 8# 4# happyReduction_38 +happyReduction_38 (happy_x_8 `HappyStk` + happy_x_7 `HappyStk` + happy_x_6 `HappyStk` + happy_x_5 `HappyStk` + happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOutTok happy_x_3 of { (TkAlphaNum happy_var_3) -> + case happyOutTok happy_x_5 of { (TkAlphaNum happy_var_5) -> + case happyOutTok happy_x_7 of { (TkAlphaNum happy_var_7) -> + happyIn8 + (\env -> putStrFSOpt ("widen(" ++ happy_var_3 ++ "," ++ happy_var_5 ++ "," ++ happy_var_7 ++ ");") >> + case (lookupVar happy_var_3 env,lookupVar happy_var_5 env) of + (Just (F f1),Just (F f2)) -> + let heur = case happy_var_7 of {"SimHeur" -> SimilarityHeur; "DiffHeur" -> DifferenceHeur; "HausHeur" -> HausdorffHeur; lit -> error ("Heuristic not implemented parser.y5 - "++lit)} in + widen heur [] (getDisjuncts f1,getDisjuncts f2) >>= \disj -> + return (F (Or disj)) + (Just (R recpost),_) -> error ("Argument of widen is not a formula\n") + (_,Just (R recpost)) -> error ("Argument of widen is not a formula\n") + (Just (QF qf),_) -> error ("Argument of widen is not a formula\n") + (_,Just (QF qf)) -> error ("Argument of widen is not a formula\n") + (_,_) -> error ("Variable not declared - "++happy_var_3++"\n") + ) `HappyStk` happyRest}}} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_39 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _) -> P (HappyAbsSyn _ _ _) +#endif +happyReduce_39 = happySpecReduce_3 4# happyReduction_39 +happyReduction_39 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOutTok happy_x_1 of { (TkAlphaNum happy_var_1) -> + case happyOutTok happy_x_3 of { (TkAlphaNum happy_var_3) -> + happyIn8 + (\env -> putStrFSOpt(happy_var_1 ++ " intersection " ++ happy_var_3 ++ ";") >> + case (lookupVar happy_var_1 env,lookupVar happy_var_3 env) of + (Just (F f1),Just (F f2)) -> + simplify (And [f1,f2]) >>= \f3 -> + return (F f3) + (_,_) -> error ("Argument of intersection is not a valid formula\n") + )}} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_40 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _) -> P (HappyAbsSyn _ _ _) +#endif +happyReduce_40 = happySpecReduce_2 4# happyReduction_40 +happyReduction_40 happy_x_2 + happy_x_1 + = case happyOutTok happy_x_2 of { (TkAlphaNum happy_var_2) -> + happyIn8 + (\env -> putStrFSOpt("hull " ++ happy_var_2 ++ ";") >> + case (lookupVar happy_var_2 env) of + Just (F f1) -> hull f1 >>= \f2 -> + return (F f2) + _ -> error ("Argument of hull is not a valid formula\n") + )} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_41 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _) -> P (HappyAbsSyn _ _ _) +#endif +happyReduce_41 = happySpecReduce_2 4# happyReduction_41 +happyReduction_41 happy_x_2 + happy_x_1 + = case happyOutTok happy_x_2 of { (TkAlphaNum happy_var_2) -> + happyIn8 + (\env -> putStrFSOpt ("PairwiseCheck "++ happy_var_2) >> + case lookupVar happy_var_2 env of + Just (F f) -> + pairwiseCheck f >>= \fsimpl -> + return (F fsimpl) + _ -> error ("Argument of pairwisecheck is not a valid formula "++happy_var_2++"\n") + )} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_42 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _) -> P (HappyAbsSyn _ _ _) +#endif +happyReduce_42 = happySpecReduce_1 5# happyReduction_42 +happyReduction_42 happy_x_1 + = case happyOutTok happy_x_1 of { (TkAlphaNum happy_var_1) -> + happyIn9 + (\env -> case lookupVar happy_var_1 env of + Just (F f) -> error ("Argument of bottomup is not a constraint abstraction\n") + Just (QF qf) -> error ("Argument of bottomup is not a constraint abstraction\n") + Nothing -> error ("Variable not declared - "++happy_var_1++"\n") + Just (R recpost) -> [recpost] + )} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_43 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _) -> P (HappyAbsSyn _ _ _) +#endif +happyReduce_43 = happySpecReduce_3 5# happyReduction_43 +happyReduction_43 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOutTok happy_x_1 of { (TkAlphaNum happy_var_1) -> + case happyOut9 happy_x_3 of { (HappyWrap9 happy_var_3) -> + happyIn9 + (\env -> case lookupVar happy_var_1 env of + Just (F f) -> error ("Argument of bottomup is not a constraint abstraction\n") + Just (QF qf) -> error ("Argument of bottomup is not a constraint abstraction\n") + Nothing -> error ("Variable not declared - "++happy_var_1++"\n") + Just (R recpost) -> recpost:(happy_var_3 env) + )}} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_44 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _) -> P (HappyAbsSyn _ _ _) +#endif +happyReduce_44 = happySpecReduce_1 6# happyReduction_44 +happyReduction_44 happy_x_1 + = case happyOutTok happy_x_1 of { (TkAlphaNum happy_var_1) -> + happyIn10 + ([happy_var_1] + )} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_45 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _) -> P (HappyAbsSyn _ _ _) +#endif +happyReduce_45 = happySpecReduce_3 6# happyReduction_45 +happyReduction_45 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOutTok happy_x_1 of { (TkAlphaNum happy_var_1) -> + case happyOut10 happy_x_3 of { (HappyWrap10 happy_var_3) -> + happyIn10 + (happy_var_1:happy_var_3 + )}} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_46 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _) -> P (HappyAbsSyn _ _ _) +#endif +happyReduce_46 = happySpecReduce_1 7# happyReduction_46 +happyReduction_46 happy_x_1 + = case happyOutTok happy_x_1 of { (TkIntNum happy_var_1) -> + happyIn11 + ([happy_var_1] + )} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_47 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _) -> P (HappyAbsSyn _ _ _) +#endif +happyReduce_47 = happySpecReduce_3 7# happyReduction_47 +happyReduction_47 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOutTok happy_x_1 of { (TkIntNum happy_var_1) -> + case happyOut11 happy_x_3 of { (HappyWrap11 happy_var_3) -> + happyIn11 + (happy_var_1:happy_var_3 + )}} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_48 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _) -> P (HappyAbsSyn _ _ _) +#endif +happyReduce_48 = happySpecReduce_1 8# happyReduction_48 +happyReduction_48 happy_x_1 + = case happyOut13 happy_x_1 of { (HappyWrap13 happy_var_1) -> + happyIn12 + (happy_var_1 + )} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_49 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _) -> P (HappyAbsSyn _ _ _) +#endif +happyReduce_49 = happySpecReduce_3 8# happyReduction_49 +happyReduction_49 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut12 happy_x_2 of { happy_var_2 -> + happyIn12 + (happy_var_2 + )} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_50 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _) -> P (HappyAbsSyn _ _ _) +#endif +happyReduce_50 = happySpecReduce_3 8# happyReduction_50 +happyReduction_50 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut12 happy_x_1 of { happy_var_1 -> + case happyOut12 happy_x_3 of { happy_var_3 -> + happyIn12 + (And [happy_var_1,happy_var_3] + )}} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_51 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _) -> P (HappyAbsSyn _ _ _) +#endif +happyReduce_51 = happySpecReduce_3 8# happyReduction_51 +happyReduction_51 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut12 happy_x_1 of { happy_var_1 -> + case happyOut12 happy_x_3 of { happy_var_3 -> + happyIn12 + (Or [happy_var_1,happy_var_3] + )}} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_52 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _) -> P (HappyAbsSyn _ _ _) +#endif +happyReduce_52 = happySpecReduce_1 8# happyReduction_52 +happyReduction_52 happy_x_1 + = happyIn12 + (fTrue + ) + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_53 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _) -> P (HappyAbsSyn _ _ _) +#endif +happyReduce_53 = happySpecReduce_1 8# happyReduction_53 +happyReduction_53 happy_x_1 + = happyIn12 + (fFalse + ) + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_54 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _) -> P (HappyAbsSyn _ _ _) +#endif +happyReduce_54 = happySpecReduce_1 9# happyReduction_54 +happyReduction_54 happy_x_1 + = case happyOut14 happy_x_1 of { (HappyWrap14 happy_var_1) -> + happyIn13 + (let (f,rest)=happy_var_1 in f + )} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_55 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _) -> P (HappyAbsSyn _ _ _) +#endif +happyReduce_55 = happyReduce 6# 9# happyReduction_55 +happyReduction_55 (happy_x_6 `HappyStk` + happy_x_5 `HappyStk` + happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOut20 happy_x_3 of { happy_var_3 -> + case happyOut12 happy_x_5 of { happy_var_5 -> + happyIn13 + (fExists (reverse happy_var_3) happy_var_5 + ) `HappyStk` happyRest}} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_56 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _) -> P (HappyAbsSyn _ _ _) +#endif +happyReduce_56 = happyReduce 6# 9# happyReduction_56 +happyReduction_56 (happy_x_6 `HappyStk` + happy_x_5 `HappyStk` + happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOut20 happy_x_3 of { happy_var_3 -> + case happyOut12 happy_x_5 of { happy_var_5 -> + happyIn13 + (fForall (reverse happy_var_3) happy_var_5 + ) `HappyStk` happyRest}} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_57 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _) -> P (HappyAbsSyn _ _ _) +#endif +happyReduce_57 = happyReduce 4# 9# happyReduction_57 +happyReduction_57 (happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOut12 happy_x_3 of { happy_var_3 -> + happyIn13 + (fNot happy_var_3 + ) `HappyStk` happyRest} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_58 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _) -> P (HappyAbsSyn _ _ _) +#endif +happyReduce_58 = happySpecReduce_1 10# happyReduction_58 +happyReduction_58 happy_x_1 + = case happyOut15 happy_x_1 of { (HappyWrap15 happy_var_1) -> + happyIn14 + (happy_var_1 + )} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_59 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _) -> P (HappyAbsSyn _ _ _) +#endif +happyReduce_59 = happyReduce 4# 10# happyReduction_59 +happyReduction_59 (happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOutTok happy_x_1 of { (TkAlphaNum happy_var_1) -> + case happyOut20 happy_x_3 of { happy_var_3 -> + happyIn14 + ((AppRecPost happy_var_1 (reverse happy_var_3),[]) + ) `HappyStk` happyRest}} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_60 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _) -> P (HappyAbsSyn _ _ _) +#endif +happyReduce_60 = happySpecReduce_3 10# happyReduction_60 +happyReduction_60 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut14 happy_x_1 of { (HappyWrap14 happy_var_1) -> + case happyOut16 happy_x_2 of { (HappyWrap16 happy_var_2) -> + case happyOut17 happy_x_3 of { (HappyWrap17 happy_var_3) -> + happyIn14 + (let (f,rest) = happy_var_1 in + let third = reverse happy_var_3 in + let combi = [(e1,e2) | e1 <- rest, e2 <- third] in + case happy_var_2 of + TkEq -> + let newfs = map (\(e1,e2) -> EqK (e1 ++ (minus_update e2))) combi in + (And (f:newfs),third) + TkGTE -> + let newfs = map (\(e1,e2) -> GEq (e1 ++ (minus_update e2))) combi in + (And (f:newfs),third) + TkGT -> + let newfs = map (\(e1,e2) -> GEq ((Const (-1)):(e1 ++ minus_update e2))) combi in + (And (f:newfs),third) + TkLTE -> + let newfs = map (\(e1,e2) -> GEq (e2 ++ (minus_update e1))) combi in + (And (f:newfs),third) + TkLT -> + let newfs = map (\(e1,e2) -> GEq ((Const (-1)):(e2 ++ minus_update e1))) combi in + (And (f:newfs),third) + )}}} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_61 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _) -> P (HappyAbsSyn _ _ _) +#endif +happyReduce_61 = happySpecReduce_3 11# happyReduction_61 +happyReduction_61 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut17 happy_x_1 of { (HappyWrap17 happy_var_1) -> + case happyOut16 happy_x_2 of { (HappyWrap16 happy_var_2) -> + case happyOut17 happy_x_3 of { (HappyWrap17 happy_var_3) -> + happyIn15 + (let (first,third) = (reverse happy_var_1,reverse happy_var_3) in + let combi = [(e1,e2) | e1 <- first, e2 <- third] in + case happy_var_2 of + TkEq -> + let newfs = map (\(e1,e2) -> (EqK (e1 ++ (minus_update e2)))) combi in + if singleton newfs then (head newfs,third) else (And newfs,third) + TkGTE -> + let newfs = map (\(e1,e2) -> (GEq (e1 ++ (minus_update e2)))) combi in + if singleton newfs then (head newfs,third) else (And newfs,third) + TkGT -> + let newfs = map (\(e1,e2) -> (GEq ((Const (- 1)):(e1 ++ (minus_update e2))) )) combi in + if singleton newfs then (head newfs,third) else (And newfs,third) + TkLTE -> + let newfs = map (\(e1,e2) -> (GEq (e2 ++ (minus_update e1)))) combi in + if singleton newfs then (head newfs,third) else (And newfs,third) + TkLT -> + let newfs = map (\(e1,e2) -> (GEq ((Const (- 1)):(e2 ++ (minus_update e1))) )) combi in + if singleton newfs then (head newfs,third) else (And newfs,third) + )}}} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_62 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _) -> P (HappyAbsSyn _ _ _) +#endif +happyReduce_62 = happySpecReduce_1 12# happyReduction_62 +happyReduction_62 happy_x_1 + = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn16 + (happy_var_1 + )} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_63 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _) -> P (HappyAbsSyn _ _ _) +#endif +happyReduce_63 = happySpecReduce_1 12# happyReduction_63 +happyReduction_63 happy_x_1 + = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn16 + (happy_var_1 + )} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_64 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _) -> P (HappyAbsSyn _ _ _) +#endif +happyReduce_64 = happySpecReduce_1 12# happyReduction_64 +happyReduction_64 happy_x_1 + = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn16 + (happy_var_1 + )} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_65 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _) -> P (HappyAbsSyn _ _ _) +#endif +happyReduce_65 = happySpecReduce_1 12# happyReduction_65 +happyReduction_65 happy_x_1 + = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn16 + (happy_var_1 + )} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_66 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _) -> P (HappyAbsSyn _ _ _) +#endif +happyReduce_66 = happySpecReduce_1 12# happyReduction_66 +happyReduction_66 happy_x_1 + = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn16 + (happy_var_1 + )} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_67 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _) -> P (HappyAbsSyn _ _ _) +#endif +happyReduce_67 = happySpecReduce_3 13# happyReduction_67 +happyReduction_67 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut17 happy_x_1 of { (HappyWrap17 happy_var_1) -> + case happyOut18 happy_x_3 of { (HappyWrap18 happy_var_3) -> + happyIn17 + (happy_var_3:happy_var_1 + )}} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_68 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _) -> P (HappyAbsSyn _ _ _) +#endif +happyReduce_68 = happySpecReduce_1 13# happyReduction_68 +happyReduction_68 happy_x_1 + = case happyOut18 happy_x_1 of { (HappyWrap18 happy_var_1) -> + happyIn17 + ([happy_var_1] + )} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_69 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _) -> P (HappyAbsSyn _ _ _) +#endif +happyReduce_69 = happySpecReduce_3 14# happyReduction_69 +happyReduction_69 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut18 happy_x_1 of { (HappyWrap18 happy_var_1) -> + case happyOut18 happy_x_3 of { (HappyWrap18 happy_var_3) -> + happyIn18 + (happy_var_1 ++ happy_var_3 + )}} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_70 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _) -> P (HappyAbsSyn _ _ _) +#endif +happyReduce_70 = happySpecReduce_3 14# happyReduction_70 +happyReduction_70 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut18 happy_x_1 of { (HappyWrap18 happy_var_1) -> + case happyOut18 happy_x_3 of { (HappyWrap18 happy_var_3) -> + happyIn18 + (happy_var_1 ++ (minus_update happy_var_3) + )}} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_71 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _) -> P (HappyAbsSyn _ _ _) +#endif +happyReduce_71 = happySpecReduce_3 14# happyReduction_71 +happyReduction_71 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut18 happy_x_2 of { (HappyWrap18 happy_var_2) -> + happyIn18 + (happy_var_2 + )} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_72 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _) -> P (HappyAbsSyn _ _ _) +#endif +happyReduce_72 = happySpecReduce_2 14# happyReduction_72 +happyReduction_72 happy_x_2 + happy_x_1 + = case happyOutTok happy_x_1 of { (TkIntNum happy_var_1) -> + case happyOut21 happy_x_2 of { (HappyWrap21 happy_var_2) -> + happyIn18 + ([ Coef happy_var_2 happy_var_1 ] + )}} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_73 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _) -> P (HappyAbsSyn _ _ _) +#endif +happyReduce_73 = happySpecReduce_3 14# happyReduction_73 +happyReduction_73 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOutTok happy_x_2 of { (TkIntNum happy_var_2) -> + case happyOut21 happy_x_3 of { (HappyWrap21 happy_var_3) -> + happyIn18 + ([ Coef happy_var_3 (-happy_var_2) ] + )}} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_74 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _) -> P (HappyAbsSyn _ _ _) +#endif +happyReduce_74 = happySpecReduce_1 14# happyReduction_74 +happyReduction_74 happy_x_1 + = case happyOutTok happy_x_1 of { (TkIntNum happy_var_1) -> + happyIn18 + ([ Const happy_var_1 ] + )} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_75 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _) -> P (HappyAbsSyn _ _ _) +#endif +happyReduce_75 = happySpecReduce_2 14# happyReduction_75 +happyReduction_75 happy_x_2 + happy_x_1 + = case happyOutTok happy_x_2 of { (TkIntNum happy_var_2) -> + happyIn18 + ([ Const (- happy_var_2)] + )} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_76 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _) -> P (HappyAbsSyn _ _ _) +#endif +happyReduce_76 = happySpecReduce_1 14# happyReduction_76 +happyReduction_76 happy_x_1 + = case happyOut21 happy_x_1 of { (HappyWrap21 happy_var_1) -> + happyIn18 + ([ Coef happy_var_1 1 ] + )} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_77 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _) -> P (HappyAbsSyn _ _ _) +#endif +happyReduce_77 = happySpecReduce_2 14# happyReduction_77 +happyReduction_77 happy_x_2 + happy_x_1 + = case happyOut21 happy_x_2 of { (HappyWrap21 happy_var_2) -> + happyIn18 + ([ Coef happy_var_2 (-1) ] + )} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_78 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _) -> P (HappyAbsSyn _ _ _) +#endif +happyReduce_78 = happySpecReduce_0 15# happyReduction_78 +happyReduction_78 = happyIn19 + ([] + ) + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_79 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _) -> P (HappyAbsSyn _ _ _) +#endif +happyReduce_79 = happySpecReduce_1 15# happyReduction_79 +happyReduction_79 happy_x_1 + = case happyOut20 happy_x_1 of { happy_var_1 -> + happyIn19 + (happy_var_1 + )} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_80 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _) -> P (HappyAbsSyn _ _ _) +#endif +happyReduce_80 = happySpecReduce_3 16# happyReduction_80 +happyReduction_80 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut20 happy_x_1 of { happy_var_1 -> + case happyOut21 happy_x_3 of { (HappyWrap21 happy_var_3) -> + happyIn20 + (happy_var_3:happy_var_1 + )}} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_81 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _) -> P (HappyAbsSyn _ _ _) +#endif +happyReduce_81 = happySpecReduce_1 16# happyReduction_81 +happyReduction_81 happy_x_1 + = case happyOut21 happy_x_1 of { (HappyWrap21 happy_var_1) -> + happyIn20 + ([happy_var_1] + )} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_82 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _) -> P (HappyAbsSyn _ _ _) +#endif +happyReduce_82 = happySpecReduce_1 17# happyReduction_82 +happyReduction_82 happy_x_1 + = case happyOutTok happy_x_1 of { (TkAlphaNum happy_var_1) -> + happyIn21 + ((stringToQsv happy_var_1) + )} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_83 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _) -> P (HappyAbsSyn _ _ _) +#endif +happyReduce_83 = happySpecReduce_2 17# happyReduction_83 +happyReduction_83 happy_x_2 + happy_x_1 + = case happyOutTok happy_x_1 of { (TkAlphaNum happy_var_1) -> + happyIn21 + ((SizeVar happy_var_1,Primed) + )} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_84 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _) -> P (HappyAbsSyn _ _ _) +#endif +happyReduce_84 = happySpecReduce_2 17# happyReduction_84 +happyReduction_84 happy_x_2 + happy_x_1 + = case happyOutTok happy_x_1 of { (TkAlphaNum happy_var_1) -> + happyIn21 + ((SizeVar happy_var_1,Recursive) + )} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_85 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _) -> P (HappyAbsSyn _ _ _) +#endif +happyReduce_85 = happySpecReduce_3 17# happyReduction_85 +happyReduction_85 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOutTok happy_x_1 of { (TkAlphaNum happy_var_1) -> + case happyOutTok happy_x_3 of { (TkAlphaNum happy_var_3) -> + happyIn21 + (if (happy_var_3=="min") + then ((ArrSizeVar happy_var_1 Min),Unprimed) + else + if (happy_var_3=="max") + then ((ArrSizeVar happy_var_1 Max),Unprimed) + else error $ "neither min or max after QSizeVar" + )}} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_86 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _) -> P (HappyAbsSyn _ _ _) +#endif +happyReduce_86 = happyReduce 4# 17# happyReduction_86 +happyReduction_86 (happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOutTok happy_x_1 of { (TkAlphaNum happy_var_1) -> + case happyOutTok happy_x_3 of { (TkAlphaNum happy_var_3) -> + happyIn21 + (if (happy_var_3=="min") + then ((ArrSizeVar happy_var_1 Min),Primed) + else + if (happy_var_3=="max") + then ((ArrSizeVar happy_var_1 Max),Primed) + else error $ "neither min or max after QSizeVar" + ) `HappyStk` happyRest}} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_87 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _) -> P (HappyAbsSyn _ _ _) +#endif +happyReduce_87 = happyReduce 4# 17# happyReduction_87 +happyReduction_87 (happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOutTok happy_x_1 of { (TkAlphaNum happy_var_1) -> + case happyOutTok happy_x_3 of { (TkAlphaNum happy_var_3) -> + happyIn21 + (if (happy_var_3=="min") + then ((ArrSizeVar happy_var_1 Min),Recursive) + else + if (happy_var_3=="max") + then ((ArrSizeVar happy_var_1 Max),Recursive) + else error $ "neither min or max after QSizeVar" + ) `HappyStk` happyRest}} + +happyNewToken action sts stk + = lexer(\tk -> + let cont i = happyDoAction i tk action sts stk in + case tk of { + TkEOF -> happyDoAction 51# tk action sts stk; + TkAlphaNum happy_dollar_dollar -> cont 1#; + TkIntNum happy_dollar_dollar -> cont 2#; + TkTrue -> cont 3#; + TkFalse -> cont 4#; + TkPlus -> cont 5#; + TkMinus -> cont 6#; + TkLBr -> cont 7#; + TkRBr -> cont 8#; + TkSemiColon -> cont 9#; + TkAssign -> cont 10#; + TkLSqBr -> cont 11#; + TkRSqBr -> cont 12#; + TkLAcc -> cont 13#; + TkRAcc -> cont 14#; + TkComma -> cont 15#; + TkEq -> cont 16#; + TkLT -> cont 17#; + TkGT -> cont 18#; + TkGTE -> cont 19#; + TkLTE -> cont 20#; + TkAnd -> cont 21#; + TkOr -> cont 22#; + TkColon -> cont 23#; + TkDot -> cont 24#; + TkNot -> cont 25#; + TkExists -> cont 26#; + TkForall -> cont 27#; + TkPrime -> cont 28#; + TkRec -> cont 29#; + TkKwApply -> cont 30#; + TkKwWiden -> cont 31#; + TkKwNarrow -> cont 32#; + TkKwSubset -> cont 33#; + TkKwComplement -> cont 34#; + TkKwBottomup -> cont 35#; + TkKwBottomup_mr -> cont 36#; + TkKwBottomup_gen -> cont 37#; + TkKwTopdown -> cont 38#; + TkKwGFP -> cont 39#; + TkKwSelhull -> cont 40#; + TkKwManualhull -> cont 41#; + TkKwIntersection -> cont 42#; + TkKwPairwisecheck -> cont 43#; + TkKwHull -> cont 44#; + TkKwFixtestpost -> cont 45#; + TkKwFixtestinv -> cont 46#; + TkKwPickEqFromEq -> cont 47#; + TkKwPickGEqFromEq -> cont 48#; + TkKwSatEQfromEQ -> cont 49#; + TkKwSatGEQfromEQ -> cont 50#; + _ -> happyError' (tk, []) + }) + +happyError_ explist 51# tk = happyError' (tk, explist) +happyError_ explist _ tk = happyError' (tk, explist) + +happyThen :: () => P a -> (a -> P b) -> P b +happyThen = (Prelude.>>=) +happyReturn :: () => a -> P a +happyReturn = (Prelude.return) +#if __GLASGOW_HASKELL__ >= 710 +happyParse :: () => Happy_GHC_Exts.Int# -> P (HappyAbsSyn _ _ _) + +happyNewToken :: () => Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _) -> P (HappyAbsSyn _ _ _) + +happyDoAction :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _) -> P (HappyAbsSyn _ _ _) + +happyReduceArr :: () => Happy_Data_Array.Array Prelude.Int (Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _) -> P (HappyAbsSyn _ _ _)) + +#endif +happyThen1 :: () => P a -> (a -> P b) -> P b +happyThen1 = happyThen +happyReturn1 :: () => a -> P a +happyReturn1 = happyReturn +happyError' :: () => ((Tk), [Prelude.String]) -> P a +happyError' tk = (\(tokens, explist) -> happyError) tk +parseCalc = happySomeParser where + happySomeParser = happyThen (happyParse 0#) (\x -> happyReturn (let {(HappyWrap4 x') = happyOut4 x} in x')) + +happySeq = happyDontSeq + + +happyError :: P a +happyError = do l <- getLineNum + s <- getInput + error $ "Parse error on line " ++ (show l) ++ " rest of line: " ++ (takeWhile (/= '\n') s) + +minus_update :: [Update] -> [Update] +minus_update [] = [] +minus_update ((Const i):us) = (Const (- i)):(minus_update us) +minus_update ((Coef v i):us) = (Coef v (- i)):(minus_update us) + +--returning type varies depending on the grammar's start symbol +parse :: String -> Flags -> IO () +parse s flags = + let listFunc = runP s parseCalc in + let parseFuncFS = foldM (\env -> \func -> func env) emptyRelEnv listFunc in + runFS (initialState flags) parseFuncFS >>= \lastenv -> return () + +type RelEnv = [(Lit,Value)] + +data Value = QF QFormula + | F Formula + | R RecPost + +emptyRelEnv :: RelEnv +emptyRelEnv = [] + +extendRelEnv :: RelEnv -> (Lit,Value) -> RelEnv +extendRelEnv gamma (var,ty) = (var,ty):gamma + +lookupVar :: Lit -> RelEnv -> Maybe Value +lookupVar lit [] = Nothing +lookupVar lit env@((v,f):rest) | (lit == v) = Just f + | otherwise = lookupVar lit rest + +groupDisjuncts:: [(Formula,Int)] -> [Int] -> [Formula] -> [Formula] +groupDisjuncts [] uniqueIds partialFormulae = partialFormulae +groupDisjuncts ((d,groupId):disj) uniqueIds partialFormulae = + let ix = fromJust (elemIndex groupId uniqueIds) in + let newPartialFormulae = updateList partialFormulae ix (Or [partialFormulae!!ix,d]) in + groupDisjuncts disj uniqueIds newPartialFormulae + +--updateList:: [a] -> (Int,a) -> [a] +--updateList xs (i,upd) = updateList1 xs (i,upd) 0 +-- where +-- updateList1 xs (i,upd) j = +-- if (i==j) then upd:(tail xs) +-- else updateList1 (tail xs) (i,upd) (j+1) +{-# LINE 1 "templates/GenericTemplate.hs" #-} +-- $Id: GenericTemplate.hs,v 1.26 2005/01/14 14:47:22 simonmar Exp $ + + + + + + + + + + + + + +-- Do not remove this comment. Required to fix CPP parsing when using GCC and a clang-compiled alex. +#if __GLASGOW_HASKELL__ > 706 +#define LT(n,m) ((Happy_GHC_Exts.tagToEnum# (n Happy_GHC_Exts.<# m)) :: Prelude.Bool) +#define GTE(n,m) ((Happy_GHC_Exts.tagToEnum# (n Happy_GHC_Exts.>=# m)) :: Prelude.Bool) +#define EQ(n,m) ((Happy_GHC_Exts.tagToEnum# (n Happy_GHC_Exts.==# m)) :: Prelude.Bool) +#else +#define LT(n,m) (n Happy_GHC_Exts.<# m) +#define GTE(n,m) (n Happy_GHC_Exts.>=# m) +#define EQ(n,m) (n Happy_GHC_Exts.==# m) +#endif + + + + + + + + + + + + + + + + + + + +data Happy_IntList = HappyCons Happy_GHC_Exts.Int# Happy_IntList + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +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 ERROR_TOK, 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 0# tk st sts (_ `HappyStk` ans `HappyStk` _) = + happyReturn1 ans +happyAccept j tk st sts (HappyStk ans _) = + (happyTcHack j (happyTcHack st)) (happyReturn1 ans) + +----------------------------------------------------------------------------- +-- Arrays only: do the next action + + + +happyDoAction i tk st + = {- nothing -} + case action of + 0# -> {- nothing -} + happyFail (happyExpListPerState ((Happy_GHC_Exts.I# (st)) :: Prelude.Int)) i tk st + -1# -> {- nothing -} + happyAccept i tk st + n | LT(n,(0# :: Happy_GHC_Exts.Int#)) -> {- nothing -} + (happyReduceArr Happy_Data_Array.! rule) i tk st + where rule = (Happy_GHC_Exts.I# ((Happy_GHC_Exts.negateInt# ((n Happy_GHC_Exts.+# (1# :: Happy_GHC_Exts.Int#)))))) + n -> {- nothing -} + happyShift new_state i tk st + where new_state = (n Happy_GHC_Exts.-# (1# :: Happy_GHC_Exts.Int#)) + where off = happyAdjustOffset (indexShortOffAddr happyActOffsets st) + off_i = (off Happy_GHC_Exts.+# i) + check = if GTE(off_i,(0# :: Happy_GHC_Exts.Int#)) + then EQ(indexShortOffAddr happyCheck off_i, i) + else Prelude.False + action + | check = indexShortOffAddr happyTable off_i + | Prelude.otherwise = indexShortOffAddr happyDefActions st + + + + +indexShortOffAddr (HappyA# arr) off = + Happy_GHC_Exts.narrow16Int# i + where + i = Happy_GHC_Exts.word2Int# (Happy_GHC_Exts.or# (Happy_GHC_Exts.uncheckedShiftL# high 8#) low) + high = Happy_GHC_Exts.int2Word# (Happy_GHC_Exts.ord# (Happy_GHC_Exts.indexCharOffAddr# arr (off' Happy_GHC_Exts.+# 1#))) + low = Happy_GHC_Exts.int2Word# (Happy_GHC_Exts.ord# (Happy_GHC_Exts.indexCharOffAddr# arr off')) + off' = off Happy_GHC_Exts.*# 2# + + + + +{-# INLINE happyLt #-} +happyLt x y = LT(x,y) + + +readArrayBit arr bit = + Bits.testBit (Happy_GHC_Exts.I# (indexShortOffAddr arr ((unbox_int bit) `Happy_GHC_Exts.iShiftRA#` 4#))) (bit `Prelude.mod` 16) + where unbox_int (Happy_GHC_Exts.I# x) = x + + + + + + +data HappyAddr = HappyA# Happy_GHC_Exts.Addr# + + +----------------------------------------------------------------------------- +-- HappyState data type (not arrays) + + + + + + + + + + + + + +----------------------------------------------------------------------------- +-- Shifting a token + +happyShift new_state 0# tk st sts stk@(x `HappyStk` _) = + let i = (case Happy_GHC_Exts.unsafeCoerce# x of { (Happy_GHC_Exts.I# (i)) -> i }) in +-- trace "shifting the error token" $ + happyDoAction i tk new_state (HappyCons (st) (sts)) (stk) + +happyShift new_state i tk st sts stk = + happyNewToken new_state (HappyCons (st) (sts)) ((happyInTok (tk))`HappyStk`stk) + +-- happyReduce is specialised for the common cases. + +happySpecReduce_0 i fn 0# tk st sts stk + = happyFail [] 0# tk st sts stk +happySpecReduce_0 nt fn j tk st@((action)) sts stk + = happyGoto nt j tk st (HappyCons (st) (sts)) (fn `HappyStk` stk) + +happySpecReduce_1 i fn 0# tk st sts stk + = happyFail [] 0# tk st sts stk +happySpecReduce_1 nt fn j tk _ sts@((HappyCons (st@(action)) (_))) (v1`HappyStk`stk') + = let r = fn v1 in + happySeq r (happyGoto nt j tk st sts (r `HappyStk` stk')) + +happySpecReduce_2 i fn 0# tk st sts stk + = happyFail [] 0# tk st sts stk +happySpecReduce_2 nt fn j tk _ (HappyCons (_) (sts@((HappyCons (st@(action)) (_))))) (v1`HappyStk`v2`HappyStk`stk') + = let r = fn v1 v2 in + happySeq r (happyGoto nt j tk st sts (r `HappyStk` stk')) + +happySpecReduce_3 i fn 0# tk st sts stk + = happyFail [] 0# tk st sts stk +happySpecReduce_3 nt fn j tk _ (HappyCons (_) ((HappyCons (_) (sts@((HappyCons (st@(action)) (_))))))) (v1`HappyStk`v2`HappyStk`v3`HappyStk`stk') + = let r = fn v1 v2 v3 in + happySeq r (happyGoto nt j tk st sts (r `HappyStk` stk')) + +happyReduce k i fn 0# tk st sts stk + = happyFail [] 0# tk st sts stk +happyReduce k nt fn j tk st sts stk + = case happyDrop (k Happy_GHC_Exts.-# (1# :: Happy_GHC_Exts.Int#)) sts of + sts1@((HappyCons (st1@(action)) (_))) -> + let r = fn stk in -- it doesn't hurt to always seq here... + happyDoSeq r (happyGoto nt j tk st1 sts1 r) + +happyMonadReduce k nt fn 0# tk st sts stk + = happyFail [] 0# tk st sts stk +happyMonadReduce k nt fn j tk st sts stk = + case happyDrop k (HappyCons (st) (sts)) of + sts1@((HappyCons (st1@(action)) (_))) -> + let drop_stk = happyDropStk k stk in + happyThen1 (fn stk tk) (\r -> happyGoto nt j tk st1 sts1 (r `HappyStk` drop_stk)) + +happyMonad2Reduce k nt fn 0# tk st sts stk + = happyFail [] 0# tk st sts stk +happyMonad2Reduce k nt fn j tk st sts stk = + case happyDrop k (HappyCons (st) (sts)) of + sts1@((HappyCons (st1@(action)) (_))) -> + let drop_stk = happyDropStk k stk + + off = happyAdjustOffset (indexShortOffAddr happyGotoOffsets st1) + off_i = (off Happy_GHC_Exts.+# nt) + new_state = indexShortOffAddr happyTable off_i + + + + + in + happyThen1 (fn stk tk) (\r -> happyNewToken new_state sts1 (r `HappyStk` drop_stk)) + +happyDrop 0# l = l +happyDrop n (HappyCons (_) (t)) = happyDrop (n Happy_GHC_Exts.-# (1# :: Happy_GHC_Exts.Int#)) t + +happyDropStk 0# l = l +happyDropStk n (x `HappyStk` xs) = happyDropStk (n Happy_GHC_Exts.-# (1#::Happy_GHC_Exts.Int#)) xs + +----------------------------------------------------------------------------- +-- Moving to a new state after a reduction + + +happyGoto nt j tk st = + {- nothing -} + happyDoAction j tk new_state + where off = happyAdjustOffset (indexShortOffAddr happyGotoOffsets st) + off_i = (off Happy_GHC_Exts.+# nt) + new_state = indexShortOffAddr happyTable off_i + + + + +----------------------------------------------------------------------------- +-- Error recovery (ERROR_TOK is the error token) + +-- parse error if we are in recovery and we fail again +happyFail explist 0# tk old_st _ stk@(x `HappyStk` _) = + let i = (case Happy_GHC_Exts.unsafeCoerce# x of { (Happy_GHC_Exts.I# (i)) -> i }) in +-- trace "failing" $ + happyError_ explist i 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 ERROR_TOK tk old_st CONS(HAPPYSTATE(action),sts) + (saved_tok `HappyStk` _ `HappyStk` stk) = +-- trace ("discarding state, depth " ++ show (length stk)) $ + DO_ACTION(action,ERROR_TOK,tk,sts,(saved_tok`HappyStk`stk)) +-} + +-- Enter error recovery: generate an error token, +-- save the old token and carry on. +happyFail explist i tk (action) sts stk = +-- trace "entering error recovery" $ + happyDoAction 0# tk action sts ((Happy_GHC_Exts.unsafeCoerce# (Happy_GHC_Exts.I# (i))) `HappyStk` stk) + +-- Internal happy errors: + +notHappyAtAll :: a +notHappyAtAll = Prelude.error "Internal Happy error\n" + +----------------------------------------------------------------------------- +-- Hack to get the typechecker to accept our action functions + + +happyTcHack :: Happy_GHC_Exts.Int# -> a -> a +happyTcHack x y = y +{-# INLINE happyTcHack #-} + + +----------------------------------------------------------------------------- +-- 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 `Prelude.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. + + +{-# NOINLINE happyDoAction #-} +{-# NOINLINE happyTable #-} +{-# NOINLINE happyCheck #-} +{-# NOINLINE happyActOffsets #-} +{-# NOINLINE happyGotoOffsets #-} +{-# NOINLINE happyDefActions #-} + +{-# 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. diff --git a/ImpParser.hs b/ImpParser.hs new file mode 100644 index 0000000..bb236ee --- /dev/null +++ b/ImpParser.hs @@ -0,0 +1,2890 @@ +{-# OPTIONS_GHC -w #-} +{-# OPTIONS -XMagicHash -XBangPatterns -XTypeSynonymInstances -XFlexibleInstances -cpp #-} +#if __GLASGOW_HASKELL__ >= 710 +{-# OPTIONS_GHC -XPartialTypeSignatures #-} +#endif +module ImpParser where +import ImpAST +import ImpLexer(runP,P(..),Tk(..),lexer,getLineNum,getInput) +import MyPrelude +import qualified Data.Array as Happy_Data_Array +import qualified Data.Bits as Bits +import qualified GHC.Exts as Happy_GHC_Exts +import Control.Applicative(Applicative(..)) +import Control.Monad (ap) + +-- parser produced by Happy Version 1.20.1.1 + +newtype HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22 t23 t24 t25 t26 t27 t28 t29 t30 t31 t32 t33 t34 t35 t36 t37 t38 t39 t40 t41 t42 t43 t44 t45 t46 t47 t48 t49 t56 = HappyAbsSyn HappyAny +#if __GLASGOW_HASKELL__ >= 607 +type HappyAny = Happy_GHC_Exts.Any +#else +type HappyAny = forall a . a +#endif +newtype HappyWrap5 = HappyWrap5 (IO Prog) +happyIn5 :: (IO Prog) -> (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22 t23 t24 t25 t26 t27 t28 t29 t30 t31 t32 t33 t34 t35 t36 t37 t38 t39 t40 t41 t42 t43 t44 t45 t46 t47 t48 t49 t56) +happyIn5 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap5 x) +{-# INLINE happyIn5 #-} +happyOut5 :: (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22 t23 t24 t25 t26 t27 t28 t29 t30 t31 t32 t33 t34 t35 t36 t37 t38 t39 t40 t41 t42 t43 t44 t45 t46 t47 t48 t49 t56) -> HappyWrap5 +happyOut5 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut5 #-} +newtype HappyWrap6 = HappyWrap6 ([IO (String,String)]) +happyIn6 :: ([IO (String,String)]) -> (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22 t23 t24 t25 t26 t27 t28 t29 t30 t31 t32 t33 t34 t35 t36 t37 t38 t39 t40 t41 t42 t43 t44 t45 t46 t47 t48 t49 t56) +happyIn6 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap6 x) +{-# INLINE happyIn6 #-} +happyOut6 :: (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22 t23 t24 t25 t26 t27 t28 t29 t30 t31 t32 t33 t34 t35 t36 t37 t38 t39 t40 t41 t42 t43 t44 t45 t46 t47 t48 t49 t56) -> HappyWrap6 +happyOut6 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut6 #-} +happyIn7 :: t7 -> (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22 t23 t24 t25 t26 t27 t28 t29 t30 t31 t32 t33 t34 t35 t36 t37 t38 t39 t40 t41 t42 t43 t44 t45 t46 t47 t48 t49 t56) +happyIn7 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn7 #-} +happyOut7 :: (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22 t23 t24 t25 t26 t27 t28 t29 t30 t31 t32 t33 t34 t35 t36 t37 t38 t39 t40 t41 t42 t43 t44 t45 t46 t47 t48 t49 t56) -> t7 +happyOut7 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut7 #-} +happyIn8 :: t8 -> (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22 t23 t24 t25 t26 t27 t28 t29 t30 t31 t32 t33 t34 t35 t36 t37 t38 t39 t40 t41 t42 t43 t44 t45 t46 t47 t48 t49 t56) +happyIn8 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn8 #-} +happyOut8 :: (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22 t23 t24 t25 t26 t27 t28 t29 t30 t31 t32 t33 t34 t35 t36 t37 t38 t39 t40 t41 t42 t43 t44 t45 t46 t47 t48 t49 t56) -> t8 +happyOut8 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut8 #-} +happyIn9 :: t9 -> (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22 t23 t24 t25 t26 t27 t28 t29 t30 t31 t32 t33 t34 t35 t36 t37 t38 t39 t40 t41 t42 t43 t44 t45 t46 t47 t48 t49 t56) +happyIn9 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn9 #-} +happyOut9 :: (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22 t23 t24 t25 t26 t27 t28 t29 t30 t31 t32 t33 t34 t35 t36 t37 t38 t39 t40 t41 t42 t43 t44 t45 t46 t47 t48 t49 t56) -> t9 +happyOut9 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut9 #-} +happyIn10 :: t10 -> (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22 t23 t24 t25 t26 t27 t28 t29 t30 t31 t32 t33 t34 t35 t36 t37 t38 t39 t40 t41 t42 t43 t44 t45 t46 t47 t48 t49 t56) +happyIn10 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn10 #-} +happyOut10 :: (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22 t23 t24 t25 t26 t27 t28 t29 t30 t31 t32 t33 t34 t35 t36 t37 t38 t39 t40 t41 t42 t43 t44 t45 t46 t47 t48 t49 t56) -> t10 +happyOut10 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut10 #-} +happyIn11 :: t11 -> (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22 t23 t24 t25 t26 t27 t28 t29 t30 t31 t32 t33 t34 t35 t36 t37 t38 t39 t40 t41 t42 t43 t44 t45 t46 t47 t48 t49 t56) +happyIn11 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn11 #-} +happyOut11 :: (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22 t23 t24 t25 t26 t27 t28 t29 t30 t31 t32 t33 t34 t35 t36 t37 t38 t39 t40 t41 t42 t43 t44 t45 t46 t47 t48 t49 t56) -> t11 +happyOut11 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut11 #-} +happyIn12 :: t12 -> (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22 t23 t24 t25 t26 t27 t28 t29 t30 t31 t32 t33 t34 t35 t36 t37 t38 t39 t40 t41 t42 t43 t44 t45 t46 t47 t48 t49 t56) +happyIn12 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn12 #-} +happyOut12 :: (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22 t23 t24 t25 t26 t27 t28 t29 t30 t31 t32 t33 t34 t35 t36 t37 t38 t39 t40 t41 t42 t43 t44 t45 t46 t47 t48 t49 t56) -> t12 +happyOut12 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut12 #-} +happyIn13 :: t13 -> (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22 t23 t24 t25 t26 t27 t28 t29 t30 t31 t32 t33 t34 t35 t36 t37 t38 t39 t40 t41 t42 t43 t44 t45 t46 t47 t48 t49 t56) +happyIn13 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn13 #-} +happyOut13 :: (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22 t23 t24 t25 t26 t27 t28 t29 t30 t31 t32 t33 t34 t35 t36 t37 t38 t39 t40 t41 t42 t43 t44 t45 t46 t47 t48 t49 t56) -> t13 +happyOut13 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut13 #-} +happyIn14 :: t14 -> (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22 t23 t24 t25 t26 t27 t28 t29 t30 t31 t32 t33 t34 t35 t36 t37 t38 t39 t40 t41 t42 t43 t44 t45 t46 t47 t48 t49 t56) +happyIn14 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn14 #-} +happyOut14 :: (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22 t23 t24 t25 t26 t27 t28 t29 t30 t31 t32 t33 t34 t35 t36 t37 t38 t39 t40 t41 t42 t43 t44 t45 t46 t47 t48 t49 t56) -> t14 +happyOut14 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut14 #-} +happyIn15 :: t15 -> (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22 t23 t24 t25 t26 t27 t28 t29 t30 t31 t32 t33 t34 t35 t36 t37 t38 t39 t40 t41 t42 t43 t44 t45 t46 t47 t48 t49 t56) +happyIn15 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn15 #-} +happyOut15 :: (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22 t23 t24 t25 t26 t27 t28 t29 t30 t31 t32 t33 t34 t35 t36 t37 t38 t39 t40 t41 t42 t43 t44 t45 t46 t47 t48 t49 t56) -> t15 +happyOut15 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut15 #-} +happyIn16 :: t16 -> (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22 t23 t24 t25 t26 t27 t28 t29 t30 t31 t32 t33 t34 t35 t36 t37 t38 t39 t40 t41 t42 t43 t44 t45 t46 t47 t48 t49 t56) +happyIn16 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn16 #-} +happyOut16 :: (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22 t23 t24 t25 t26 t27 t28 t29 t30 t31 t32 t33 t34 t35 t36 t37 t38 t39 t40 t41 t42 t43 t44 t45 t46 t47 t48 t49 t56) -> t16 +happyOut16 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut16 #-} +happyIn17 :: t17 -> (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22 t23 t24 t25 t26 t27 t28 t29 t30 t31 t32 t33 t34 t35 t36 t37 t38 t39 t40 t41 t42 t43 t44 t45 t46 t47 t48 t49 t56) +happyIn17 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn17 #-} +happyOut17 :: (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22 t23 t24 t25 t26 t27 t28 t29 t30 t31 t32 t33 t34 t35 t36 t37 t38 t39 t40 t41 t42 t43 t44 t45 t46 t47 t48 t49 t56) -> t17 +happyOut17 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut17 #-} +happyIn18 :: t18 -> (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22 t23 t24 t25 t26 t27 t28 t29 t30 t31 t32 t33 t34 t35 t36 t37 t38 t39 t40 t41 t42 t43 t44 t45 t46 t47 t48 t49 t56) +happyIn18 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn18 #-} +happyOut18 :: (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22 t23 t24 t25 t26 t27 t28 t29 t30 t31 t32 t33 t34 t35 t36 t37 t38 t39 t40 t41 t42 t43 t44 t45 t46 t47 t48 t49 t56) -> t18 +happyOut18 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut18 #-} +happyIn19 :: t19 -> (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22 t23 t24 t25 t26 t27 t28 t29 t30 t31 t32 t33 t34 t35 t36 t37 t38 t39 t40 t41 t42 t43 t44 t45 t46 t47 t48 t49 t56) +happyIn19 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn19 #-} +happyOut19 :: (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22 t23 t24 t25 t26 t27 t28 t29 t30 t31 t32 t33 t34 t35 t36 t37 t38 t39 t40 t41 t42 t43 t44 t45 t46 t47 t48 t49 t56) -> t19 +happyOut19 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut19 #-} +happyIn20 :: t20 -> (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22 t23 t24 t25 t26 t27 t28 t29 t30 t31 t32 t33 t34 t35 t36 t37 t38 t39 t40 t41 t42 t43 t44 t45 t46 t47 t48 t49 t56) +happyIn20 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn20 #-} +happyOut20 :: (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22 t23 t24 t25 t26 t27 t28 t29 t30 t31 t32 t33 t34 t35 t36 t37 t38 t39 t40 t41 t42 t43 t44 t45 t46 t47 t48 t49 t56) -> t20 +happyOut20 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut20 #-} +happyIn21 :: t21 -> (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22 t23 t24 t25 t26 t27 t28 t29 t30 t31 t32 t33 t34 t35 t36 t37 t38 t39 t40 t41 t42 t43 t44 t45 t46 t47 t48 t49 t56) +happyIn21 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn21 #-} +happyOut21 :: (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22 t23 t24 t25 t26 t27 t28 t29 t30 t31 t32 t33 t34 t35 t36 t37 t38 t39 t40 t41 t42 t43 t44 t45 t46 t47 t48 t49 t56) -> t21 +happyOut21 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut21 #-} +happyIn22 :: t22 -> (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22 t23 t24 t25 t26 t27 t28 t29 t30 t31 t32 t33 t34 t35 t36 t37 t38 t39 t40 t41 t42 t43 t44 t45 t46 t47 t48 t49 t56) +happyIn22 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn22 #-} +happyOut22 :: (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22 t23 t24 t25 t26 t27 t28 t29 t30 t31 t32 t33 t34 t35 t36 t37 t38 t39 t40 t41 t42 t43 t44 t45 t46 t47 t48 t49 t56) -> t22 +happyOut22 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut22 #-} +happyIn23 :: t23 -> (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22 t23 t24 t25 t26 t27 t28 t29 t30 t31 t32 t33 t34 t35 t36 t37 t38 t39 t40 t41 t42 t43 t44 t45 t46 t47 t48 t49 t56) +happyIn23 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn23 #-} +happyOut23 :: (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22 t23 t24 t25 t26 t27 t28 t29 t30 t31 t32 t33 t34 t35 t36 t37 t38 t39 t40 t41 t42 t43 t44 t45 t46 t47 t48 t49 t56) -> t23 +happyOut23 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut23 #-} +happyIn24 :: t24 -> (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22 t23 t24 t25 t26 t27 t28 t29 t30 t31 t32 t33 t34 t35 t36 t37 t38 t39 t40 t41 t42 t43 t44 t45 t46 t47 t48 t49 t56) +happyIn24 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn24 #-} +happyOut24 :: (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22 t23 t24 t25 t26 t27 t28 t29 t30 t31 t32 t33 t34 t35 t36 t37 t38 t39 t40 t41 t42 t43 t44 t45 t46 t47 t48 t49 t56) -> t24 +happyOut24 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut24 #-} +happyIn25 :: t25 -> (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22 t23 t24 t25 t26 t27 t28 t29 t30 t31 t32 t33 t34 t35 t36 t37 t38 t39 t40 t41 t42 t43 t44 t45 t46 t47 t48 t49 t56) +happyIn25 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn25 #-} +happyOut25 :: (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22 t23 t24 t25 t26 t27 t28 t29 t30 t31 t32 t33 t34 t35 t36 t37 t38 t39 t40 t41 t42 t43 t44 t45 t46 t47 t48 t49 t56) -> t25 +happyOut25 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut25 #-} +happyIn26 :: t26 -> (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22 t23 t24 t25 t26 t27 t28 t29 t30 t31 t32 t33 t34 t35 t36 t37 t38 t39 t40 t41 t42 t43 t44 t45 t46 t47 t48 t49 t56) +happyIn26 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn26 #-} +happyOut26 :: (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22 t23 t24 t25 t26 t27 t28 t29 t30 t31 t32 t33 t34 t35 t36 t37 t38 t39 t40 t41 t42 t43 t44 t45 t46 t47 t48 t49 t56) -> t26 +happyOut26 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut26 #-} +happyIn27 :: t27 -> (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22 t23 t24 t25 t26 t27 t28 t29 t30 t31 t32 t33 t34 t35 t36 t37 t38 t39 t40 t41 t42 t43 t44 t45 t46 t47 t48 t49 t56) +happyIn27 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn27 #-} +happyOut27 :: (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22 t23 t24 t25 t26 t27 t28 t29 t30 t31 t32 t33 t34 t35 t36 t37 t38 t39 t40 t41 t42 t43 t44 t45 t46 t47 t48 t49 t56) -> t27 +happyOut27 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut27 #-} +happyIn28 :: t28 -> (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22 t23 t24 t25 t26 t27 t28 t29 t30 t31 t32 t33 t34 t35 t36 t37 t38 t39 t40 t41 t42 t43 t44 t45 t46 t47 t48 t49 t56) +happyIn28 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn28 #-} +happyOut28 :: (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22 t23 t24 t25 t26 t27 t28 t29 t30 t31 t32 t33 t34 t35 t36 t37 t38 t39 t40 t41 t42 t43 t44 t45 t46 t47 t48 t49 t56) -> t28 +happyOut28 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut28 #-} +happyIn29 :: t29 -> (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22 t23 t24 t25 t26 t27 t28 t29 t30 t31 t32 t33 t34 t35 t36 t37 t38 t39 t40 t41 t42 t43 t44 t45 t46 t47 t48 t49 t56) +happyIn29 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn29 #-} +happyOut29 :: (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22 t23 t24 t25 t26 t27 t28 t29 t30 t31 t32 t33 t34 t35 t36 t37 t38 t39 t40 t41 t42 t43 t44 t45 t46 t47 t48 t49 t56) -> t29 +happyOut29 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut29 #-} +happyIn30 :: t30 -> (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22 t23 t24 t25 t26 t27 t28 t29 t30 t31 t32 t33 t34 t35 t36 t37 t38 t39 t40 t41 t42 t43 t44 t45 t46 t47 t48 t49 t56) +happyIn30 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn30 #-} +happyOut30 :: (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22 t23 t24 t25 t26 t27 t28 t29 t30 t31 t32 t33 t34 t35 t36 t37 t38 t39 t40 t41 t42 t43 t44 t45 t46 t47 t48 t49 t56) -> t30 +happyOut30 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut30 #-} +happyIn31 :: t31 -> (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22 t23 t24 t25 t26 t27 t28 t29 t30 t31 t32 t33 t34 t35 t36 t37 t38 t39 t40 t41 t42 t43 t44 t45 t46 t47 t48 t49 t56) +happyIn31 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn31 #-} +happyOut31 :: (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22 t23 t24 t25 t26 t27 t28 t29 t30 t31 t32 t33 t34 t35 t36 t37 t38 t39 t40 t41 t42 t43 t44 t45 t46 t47 t48 t49 t56) -> t31 +happyOut31 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut31 #-} +happyIn32 :: t32 -> (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22 t23 t24 t25 t26 t27 t28 t29 t30 t31 t32 t33 t34 t35 t36 t37 t38 t39 t40 t41 t42 t43 t44 t45 t46 t47 t48 t49 t56) +happyIn32 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn32 #-} +happyOut32 :: (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22 t23 t24 t25 t26 t27 t28 t29 t30 t31 t32 t33 t34 t35 t36 t37 t38 t39 t40 t41 t42 t43 t44 t45 t46 t47 t48 t49 t56) -> t32 +happyOut32 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut32 #-} +happyIn33 :: t33 -> (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22 t23 t24 t25 t26 t27 t28 t29 t30 t31 t32 t33 t34 t35 t36 t37 t38 t39 t40 t41 t42 t43 t44 t45 t46 t47 t48 t49 t56) +happyIn33 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn33 #-} +happyOut33 :: (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22 t23 t24 t25 t26 t27 t28 t29 t30 t31 t32 t33 t34 t35 t36 t37 t38 t39 t40 t41 t42 t43 t44 t45 t46 t47 t48 t49 t56) -> t33 +happyOut33 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut33 #-} +happyIn34 :: t34 -> (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22 t23 t24 t25 t26 t27 t28 t29 t30 t31 t32 t33 t34 t35 t36 t37 t38 t39 t40 t41 t42 t43 t44 t45 t46 t47 t48 t49 t56) +happyIn34 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn34 #-} +happyOut34 :: (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22 t23 t24 t25 t26 t27 t28 t29 t30 t31 t32 t33 t34 t35 t36 t37 t38 t39 t40 t41 t42 t43 t44 t45 t46 t47 t48 t49 t56) -> t34 +happyOut34 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut34 #-} +happyIn35 :: t35 -> (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22 t23 t24 t25 t26 t27 t28 t29 t30 t31 t32 t33 t34 t35 t36 t37 t38 t39 t40 t41 t42 t43 t44 t45 t46 t47 t48 t49 t56) +happyIn35 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn35 #-} +happyOut35 :: (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22 t23 t24 t25 t26 t27 t28 t29 t30 t31 t32 t33 t34 t35 t36 t37 t38 t39 t40 t41 t42 t43 t44 t45 t46 t47 t48 t49 t56) -> t35 +happyOut35 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut35 #-} +happyIn36 :: t36 -> (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22 t23 t24 t25 t26 t27 t28 t29 t30 t31 t32 t33 t34 t35 t36 t37 t38 t39 t40 t41 t42 t43 t44 t45 t46 t47 t48 t49 t56) +happyIn36 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn36 #-} +happyOut36 :: (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22 t23 t24 t25 t26 t27 t28 t29 t30 t31 t32 t33 t34 t35 t36 t37 t38 t39 t40 t41 t42 t43 t44 t45 t46 t47 t48 t49 t56) -> t36 +happyOut36 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut36 #-} +happyIn37 :: t37 -> (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22 t23 t24 t25 t26 t27 t28 t29 t30 t31 t32 t33 t34 t35 t36 t37 t38 t39 t40 t41 t42 t43 t44 t45 t46 t47 t48 t49 t56) +happyIn37 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn37 #-} +happyOut37 :: (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22 t23 t24 t25 t26 t27 t28 t29 t30 t31 t32 t33 t34 t35 t36 t37 t38 t39 t40 t41 t42 t43 t44 t45 t46 t47 t48 t49 t56) -> t37 +happyOut37 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut37 #-} +happyIn38 :: t38 -> (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22 t23 t24 t25 t26 t27 t28 t29 t30 t31 t32 t33 t34 t35 t36 t37 t38 t39 t40 t41 t42 t43 t44 t45 t46 t47 t48 t49 t56) +happyIn38 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn38 #-} +happyOut38 :: (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22 t23 t24 t25 t26 t27 t28 t29 t30 t31 t32 t33 t34 t35 t36 t37 t38 t39 t40 t41 t42 t43 t44 t45 t46 t47 t48 t49 t56) -> t38 +happyOut38 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut38 #-} +happyIn39 :: t39 -> (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22 t23 t24 t25 t26 t27 t28 t29 t30 t31 t32 t33 t34 t35 t36 t37 t38 t39 t40 t41 t42 t43 t44 t45 t46 t47 t48 t49 t56) +happyIn39 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn39 #-} +happyOut39 :: (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22 t23 t24 t25 t26 t27 t28 t29 t30 t31 t32 t33 t34 t35 t36 t37 t38 t39 t40 t41 t42 t43 t44 t45 t46 t47 t48 t49 t56) -> t39 +happyOut39 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut39 #-} +happyIn40 :: t40 -> (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22 t23 t24 t25 t26 t27 t28 t29 t30 t31 t32 t33 t34 t35 t36 t37 t38 t39 t40 t41 t42 t43 t44 t45 t46 t47 t48 t49 t56) +happyIn40 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn40 #-} +happyOut40 :: (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22 t23 t24 t25 t26 t27 t28 t29 t30 t31 t32 t33 t34 t35 t36 t37 t38 t39 t40 t41 t42 t43 t44 t45 t46 t47 t48 t49 t56) -> t40 +happyOut40 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut40 #-} +happyIn41 :: t41 -> (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22 t23 t24 t25 t26 t27 t28 t29 t30 t31 t32 t33 t34 t35 t36 t37 t38 t39 t40 t41 t42 t43 t44 t45 t46 t47 t48 t49 t56) +happyIn41 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn41 #-} +happyOut41 :: (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22 t23 t24 t25 t26 t27 t28 t29 t30 t31 t32 t33 t34 t35 t36 t37 t38 t39 t40 t41 t42 t43 t44 t45 t46 t47 t48 t49 t56) -> t41 +happyOut41 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut41 #-} +happyIn42 :: t42 -> (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22 t23 t24 t25 t26 t27 t28 t29 t30 t31 t32 t33 t34 t35 t36 t37 t38 t39 t40 t41 t42 t43 t44 t45 t46 t47 t48 t49 t56) +happyIn42 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn42 #-} +happyOut42 :: (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22 t23 t24 t25 t26 t27 t28 t29 t30 t31 t32 t33 t34 t35 t36 t37 t38 t39 t40 t41 t42 t43 t44 t45 t46 t47 t48 t49 t56) -> t42 +happyOut42 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut42 #-} +happyIn43 :: t43 -> (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22 t23 t24 t25 t26 t27 t28 t29 t30 t31 t32 t33 t34 t35 t36 t37 t38 t39 t40 t41 t42 t43 t44 t45 t46 t47 t48 t49 t56) +happyIn43 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn43 #-} +happyOut43 :: (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22 t23 t24 t25 t26 t27 t28 t29 t30 t31 t32 t33 t34 t35 t36 t37 t38 t39 t40 t41 t42 t43 t44 t45 t46 t47 t48 t49 t56) -> t43 +happyOut43 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut43 #-} +happyIn44 :: t44 -> (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22 t23 t24 t25 t26 t27 t28 t29 t30 t31 t32 t33 t34 t35 t36 t37 t38 t39 t40 t41 t42 t43 t44 t45 t46 t47 t48 t49 t56) +happyIn44 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn44 #-} +happyOut44 :: (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22 t23 t24 t25 t26 t27 t28 t29 t30 t31 t32 t33 t34 t35 t36 t37 t38 t39 t40 t41 t42 t43 t44 t45 t46 t47 t48 t49 t56) -> t44 +happyOut44 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut44 #-} +happyIn45 :: t45 -> (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22 t23 t24 t25 t26 t27 t28 t29 t30 t31 t32 t33 t34 t35 t36 t37 t38 t39 t40 t41 t42 t43 t44 t45 t46 t47 t48 t49 t56) +happyIn45 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn45 #-} +happyOut45 :: (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22 t23 t24 t25 t26 t27 t28 t29 t30 t31 t32 t33 t34 t35 t36 t37 t38 t39 t40 t41 t42 t43 t44 t45 t46 t47 t48 t49 t56) -> t45 +happyOut45 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut45 #-} +happyIn46 :: t46 -> (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22 t23 t24 t25 t26 t27 t28 t29 t30 t31 t32 t33 t34 t35 t36 t37 t38 t39 t40 t41 t42 t43 t44 t45 t46 t47 t48 t49 t56) +happyIn46 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn46 #-} +happyOut46 :: (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22 t23 t24 t25 t26 t27 t28 t29 t30 t31 t32 t33 t34 t35 t36 t37 t38 t39 t40 t41 t42 t43 t44 t45 t46 t47 t48 t49 t56) -> t46 +happyOut46 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut46 #-} +happyIn47 :: t47 -> (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22 t23 t24 t25 t26 t27 t28 t29 t30 t31 t32 t33 t34 t35 t36 t37 t38 t39 t40 t41 t42 t43 t44 t45 t46 t47 t48 t49 t56) +happyIn47 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn47 #-} +happyOut47 :: (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22 t23 t24 t25 t26 t27 t28 t29 t30 t31 t32 t33 t34 t35 t36 t37 t38 t39 t40 t41 t42 t43 t44 t45 t46 t47 t48 t49 t56) -> t47 +happyOut47 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut47 #-} +happyIn48 :: t48 -> (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22 t23 t24 t25 t26 t27 t28 t29 t30 t31 t32 t33 t34 t35 t36 t37 t38 t39 t40 t41 t42 t43 t44 t45 t46 t47 t48 t49 t56) +happyIn48 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn48 #-} +happyOut48 :: (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22 t23 t24 t25 t26 t27 t28 t29 t30 t31 t32 t33 t34 t35 t36 t37 t38 t39 t40 t41 t42 t43 t44 t45 t46 t47 t48 t49 t56) -> t48 +happyOut48 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut48 #-} +happyIn49 :: t49 -> (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22 t23 t24 t25 t26 t27 t28 t29 t30 t31 t32 t33 t34 t35 t36 t37 t38 t39 t40 t41 t42 t43 t44 t45 t46 t47 t48 t49 t56) +happyIn49 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn49 #-} +happyOut49 :: (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22 t23 t24 t25 t26 t27 t28 t29 t30 t31 t32 t33 t34 t35 t36 t37 t38 t39 t40 t41 t42 t43 t44 t45 t46 t47 t48 t49 t56) -> t49 +happyOut49 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut49 #-} +newtype HappyWrap50 = HappyWrap50 (Formula) +happyIn50 :: (Formula) -> (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22 t23 t24 t25 t26 t27 t28 t29 t30 t31 t32 t33 t34 t35 t36 t37 t38 t39 t40 t41 t42 t43 t44 t45 t46 t47 t48 t49 t56) +happyIn50 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap50 x) +{-# INLINE happyIn50 #-} +happyOut50 :: (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22 t23 t24 t25 t26 t27 t28 t29 t30 t31 t32 t33 t34 t35 t36 t37 t38 t39 t40 t41 t42 t43 t44 t45 t46 t47 t48 t49 t56) -> HappyWrap50 +happyOut50 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut50 #-} +newtype HappyWrap51 = HappyWrap51 ((Formula,[[Update]])) +happyIn51 :: ((Formula,[[Update]])) -> (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22 t23 t24 t25 t26 t27 t28 t29 t30 t31 t32 t33 t34 t35 t36 t37 t38 t39 t40 t41 t42 t43 t44 t45 t46 t47 t48 t49 t56) +happyIn51 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap51 x) +{-# INLINE happyIn51 #-} +happyOut51 :: (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22 t23 t24 t25 t26 t27 t28 t29 t30 t31 t32 t33 t34 t35 t36 t37 t38 t39 t40 t41 t42 t43 t44 t45 t46 t47 t48 t49 t56) -> HappyWrap51 +happyOut51 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut51 #-} +newtype HappyWrap52 = HappyWrap52 ((Formula,[[Update]])) +happyIn52 :: ((Formula,[[Update]])) -> (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22 t23 t24 t25 t26 t27 t28 t29 t30 t31 t32 t33 t34 t35 t36 t37 t38 t39 t40 t41 t42 t43 t44 t45 t46 t47 t48 t49 t56) +happyIn52 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap52 x) +{-# INLINE happyIn52 #-} +happyOut52 :: (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22 t23 t24 t25 t26 t27 t28 t29 t30 t31 t32 t33 t34 t35 t36 t37 t38 t39 t40 t41 t42 t43 t44 t45 t46 t47 t48 t49 t56) -> HappyWrap52 +happyOut52 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut52 #-} +newtype HappyWrap53 = HappyWrap53 (Tk) +happyIn53 :: (Tk) -> (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22 t23 t24 t25 t26 t27 t28 t29 t30 t31 t32 t33 t34 t35 t36 t37 t38 t39 t40 t41 t42 t43 t44 t45 t46 t47 t48 t49 t56) +happyIn53 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap53 x) +{-# INLINE happyIn53 #-} +happyOut53 :: (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22 t23 t24 t25 t26 t27 t28 t29 t30 t31 t32 t33 t34 t35 t36 t37 t38 t39 t40 t41 t42 t43 t44 t45 t46 t47 t48 t49 t56) -> HappyWrap53 +happyOut53 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut53 #-} +newtype HappyWrap54 = HappyWrap54 ([[Update]]) +happyIn54 :: ([[Update]]) -> (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22 t23 t24 t25 t26 t27 t28 t29 t30 t31 t32 t33 t34 t35 t36 t37 t38 t39 t40 t41 t42 t43 t44 t45 t46 t47 t48 t49 t56) +happyIn54 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap54 x) +{-# INLINE happyIn54 #-} +happyOut54 :: (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22 t23 t24 t25 t26 t27 t28 t29 t30 t31 t32 t33 t34 t35 t36 t37 t38 t39 t40 t41 t42 t43 t44 t45 t46 t47 t48 t49 t56) -> HappyWrap54 +happyOut54 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut54 #-} +newtype HappyWrap55 = HappyWrap55 ([Update]) +happyIn55 :: ([Update]) -> (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22 t23 t24 t25 t26 t27 t28 t29 t30 t31 t32 t33 t34 t35 t36 t37 t38 t39 t40 t41 t42 t43 t44 t45 t46 t47 t48 t49 t56) +happyIn55 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap55 x) +{-# INLINE happyIn55 #-} +happyOut55 :: (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22 t23 t24 t25 t26 t27 t28 t29 t30 t31 t32 t33 t34 t35 t36 t37 t38 t39 t40 t41 t42 t43 t44 t45 t46 t47 t48 t49 t56) -> HappyWrap55 +happyOut55 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut55 #-} +happyIn56 :: t56 -> (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22 t23 t24 t25 t26 t27 t28 t29 t30 t31 t32 t33 t34 t35 t36 t37 t38 t39 t40 t41 t42 t43 t44 t45 t46 t47 t48 t49 t56) +happyIn56 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn56 #-} +happyOut56 :: (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22 t23 t24 t25 t26 t27 t28 t29 t30 t31 t32 t33 t34 t35 t36 t37 t38 t39 t40 t41 t42 t43 t44 t45 t46 t47 t48 t49 t56) -> t56 +happyOut56 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut56 #-} +newtype HappyWrap57 = HappyWrap57 (QSizeVar) +happyIn57 :: (QSizeVar) -> (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22 t23 t24 t25 t26 t27 t28 t29 t30 t31 t32 t33 t34 t35 t36 t37 t38 t39 t40 t41 t42 t43 t44 t45 t46 t47 t48 t49 t56) +happyIn57 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap57 x) +{-# INLINE happyIn57 #-} +happyOut57 :: (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22 t23 t24 t25 t26 t27 t28 t29 t30 t31 t32 t33 t34 t35 t36 t37 t38 t39 t40 t41 t42 t43 t44 t45 t46 t47 t48 t49 t56) -> HappyWrap57 +happyOut57 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut57 #-} +happyInTok :: (Tk) -> (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22 t23 t24 t25 t26 t27 t28 t29 t30 t31 t32 t33 t34 t35 t36 t37 t38 t39 t40 t41 t42 t43 t44 t45 t46 t47 t48 t49 t56) +happyInTok x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyInTok #-} +happyOutTok :: (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22 t23 t24 t25 t26 t27 t28 t29 t30 t31 t32 t33 t34 t35 t36 t37 t38 t39 t40 t41 t42 t43 t44 t45 t46 t47 t48 t49 t56) -> (Tk) +happyOutTok x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOutTok #-} + + +happyExpList :: HappyAddr +happyExpList = HappyA# "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x78\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x78\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x30\x07\x00\x09\x00\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe0\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x03\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc0\x1c\x00\x24\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\xc0\xed\x67\x24\x08\x00\x10\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x80\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x23\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0c\x00\x40\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x60\x00\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x90\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x18\x00\x80\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x60\x00\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x98\x03\x80\x04\x00\x60\x00\x00\x00\x00\x00\x00\x00\xc0\x1c\x00\x24\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0c\x00\x40\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x60\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x21\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe0\x01\x7c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x90\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb7\x00\x90\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\xb8\x05\x80\x04\x00\x00\x02\x00\x00\x00\x00\x00\x00\xc0\x2d\x00\x24\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x70\x0b\x00\x09\x00\x00\x04\x00\x00\x00\x00\x00\x00\x80\x5b\x00\x48\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf0\x02\x3e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdc\x02\x40\x02\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x40\x0f\xe0\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x78\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x03\xf8\x00\x00\x00\x00\x00\x00\x00\x00\xc0\x2d\x66\x24\x08\x00\x10\x00\x00\x00\x00\x00\x00\x00\x6e\x01\x20\x01\x00\x80\x00\x00\x00\x00\x00\x00\x00\x70\x8b\x19\x09\x02\x00\x04\x00\x00\x00\x00\x00\x00\x80\x5b\x00\x48\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\xdc\x02\x40\x02\x00\x00\x01\x00\x00\x00\x00\x00\x00\xe0\x16\x00\x12\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\xb7\x00\x90\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\xb8\x05\x80\x04\x00\x00\x02\x00\x00\x00\x00\x00\x00\xc0\x2d\x00\x24\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x6e\x01\x20\x01\x00\x80\x00\x00\x00\x00\x00\x00\x00\x70\x0b\x00\x09\x00\x00\x04\x00\x00\x00\x00\x00\x00\x80\x5b\x00\x48\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\xdc\x62\x46\x82\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x78\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc0\x1c\x00\x24\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\xe6\x00\x20\x01\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x60\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x60\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6e\x31\x23\x41\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe0\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x27\xf0\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6e\x01\x20\x01\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb7\x00\x90\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdc\x62\x46\x82\x00\x00\x01\x00\x00\x00\x00\x00\x00\xe0\x16\x33\x12\x04\x00\x08\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdc\x02\x40\x02\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0f\xe0\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9e\xc0\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb7\x00\x90\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc0\x2d\x66\x24\x08\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdc\x02\x40\x02\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2f\xe0\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x78\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"# + +{-# NOINLINE happyExpListPerState #-} +happyExpListPerState st = + token_strs_expected + where token_strs = ["error","%dummy","%start_parseProg","%start_parseLPrimDecl","Prog","LInclude","LInclude1","Include","LPrimDecl","LPrimDecl1","PrimDecl","LMethDecl","LMethDecl1","MethDecl","Ref","LQLabel","LQLabel1","QLabel","Label","EB","LTypedParam","LTypedParam1","TypedParam","LLabelledFormula","LLabelledFormula1","LabelledFormula","LLabelledExp","LLabelledExp1","LabelledExp","LVarDecl","VarDecl","LVarorIntNum","LVar1","LIntNum","OptInit","AnnTy","AnnPrimTy","OptAnn","AnnArrTy","LAnnPrimTy","LExp","LExp1","Exp","SimpleExp","Var","Const","Num","FormulaWithBkt","Formula","QFormula","LBExpr","BExpr","RelOp","LAExpr","AExpr","LPorUSizeVar","PorUSizeVar","lit","intNum","floatNum","stringLit","true","false","bogus","void","int","bool","float","if","ifnd","then","else","while","for","do","ref","'+'","'-'","'*'","'/'","'('","')'","';'","':='","'['","']'","'{'","'}'","','","'='","'<'","'>'","'>='","'<='","'&&'","'||'","where","':'","'.'","exists","forall","prime","rec","'error'","'#'","'include'","%eof"] + bit_start = st Prelude.* 107 + bit_end = (st Prelude.+ 1) Prelude.* 107 + read_bit = readArrayBit happyExpList + bits = Prelude.map read_bit [bit_start..bit_end Prelude.- 1] + bits_indexed = Prelude.zip bits [0..106] + token_strs_expected = Prelude.concatMap f bits_indexed + f (Prelude.False, _) = [] + f (Prelude.True, nr) = [token_strs Prelude.!! nr] + +happyActOffsets :: HappyAddr +happyActOffsets = HappyA# "\xf8\xff\x24\x02\xf8\xff\xee\xff\xf8\xff\x00\x00\x0a\x00\x56\x00\x24\x02\x00\x00\xc7\x00\xc2\x00\x00\x00\x00\x00\xc9\x00\xc9\x00\x00\x00\xdc\x00\x00\x00\x1f\x01\x00\x00\x24\x02\x17\x01\x00\x00\x3c\x01\x00\x00\x00\x00\xfd\xff\x00\x00\x24\x02\x00\x00\x6e\x01\x00\x00\x00\x00\x36\x00\x00\x00\xe8\xff\x3f\x01\x00\x00\x00\x00\x24\x02\x24\x02\x7d\x01\x8b\x01\x00\x00\x51\x01\x36\x00\xaf\x01\xc1\x01\xeb\x01\x00\x00\x00\x00\xda\x01\x00\x00\xdc\x01\xf9\xff\xdb\x01\x3c\x00\xf6\xff\x00\x00\x06\x02\x00\x00\xb4\x01\xe7\x00\x00\x00\x8d\x00\xfd\x01\x00\x00\x00\x00\x00\x00\x42\x01\x3c\x00\xec\x01\xef\x01\xf2\x01\x00\x00\x00\x00\xf5\x01\xf6\x01\x01\x00\x3b\x02\x46\x02\x46\x02\x35\x00\x2d\x01\x00\x00\x46\x02\x00\x00\x4f\x02\x00\x00\x00\x00\xd9\x00\xd9\x00\xd9\x00\xd9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd9\x00\x00\x00\x3c\x00\x3c\x00\xf3\x01\x00\x00\x00\x02\xd9\x00\x41\x01\x00\x02\x00\x00\x00\x00\x3a\x01\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x62\x00\x50\x01\x00\x00\xfe\x01\x38\x02\x00\x00\x00\x00\x30\x02\x00\x00\x40\x02\x24\x00\x43\x00\x35\x01\xa5\x01\x06\x01\x00\x00\x00\x00\x33\x02\x00\x00\x00\x00\x00\x00\x00\x00\x61\x01\x32\x00\x32\x00\x32\x00\x43\x02\x32\x00\x32\x00\x00\x00\x69\x00\x3d\x02\x5d\x02\x37\x02\x68\x01\x00\x00\x00\x00\x32\x00\x4f\x01\x37\x01\x49\x01\x21\x00\x32\x00\x21\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x21\x00\x00\x00\x44\x02\x86\x01\x44\x02\x00\x00\x48\x01\x60\x02\x42\x02\x4b\x02\x63\x02\x64\x02\x3c\x00\x3c\x00\x00\x00\x00\x00\x2d\x01\x8f\x00\xc3\x00\x00\x00\x00\x00\x00\x00\x48\x02\x00\x00\x4c\x02\x4d\x02\xa1\x00\x00\x00\x00\x00\x21\x00\x4a\x02\x4e\x02\x50\x02\x00\x00\x00\x00\x00\x00\x00\x00\xaa\x01\xaa\x01\xaa\x01\xaa\x01\xaa\x01\x00\x00\x00\x00\x8e\x01\x8e\x01\x52\x02\x51\x02\x53\x02\x1c\x02\x59\x02\x55\x02\x55\x02\x55\x02\x7a\x01\x00\x00\x69\x02\x56\x02\x54\x02\x57\x02\xfa\xff\x32\x00\x00\x00\x5c\x02\x65\x02\x00\x00\x32\x00\x5b\x02\x76\x02\x78\x02\x79\x02\x00\x00\x21\x00\x21\x00\xb1\x01\x7a\x02\x00\x00\x00\x00\x58\x02\x5e\x02\x5f\x02\x00\x00\x61\x02\x66\x02\x67\x02\x6a\x02\x00\x00\x00\x00\x32\x00\xbc\x01\x68\x02\x68\x02\x8c\x01\x00\x00\x6b\x02\x6c\x02\x7b\x02\x7b\x02\x32\x00\x00\x00\x00\x00\x1c\x02\x00\x00\x00\x00\x6d\x02\x81\x02\x83\x02\x00\x00\x21\x00\x71\x02\x00\x00\x72\x02\x32\x00\x93\x01\x6f\x02\x70\x02\x62\x02\x73\x02\x74\x02\x86\x02\x75\x02\x7c\x02\x1c\x02\x00\x00\x00\x00\x77\x02\x6e\x02\x7d\x02\x90\x02\x7e\x02\x7f\x02\x80\x02\x82\x02\x00\x00\x84\x02\x85\x02\x88\x02\x00\x00\x00\x00"# + +happyGotoOffsets :: HappyAddr +happyGotoOffsets = HappyA# "\x34\x02\x26\x00\x4a\x00\x31\x02\x93\x02\x00\x00\x00\x00\x00\x00\x28\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x87\x02\x89\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x63\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd2\x01\x00\x00\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8b\x02\x26\x02\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x01\x53\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8a\x02\x00\x00\x00\x00\x91\x02\x00\x00\xb9\x01\x00\x00\x00\x00\x8c\x02\x00\x00\x8d\x02\x00\x00\x00\x00\x00\x00\x8e\x02\x00\x00\x00\x00\x00\x00\x8f\x02\xc2\x01\x00\x00\x00\x00\x00\x00\x00\x00\x94\x02\x95\x02\x00\x00\x44\x00\x85\x01\x1f\x02\x21\x02\x00\x00\x00\x00\x00\x00\x92\x02\x00\x00\x00\x00\x00\x00\x00\x00\x75\x00\xbb\x00\x18\x02\x63\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1d\x02\x00\x00\xcb\x01\xd4\x01\x00\x00\x00\x00\x00\x00\x19\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2e\x00\x98\x00\x9c\x00\x00\x00\xa2\x00\xa6\x00\x00\x00\x96\x02\x00\x00\x0e\x02\x00\x00\x00\x00\x00\x00\x00\x00\xaa\x00\x00\x00\x00\x00\x00\x00\x4b\x00\xae\x00\x54\x00\xb9\x00\xcb\x00\xcf\x00\xd6\x00\xda\x00\xde\x00\xe2\x00\xec\x00\xff\x00\x76\x00\x00\x00\x98\x02\x96\x00\x99\x02\x00\x00\xf3\xff\x0f\x01\x00\x00\x9a\x02\x9b\x02\x97\x02\xdd\x01\xe6\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9d\x02\x9f\x02\xa0\x02\x00\x00\x00\x00\x9c\x02\x00\x00\x9e\x02\x00\x00\xa1\x02\x03\x01\x00\x00\x00\x00\x00\x00\x00\x00\x09\x01\x00\x00\x00\x00\xa2\x02\x00\x00\x00\x00\x68\x00\x71\x00\xfd\x00\xcc\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa9\x02\x00\x00\x00\x00\x0d\x01\x00\x00\xa3\x02\xa4\x02\x00\x00\x00\x00\x00\x00\x00\x00\x11\x02\x32\x02\x11\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x85\x00\x00\x00\x00\x00\xaa\x02\x15\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x49\x02\x00\x00\xa5\x02\x00\x00\x00\x00\x00\x00\xa6\x02\x00\x00\x00\x00\x36\x02\x00\x00\xab\x02\x00\x00\x00\x00\x00\x00\xa7\x02\x00\x00\xac\x02\x00\x00\x00\x00"# + +happyAdjustOffset :: Happy_GHC_Exts.Int# -> Happy_GHC_Exts.Int# +happyAdjustOffset off = off + +happyDefActions :: HappyAddr +happyDefActions = HappyA# "\xfc\xff\xf7\xff\x00\x00\xea\xff\xfb\xff\xfa\xff\x00\x00\x00\x00\xf6\xff\xf5\xff\x00\x00\xc3\xff\xc2\xff\xc1\xff\xbd\xff\xbd\xff\xc0\xff\x00\x00\xbe\xff\x00\x00\xbf\xff\x00\x00\x00\x00\xf4\xff\x00\x00\xf9\xff\xfd\xff\xea\xff\xf0\xff\x00\x00\xe9\xff\x00\x00\xef\xff\xf8\xff\xea\xff\xba\xff\x00\x00\x00\x00\xbc\xff\xbb\xff\x00\x00\x00\x00\x00\x00\xdf\xff\xde\xff\x00\x00\xea\xff\xea\xff\x00\x00\x00\x00\xb9\xff\xdc\xff\x00\x00\xdd\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x90\xff\x89\xff\x86\xff\x00\x00\x7d\xff\x75\xff\x71\xff\x77\xff\x8c\xff\x8b\xff\x8a\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xeb\xff\xd1\xff\x00\x00\x00\x00\x00\x00\xdb\xff\x00\x00\x00\x00\x00\x00\x7d\xff\x74\xff\x76\xff\x79\xff\x00\x00\x70\xff\x6f\xff\x00\x00\x00\x00\x00\x00\x00\x00\x83\xff\x7f\xff\x81\xff\x82\xff\x80\xff\x00\x00\x91\xff\x00\x00\x00\x00\x8d\xff\x8e\xff\x85\xff\x00\x00\x7e\xff\x84\xff\x7b\xff\x7c\xff\x6e\xff\x78\xff\x7a\xff\x8f\xff\x00\x00\x72\xff\x00\x00\x00\x00\xe4\xff\x00\x00\xda\xff\xd9\xff\xe2\xff\x00\x00\xae\xff\x00\x00\x00\x00\x00\x00\x00\x00\xb4\xff\xaa\xff\xad\xff\x95\xff\x98\xff\x93\xff\x92\xff\x97\xff\x96\xff\xc1\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa6\xff\x00\x00\x00\x00\xdb\xff\x00\x00\x00\x00\x94\xff\xa7\xff\x00\x00\x00\x00\x00\x00\x00\x00\xb8\xff\x00\x00\xb8\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe1\xff\xc5\xff\x00\x00\xc5\xff\xd0\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6d\xff\x6c\xff\x00\x00\x00\x00\x00\x00\x73\xff\xe3\xff\xd7\xff\x00\x00\xd8\xff\x00\x00\x00\x00\x00\x00\x98\xff\xcf\xff\x00\x00\x00\x00\xcb\xff\xca\xff\xc9\xff\xc7\xff\xce\xff\xb3\xff\x9d\xff\x9e\xff\x9f\xff\xa0\xff\xa1\xff\xa2\xff\xa3\xff\xa4\xff\xa5\xff\x00\x00\xb7\xff\xb6\xff\xab\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xac\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb0\xff\x00\x00\x00\x00\xa8\xff\x00\x00\x99\xff\x00\x00\x00\x00\x00\x00\xc4\xff\xb8\xff\xb8\xff\x00\x00\xd6\xff\x87\xff\x88\xff\x00\x00\x00\x00\xd5\xff\xd4\xff\x00\x00\x00\x00\x00\x00\xc5\xff\xc8\xff\xc6\xff\x00\x00\xb5\xff\x00\x00\x00\x00\x00\x00\xec\xff\x00\x00\x00\x00\xdb\xff\xe8\xff\x00\x00\xb1\xff\xb2\xff\x9b\xff\xcc\xff\xa9\xff\x9a\xff\x00\x00\x00\x00\xf3\xff\x00\x00\xd2\xff\xd3\xff\xc5\xff\x00\x00\x00\x00\x00\x00\xe7\xff\xe6\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9c\xff\xcd\xff\xaf\xff\x00\x00\xe5\xff\x00\x00\xe8\xff\x00\x00\x00\x00\x00\x00\x00\x00\xee\xff\x00\x00\x00\x00\x00\x00\xed\xff"# + +happyCheck :: HappyAddr +happyCheck = HappyA# "\xff\xff\x13\x00\x01\x00\x02\x00\x03\x00\x1d\x00\x05\x00\x06\x00\x20\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x19\x00\x13\x00\x10\x00\x11\x00\x20\x00\x0e\x00\x22\x00\x15\x00\x1e\x00\x1e\x00\x18\x00\x20\x00\x28\x00\x26\x00\x27\x00\x18\x00\x1e\x00\x32\x00\x28\x00\x01\x00\x02\x00\x03\x00\x01\x00\x05\x00\x06\x00\x30\x00\x08\x00\x04\x00\x05\x00\x06\x00\x0c\x00\x0d\x00\x32\x00\x2f\x00\x10\x00\x11\x00\x01\x00\x02\x00\x03\x00\x15\x00\x05\x00\x06\x00\x18\x00\x08\x00\x31\x00\x0e\x00\x01\x00\x02\x00\x1e\x00\x1c\x00\x05\x00\x06\x00\x07\x00\x01\x00\x1f\x00\x20\x00\x15\x00\x22\x00\x13\x00\x18\x00\x01\x00\x02\x00\x03\x00\x19\x00\x19\x00\x2f\x00\x15\x00\x0e\x00\x0f\x00\x18\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x0e\x00\x0f\x00\x26\x00\x27\x00\x0a\x00\x1a\x00\x1c\x00\x20\x00\x2f\x00\x0e\x00\x0f\x00\x20\x00\x12\x00\x22\x00\x2b\x00\x2c\x00\x29\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x0e\x00\x0f\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x0e\x00\x0f\x00\x18\x00\x20\x00\x20\x00\x0e\x00\x0f\x00\x23\x00\x1e\x00\x32\x00\x0e\x00\x0f\x00\x29\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x0e\x00\x0f\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x0e\x00\x32\x00\x19\x00\x34\x00\x0e\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x0e\x00\x1b\x00\x1c\x00\x1d\x00\x0e\x00\x26\x00\x27\x00\x2a\x00\x0e\x00\x18\x00\x2d\x00\x2e\x00\x0e\x00\x1c\x00\x28\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x0e\x00\x01\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x0e\x00\x01\x00\x02\x00\x19\x00\x0e\x00\x1c\x00\x0a\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x0e\x00\x10\x00\x11\x00\x12\x00\x0e\x00\x26\x00\x27\x00\x22\x00\x0e\x00\x32\x00\x15\x00\x34\x00\x0e\x00\x18\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x0e\x00\x14\x00\x15\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x0e\x00\x32\x00\x1f\x00\x20\x00\x0e\x00\x22\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x0e\x00\x1b\x00\x1c\x00\x1d\x00\x0e\x00\x0d\x00\x0e\x00\x18\x00\x0e\x00\x01\x00\x1b\x00\x1c\x00\x0e\x00\x15\x00\x28\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x06\x00\x18\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x04\x00\x14\x00\x15\x00\x01\x00\x02\x00\x0e\x00\x19\x00\x1f\x00\x20\x00\x01\x00\x22\x00\x14\x00\x15\x00\x16\x00\x17\x00\x1a\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x1f\x00\x14\x00\x15\x00\x0e\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x14\x00\x15\x00\x16\x00\x17\x00\x12\x00\x23\x00\x14\x00\x15\x00\x16\x00\x17\x00\x2d\x00\x2e\x00\x18\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x01\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x14\x00\x15\x00\x16\x00\x17\x00\x29\x00\x2a\x00\x1a\x00\x14\x00\x15\x00\x16\x00\x17\x00\x1f\x00\x19\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x01\x00\x02\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x14\x00\x15\x00\x16\x00\x17\x00\x0d\x00\x0e\x00\x1a\x00\x32\x00\x19\x00\x34\x00\x13\x00\x14\x00\x15\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x14\x00\x15\x00\x16\x00\x17\x00\x16\x00\x17\x00\x1a\x00\x14\x00\x15\x00\x16\x00\x17\x00\x20\x00\x19\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x01\x00\x02\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x14\x00\x15\x00\x16\x00\x17\x00\x0a\x00\x14\x00\x15\x00\x16\x00\x17\x00\x13\x00\x10\x00\x11\x00\x12\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x14\x00\x15\x00\x16\x00\x17\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x0e\x00\x09\x00\x0a\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x16\x00\x17\x00\x18\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x28\x00\x31\x00\x32\x00\x01\x00\x34\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x18\x00\x31\x00\x32\x00\x19\x00\x34\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x20\x00\x31\x00\x32\x00\x01\x00\x34\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x18\x00\x31\x00\x32\x00\x18\x00\x34\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x18\x00\x31\x00\x32\x00\x1e\x00\x34\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x20\x00\x31\x00\x32\x00\x26\x00\x34\x00\x0d\x00\x0e\x00\x1f\x00\x0d\x00\x0e\x00\x20\x00\x13\x00\x14\x00\x15\x00\x13\x00\x14\x00\x15\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x14\x00\x15\x00\x16\x00\x17\x00\x00\x00\x01\x00\x02\x00\x03\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x01\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x1f\x00\x20\x00\x01\x00\x22\x00\x31\x00\x32\x00\x32\x00\x34\x00\x34\x00\x31\x00\x32\x00\x01\x00\x34\x00\x33\x00\x34\x00\x33\x00\x34\x00\x0d\x00\x0e\x00\x20\x00\x29\x00\x1a\x00\x18\x00\x29\x00\x20\x00\x01\x00\x1b\x00\x29\x00\x01\x00\x20\x00\x18\x00\x01\x00\x01\x00\x1e\x00\x1d\x00\x1c\x00\x1c\x00\x01\x00\x0f\x00\x18\x00\x1a\x00\x20\x00\x1d\x00\x20\x00\x20\x00\x19\x00\x1e\x00\x0f\x00\x1f\x00\x1b\x00\x20\x00\x02\x00\x01\x00\x01\x00\x01\x00\x01\x00\x1f\x00\x1d\x00\x20\x00\x19\x00\x29\x00\x01\x00\x1d\x00\x01\x00\x1b\x00\x1e\x00\x01\x00\x1b\x00\x1e\x00\x1e\x00\x1a\x00\x2a\x00\x1b\x00\x1f\x00\x18\x00\x20\x00\x01\x00\x1f\x00\xff\xff\x20\x00\x20\x00\x03\x00\xff\xff\x2a\x00\xff\xff\x1e\x00\x1e\x00\x18\x00\x1e\x00\x20\x00\x1f\x00\x0f\x00\xff\xff\x20\x00\xff\xff\xff\xff\x20\x00\x1e\x00\xff\xff\x21\x00\x0e\x00\x21\x00\x20\x00\x0f\x00\x19\x00\x0f\x00\x0f\x00\x0f\x00\xff\xff\x0f\x00\x0f\x00\x0f\x00\x2b\x00\x1e\x00\x1e\x00\xff\xff\xff\xff\x0f\x00\x0f\x00\x30\x00\x30\x00\xff\xff\xff\xff\x2b\x00\x2b\x00\x34\x00\x34\x00\x28\x00\x2b\x00\x34\x00\x1e\x00\x1e\x00\x2b\x00\x28\x00\x34\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2b\x00\x2b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"# + +happyTable :: HappyAddr +happyTable = HappyA# "\x00\x00\x1f\x00\x88\x00\x89\x00\x8a\x00\x28\x00\x8b\x00\x8c\x00\x29\x00\x8d\x00\x0f\x00\x10\x00\x11\x00\x8e\x00\x8f\x00\x66\x00\x1f\x00\x90\x00\x91\x00\xc3\x00\xf9\x00\xc4\x00\x92\x00\x4d\x00\x4d\x00\x93\x00\x0a\x01\xc5\x00\x67\x00\x68\x00\x19\x01\x4d\x00\xf2\xff\x4e\x00\x88\x00\x89\x00\x8a\x00\xb0\x00\x8b\x00\x8c\x00\x07\x00\x9a\x00\x07\x00\x08\x00\x09\x00\x8e\x00\x8f\x00\xf1\xff\x94\x00\x90\x00\x91\x00\x88\x00\x89\x00\x8a\x00\x92\x00\x8b\x00\x8c\x00\x93\x00\x9a\x00\x19\x00\x97\x00\x42\x00\x43\x00\x4d\x00\x16\x00\x44\x00\x45\x00\x46\x00\xae\x00\x0a\x00\x0b\x00\x92\x00\x0c\x00\x1f\x00\x93\x00\x03\x00\x04\x00\x05\x00\x74\x00\xe0\xff\x94\x00\x47\x00\x7d\x00\x7e\x00\x48\x00\x9e\x00\x84\x00\x85\x00\x86\x00\x97\x00\x7e\x00\x67\x00\x68\x00\x29\x00\x7f\x00\xaf\x00\xb7\x00\x94\x00\x97\x00\x7e\x00\x80\x00\x35\x00\x81\x00\x49\x00\x4a\x00\xb9\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\xdd\x00\xda\x00\xdb\x00\x83\x00\x84\x00\x85\x00\x86\x00\x97\x00\x7e\x00\xd9\x00\xda\x00\xdb\x00\x83\x00\x84\x00\x85\x00\x86\x00\x97\x00\x7e\x00\x3a\x00\xb7\x00\x23\x00\x97\x00\x7e\x00\x24\x00\x97\x00\xff\xff\x97\x00\x7e\x00\xb8\x00\xff\x00\xda\x00\xdb\x00\x83\x00\x84\x00\x85\x00\x86\x00\x97\x00\x7e\x00\xfe\x00\xda\x00\xdb\x00\x83\x00\x84\x00\x85\x00\x86\x00\xcf\x00\x83\x00\x84\x00\x85\x00\x86\x00\xf2\x00\x83\x00\x84\x00\x85\x00\x86\x00\x97\x00\x6f\x00\xf9\x00\x40\x00\x97\x00\x18\x01\x83\x00\x84\x00\x85\x00\x86\x00\x97\x00\xc9\x00\xca\x00\xcb\x00\x97\x00\x67\x00\x68\x00\x59\x00\x97\x00\xf4\x00\x5a\x00\x5b\x00\x97\x00\xf5\x00\xcc\x00\x9d\x00\x84\x00\x85\x00\x86\x00\x9c\x00\x84\x00\x85\x00\x86\x00\x97\x00\x17\x00\x9a\x00\x84\x00\x85\x00\x86\x00\x98\x00\x84\x00\x85\x00\x86\x00\xe1\x00\x84\x00\x85\x00\x86\x00\xdc\x00\x84\x00\x85\x00\x86\x00\x97\x00\x42\x00\x43\x00\xf8\x00\x97\x00\x16\x00\x29\x00\xd8\x00\x84\x00\x85\x00\x86\x00\x97\x00\x2a\x00\x2b\x00\x2c\x00\x97\x00\x67\x00\x68\x00\x14\x00\x97\x00\x6e\x00\x47\x00\x40\x00\x97\x00\x6c\x00\xd7\x00\x84\x00\x85\x00\x86\x00\xd6\x00\x84\x00\x85\x00\x86\x00\x97\x00\x5c\x00\x5d\x00\xd5\x00\x84\x00\x85\x00\x86\x00\xd4\x00\x84\x00\x85\x00\x86\x00\xd3\x00\x84\x00\x85\x00\x86\x00\xd2\x00\x84\x00\x85\x00\x86\x00\x97\x00\xff\xff\x1f\x00\x0b\x00\x97\x00\x0c\x00\xd1\x00\x84\x00\x85\x00\x86\x00\x97\x00\xfd\x00\xca\x00\xcb\x00\x97\x00\x77\x00\x78\x00\xa0\x00\x97\x00\x26\x00\xa1\x00\xa2\x00\x97\x00\xc2\x00\xcc\x00\xd0\x00\x84\x00\x85\x00\x86\x00\x07\x01\x84\x00\x85\x00\x86\x00\x17\x00\x23\x00\x04\x01\x84\x00\x85\x00\x86\x00\x10\x01\x84\x00\x85\x00\x86\x00\x1c\x01\x84\x00\x85\x00\x86\x00\x25\x01\x84\x00\x85\x00\x86\x00\x22\x00\x5c\x00\x5d\x00\x42\x00\x57\x00\xe0\x00\x73\x00\x0a\x00\x0b\x00\xc7\x00\x0c\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xac\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\xad\x00\x5c\x00\x5d\x00\xdf\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xe1\x00\x27\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xba\x00\xbb\x00\x2f\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\x2e\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\x94\xff\x94\xff\x94\xff\x94\xff\xb5\x00\xb6\x00\x94\xff\xa3\x00\xa4\x00\xa5\x00\xa6\x00\x94\xff\xe3\x00\x94\xff\x94\xff\x94\xff\x94\xff\x94\xff\xc7\x00\xce\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\x77\x00\x78\x00\xe9\x00\x6c\x00\x31\x00\x40\x00\x79\x00\x7a\x00\x7b\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa5\x00\xa6\x00\x0e\x01\xa3\x00\xa4\x00\xa5\x00\xa6\x00\x30\x00\x25\x01\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xc7\x00\xce\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\x29\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\x1f\x00\x36\x00\x2b\x00\x2c\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\xf9\x00\x20\x00\x1d\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xfa\x00\xfb\x00\xfc\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x35\x00\x3e\x00\x3f\x00\x34\x00\x40\x00\x53\x00\x3b\x00\x3c\x00\x3d\x00\x3a\x00\x3e\x00\x54\x00\x38\x00\x40\x00\x69\x00\x3b\x00\x3c\x00\x3d\x00\x4b\x00\x3e\x00\x3f\x00\x42\x00\x40\x00\x68\x00\x3b\x00\x3c\x00\x3d\x00\x53\x00\x3e\x00\x3f\x00\x52\x00\x40\x00\xbd\x00\x3b\x00\x3c\x00\x3d\x00\x3a\x00\x3e\x00\x3f\x00\x51\x00\x40\x00\xbc\x00\x3b\x00\x3c\x00\x3d\x00\x95\x00\x3e\x00\x3f\x00\x67\x00\x40\x00\x77\x00\x78\x00\xb4\x00\x77\x00\x78\x00\x5f\x00\xe4\x00\x7a\x00\x7b\x00\x20\x01\x7a\x00\x7b\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\x11\x00\x03\x00\x04\x00\x05\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x7d\x00\x1d\x01\x1e\x01\x1f\x01\x78\x00\x2e\x01\x1e\x01\x1f\x01\x78\x00\x31\x00\x0b\x00\x42\x00\x0c\x00\x6d\x00\x3f\x00\xbb\x00\x40\x00\x40\x00\x6a\x00\x3f\x00\x71\x00\x40\x00\x76\x00\x75\x00\x74\x00\x75\x00\x29\x01\x78\x00\xb3\x00\xb2\x00\xb1\x00\x9c\x00\xe2\xff\xe6\x00\x7d\x00\xc9\x00\xe4\x00\x7d\x00\xc2\x00\x3a\x00\x7d\x00\x42\x00\xf7\x00\xf2\x00\x16\x00\xf6\x00\xc7\x00\x07\x01\x3a\x00\xac\x00\xf1\x00\xef\x00\xf0\x00\xee\x00\xed\x00\x4d\x00\x06\x01\xe8\x00\x04\x01\x0b\x01\x03\x01\xc7\x00\x01\x01\x7d\x00\x7d\x00\x17\x01\x15\x01\x16\x01\x13\x01\x18\x01\x1b\x01\x14\x01\x7d\x00\xc9\x00\x4d\x00\x7d\x00\x1c\x01\x0d\x01\x0c\x01\xac\x00\xb6\x00\xc9\x00\x24\x01\x3a\x00\x23\x01\x7d\x00\x22\x01\x00\x00\x2b\x01\x29\x01\x19\x00\x00\x00\xb6\x00\x00\x00\x4d\x00\x2c\x01\x3a\x00\x4d\x00\x2e\x01\x30\x01\x4b\x00\x00\x00\x32\x01\x00\x00\x00\x00\x34\x01\x4d\x00\x00\x00\x14\x00\xbf\x00\x12\x00\x32\x00\xeb\x00\x4f\x00\xea\x00\xe9\x00\x08\x01\x00\x00\x0f\x01\x0e\x01\x27\x01\x38\x00\xce\x00\xc7\x00\x00\x00\x00\x00\x30\x01\x34\x01\x64\x00\x5d\x00\x00\x00\x00\x00\x4e\x00\x95\x00\x57\x00\x55\x00\xc5\x00\xc0\x00\x71\x00\x11\x01\x26\x01\xe6\x00\x01\x01\xbe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2c\x01\x32\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"# + +happyReduceArr = Happy_Data_Array.array (2, 147) [ + (2 , happyReduce_2), + (3 , happyReduce_3), + (4 , happyReduce_4), + (5 , happyReduce_5), + (6 , happyReduce_6), + (7 , happyReduce_7), + (8 , happyReduce_8), + (9 , happyReduce_9), + (10 , happyReduce_10), + (11 , happyReduce_11), + (12 , happyReduce_12), + (13 , happyReduce_13), + (14 , happyReduce_14), + (15 , happyReduce_15), + (16 , happyReduce_16), + (17 , happyReduce_17), + (18 , happyReduce_18), + (19 , happyReduce_19), + (20 , happyReduce_20), + (21 , happyReduce_21), + (22 , happyReduce_22), + (23 , happyReduce_23), + (24 , happyReduce_24), + (25 , happyReduce_25), + (26 , happyReduce_26), + (27 , happyReduce_27), + (28 , happyReduce_28), + (29 , happyReduce_29), + (30 , happyReduce_30), + (31 , happyReduce_31), + (32 , happyReduce_32), + (33 , happyReduce_33), + (34 , happyReduce_34), + (35 , happyReduce_35), + (36 , happyReduce_36), + (37 , happyReduce_37), + (38 , happyReduce_38), + (39 , happyReduce_39), + (40 , happyReduce_40), + (41 , happyReduce_41), + (42 , happyReduce_42), + (43 , happyReduce_43), + (44 , happyReduce_44), + (45 , happyReduce_45), + (46 , happyReduce_46), + (47 , happyReduce_47), + (48 , happyReduce_48), + (49 , happyReduce_49), + (50 , happyReduce_50), + (51 , happyReduce_51), + (52 , happyReduce_52), + (53 , happyReduce_53), + (54 , happyReduce_54), + (55 , happyReduce_55), + (56 , happyReduce_56), + (57 , happyReduce_57), + (58 , happyReduce_58), + (59 , happyReduce_59), + (60 , happyReduce_60), + (61 , happyReduce_61), + (62 , happyReduce_62), + (63 , happyReduce_63), + (64 , happyReduce_64), + (65 , happyReduce_65), + (66 , happyReduce_66), + (67 , happyReduce_67), + (68 , happyReduce_68), + (69 , happyReduce_69), + (70 , happyReduce_70), + (71 , happyReduce_71), + (72 , happyReduce_72), + (73 , happyReduce_73), + (74 , happyReduce_74), + (75 , happyReduce_75), + (76 , happyReduce_76), + (77 , happyReduce_77), + (78 , happyReduce_78), + (79 , happyReduce_79), + (80 , happyReduce_80), + (81 , happyReduce_81), + (82 , happyReduce_82), + (83 , happyReduce_83), + (84 , happyReduce_84), + (85 , happyReduce_85), + (86 , happyReduce_86), + (87 , happyReduce_87), + (88 , happyReduce_88), + (89 , happyReduce_89), + (90 , happyReduce_90), + (91 , happyReduce_91), + (92 , happyReduce_92), + (93 , happyReduce_93), + (94 , happyReduce_94), + (95 , happyReduce_95), + (96 , happyReduce_96), + (97 , happyReduce_97), + (98 , happyReduce_98), + (99 , happyReduce_99), + (100 , happyReduce_100), + (101 , happyReduce_101), + (102 , happyReduce_102), + (103 , happyReduce_103), + (104 , happyReduce_104), + (105 , happyReduce_105), + (106 , happyReduce_106), + (107 , happyReduce_107), + (108 , happyReduce_108), + (109 , happyReduce_109), + (110 , happyReduce_110), + (111 , happyReduce_111), + (112 , happyReduce_112), + (113 , happyReduce_113), + (114 , happyReduce_114), + (115 , happyReduce_115), + (116 , happyReduce_116), + (117 , happyReduce_117), + (118 , happyReduce_118), + (119 , happyReduce_119), + (120 , happyReduce_120), + (121 , happyReduce_121), + (122 , happyReduce_122), + (123 , happyReduce_123), + (124 , happyReduce_124), + (125 , happyReduce_125), + (126 , happyReduce_126), + (127 , happyReduce_127), + (128 , happyReduce_128), + (129 , happyReduce_129), + (130 , happyReduce_130), + (131 , happyReduce_131), + (132 , happyReduce_132), + (133 , happyReduce_133), + (134 , happyReduce_134), + (135 , happyReduce_135), + (136 , happyReduce_136), + (137 , happyReduce_137), + (138 , happyReduce_138), + (139 , happyReduce_139), + (140 , happyReduce_140), + (141 , happyReduce_141), + (142 , happyReduce_142), + (143 , happyReduce_143), + (144 , happyReduce_144), + (145 , happyReduce_145), + (146 , happyReduce_146), + (147 , happyReduce_147) + ] + +happy_n_terms = 51 :: Prelude.Int +happy_n_nonterms = 53 :: Prelude.Int + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_2 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_2 = happySpecReduce_2 0# happyReduction_2 +happyReduction_2 happy_x_2 + happy_x_1 + = case happyOut6 happy_x_1 of { (HappyWrap6 happy_var_1) -> + case happyOut12 happy_x_2 of { happy_var_2 -> + happyIn5 + (sequence happy_var_1 >>= \incl -> + let (inclFilenames,inclStrs) = unzip incl in + let inclPrims = runP (concat inclStrs) parseLPrimDecl in + return $ Prog inclFilenames inclPrims (reverse happy_var_2) + )}} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_3 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_3 = happySpecReduce_0 1# happyReduction_3 +happyReduction_3 = happyIn6 + ([] + ) + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_4 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_4 = happySpecReduce_1 1# happyReduction_4 +happyReduction_4 happy_x_1 + = case happyOut7 happy_x_1 of { happy_var_1 -> + happyIn6 + (happy_var_1 + )} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_5 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_5 = happySpecReduce_1 2# happyReduction_5 +happyReduction_5 happy_x_1 + = case happyOut8 happy_x_1 of { happy_var_1 -> + happyIn7 + ([happy_var_1] + )} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_6 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_6 = happySpecReduce_2 2# happyReduction_6 +happyReduction_6 happy_x_2 + happy_x_1 + = case happyOut7 happy_x_1 of { happy_var_1 -> + case happyOut8 happy_x_2 of { happy_var_2 -> + happyIn7 + (happy_var_2:happy_var_1 + )}} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_7 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_7 = happySpecReduce_3 3# happyReduction_7 +happyReduction_7 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOutTok happy_x_3 of { (TkString happy_var_3) -> + happyIn8 + (-- putStrLn ("Include..."++happy_var_3) >> + readFile happy_var_3 >>= \contents -> + return (happy_var_3,(' ':contents)) + )} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_8 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_8 = happySpecReduce_0 4# happyReduction_8 +happyReduction_8 = happyIn9 + ([] + ) + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_9 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_9 = happySpecReduce_1 4# happyReduction_9 +happyReduction_9 happy_x_1 + = case happyOut10 happy_x_1 of { happy_var_1 -> + happyIn9 + (happy_var_1 + )} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_10 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_10 = happySpecReduce_1 5# happyReduction_10 +happyReduction_10 happy_x_1 + = case happyOut11 happy_x_1 of { happy_var_1 -> + happyIn10 + ([happy_var_1] + )} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_11 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_11 = happySpecReduce_2 5# happyReduction_11 +happyReduction_11 happy_x_2 + happy_x_1 + = case happyOut10 happy_x_1 of { happy_var_1 -> + case happyOut11 happy_x_2 of { happy_var_2 -> + happyIn10 + (happy_var_2:happy_var_1 + )}} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_12 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_12 = happyReduce 15# 6# happyReduction_12 +happyReduction_12 (happy_x_15 `HappyStk` + happy_x_14 `HappyStk` + happy_x_13 `HappyStk` + happy_x_12 `HappyStk` + happy_x_11 `HappyStk` + happy_x_10 `HappyStk` + happy_x_9 `HappyStk` + happy_x_8 `HappyStk` + happy_x_7 `HappyStk` + happy_x_6 `HappyStk` + happy_x_5 `HappyStk` + happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOut36 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { (TkAlphaNum happy_var_2) -> + case happyOut21 happy_x_4 of { happy_var_4 -> + case happyOut48 happy_x_7 of { happy_var_7 -> + case happyOut24 happy_x_10 of { happy_var_10 -> + case happyOut27 happy_x_14 of { happy_var_14 -> + happyIn11 + (PrimDecl {primParams=((PassByVal,happy_var_1,happy_var_2):(reverse happy_var_4)), + primPost=happy_var_7, + primPres=(reverse happy_var_10), + primTests=(reverse happy_var_14)} + ) `HappyStk` happyRest}}}}}} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_13 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_13 = happySpecReduce_0 7# happyReduction_13 +happyReduction_13 = happyIn12 + ([] + ) + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_14 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_14 = happySpecReduce_1 7# happyReduction_14 +happyReduction_14 happy_x_1 + = case happyOut13 happy_x_1 of { happy_var_1 -> + happyIn12 + (happy_var_1 + )} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_15 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_15 = happySpecReduce_1 8# happyReduction_15 +happyReduction_15 happy_x_1 + = case happyOut14 happy_x_1 of { happy_var_1 -> + happyIn13 + ([happy_var_1] + )} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_16 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_16 = happySpecReduce_2 8# happyReduction_16 +happyReduction_16 happy_x_2 + happy_x_1 + = case happyOut13 happy_x_1 of { happy_var_1 -> + case happyOut14 happy_x_2 of { happy_var_2 -> + happyIn13 + (happy_var_2:happy_var_1 + )}} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_17 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_17 = happyReduce 20# 9# happyReduction_17 +happyReduction_17 (happy_x_20 `HappyStk` + happy_x_19 `HappyStk` + happy_x_18 `HappyStk` + happy_x_17 `HappyStk` + happy_x_16 `HappyStk` + happy_x_15 `HappyStk` + happy_x_14 `HappyStk` + happy_x_13 `HappyStk` + happy_x_12 `HappyStk` + happy_x_11 `HappyStk` + happy_x_10 `HappyStk` + happy_x_9 `HappyStk` + happy_x_8 `HappyStk` + happy_x_7 `HappyStk` + happy_x_6 `HappyStk` + happy_x_5 `HappyStk` + happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOut15 happy_x_1 of { happy_var_1 -> + case happyOut36 happy_x_2 of { happy_var_2 -> + case happyOutTok happy_x_3 of { (TkAlphaNum happy_var_3) -> + case happyOut21 happy_x_5 of { happy_var_5 -> + case happyOut48 happy_x_8 of { happy_var_8 -> + case happyOut24 happy_x_11 of { happy_var_11 -> + case happyOut16 happy_x_15 of { happy_var_15 -> + case happyOut48 happy_x_18 of { happy_var_18 -> + case happyOut20 happy_x_20 of { happy_var_20 -> + happyIn14 + (MethDecl {methParams=((happy_var_1,happy_var_2,happy_var_3):(reverse happy_var_5)), + methExternal=False, + methPost=[happy_var_8,fTrue,fTrue], + methPres=(reverse happy_var_11), + methUpsis=(reverse happy_var_15), + methInv=happy_var_18, + methOK=FormulaBogus,methERRs=[], + methNEVER=FormulaBogus,methMUSTs=[],methMAY=([],FormulaBogus), + methBody=happy_var_20} + ) `HappyStk` happyRest}}}}}}}}} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_18 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_18 = happyReduce 24# 9# happyReduction_18 +happyReduction_18 (happy_x_24 `HappyStk` + happy_x_23 `HappyStk` + happy_x_22 `HappyStk` + happy_x_21 `HappyStk` + happy_x_20 `HappyStk` + happy_x_19 `HappyStk` + happy_x_18 `HappyStk` + happy_x_17 `HappyStk` + happy_x_16 `HappyStk` + happy_x_15 `HappyStk` + happy_x_14 `HappyStk` + happy_x_13 `HappyStk` + happy_x_12 `HappyStk` + happy_x_11 `HappyStk` + happy_x_10 `HappyStk` + happy_x_9 `HappyStk` + happy_x_8 `HappyStk` + happy_x_7 `HappyStk` + happy_x_6 `HappyStk` + happy_x_5 `HappyStk` + happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOut15 happy_x_1 of { happy_var_1 -> + case happyOut36 happy_x_2 of { happy_var_2 -> + case happyOutTok happy_x_3 of { (TkAlphaNum happy_var_3) -> + case happyOut21 happy_x_5 of { happy_var_5 -> + case happyOut48 happy_x_8 of { happy_var_8 -> + case happyOut48 happy_x_10 of { happy_var_10 -> + case happyOut48 happy_x_12 of { happy_var_12 -> + case happyOut24 happy_x_15 of { happy_var_15 -> + case happyOut16 happy_x_19 of { happy_var_19 -> + case happyOut48 happy_x_22 of { happy_var_22 -> + case happyOut20 happy_x_24 of { happy_var_24 -> + happyIn14 + (MethDecl {methParams=((happy_var_1,happy_var_2,happy_var_3):(reverse happy_var_5)), + methExternal=False, + methPost=[happy_var_8,happy_var_10,happy_var_12], + methPres=(reverse happy_var_15), + methUpsis=(reverse happy_var_19), + methInv=happy_var_22, + methOK=FormulaBogus,methERRs=[], + methNEVER=FormulaBogus,methMUSTs=[],methMAY=([],FormulaBogus), + methBody=happy_var_24} + ) `HappyStk` happyRest}}}}}}}}}}} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_19 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_19 = happyReduce 13# 9# happyReduction_19 +happyReduction_19 (happy_x_13 `HappyStk` + happy_x_12 `HappyStk` + happy_x_11 `HappyStk` + happy_x_10 `HappyStk` + happy_x_9 `HappyStk` + happy_x_8 `HappyStk` + happy_x_7 `HappyStk` + happy_x_6 `HappyStk` + happy_x_5 `HappyStk` + happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOut15 happy_x_1 of { happy_var_1 -> + case happyOut36 happy_x_2 of { happy_var_2 -> + case happyOutTok happy_x_3 of { (TkAlphaNum happy_var_3) -> + case happyOut21 happy_x_5 of { happy_var_5 -> + case happyOut48 happy_x_8 of { happy_var_8 -> + case happyOut24 happy_x_11 of { happy_var_11 -> + case happyOut20 happy_x_13 of { happy_var_13 -> + happyIn14 + (MethDecl {methParams=((happy_var_1,happy_var_2,happy_var_3):(reverse happy_var_5)), + methExternal=False, + methPost=[happy_var_8,fTrue,fTrue], + methPres=(reverse happy_var_11), + methUpsis=[], + methInv=FormulaBogus, + methOK=FormulaBogus,methERRs=[], + methNEVER=FormulaBogus,methMUSTs=[],methMAY=([],FormulaBogus), + methBody=happy_var_13} + ) `HappyStk` happyRest}}}}}}} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_20 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_20 = happyReduce 7# 9# happyReduction_20 +happyReduction_20 (happy_x_7 `HappyStk` + happy_x_6 `HappyStk` + happy_x_5 `HappyStk` + happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOut15 happy_x_1 of { happy_var_1 -> + case happyOut36 happy_x_2 of { happy_var_2 -> + case happyOutTok happy_x_3 of { (TkAlphaNum happy_var_3) -> + case happyOut21 happy_x_5 of { happy_var_5 -> + case happyOut20 happy_x_7 of { happy_var_7 -> + happyIn14 + (MethDecl {methParams=((happy_var_1,happy_var_2,happy_var_3):(reverse happy_var_5)), + methExternal=False, + methPost=(triple FormulaBogus), + methPres=[], + methUpsis=[], + methInv=FormulaBogus, + methOK=FormulaBogus,methERRs=[], + methNEVER=FormulaBogus,methMUSTs=[],methMAY=([],FormulaBogus), + methBody=happy_var_7} + ) `HappyStk` happyRest}}}}} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_21 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_21 = happySpecReduce_0 10# happyReduction_21 +happyReduction_21 = happyIn15 + (PassByVal + ) + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_22 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_22 = happySpecReduce_1 10# happyReduction_22 +happyReduction_22 happy_x_1 + = happyIn15 + (PassByRef + ) + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_23 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_23 = happySpecReduce_0 11# happyReduction_23 +happyReduction_23 = happyIn16 + ([] + ) + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_24 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_24 = happySpecReduce_1 11# happyReduction_24 +happyReduction_24 happy_x_1 + = case happyOut17 happy_x_1 of { happy_var_1 -> + happyIn16 + (happy_var_1 + )} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_25 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_25 = happySpecReduce_1 12# happyReduction_25 +happyReduction_25 happy_x_1 + = case happyOut18 happy_x_1 of { happy_var_1 -> + happyIn17 + ([happy_var_1] + )} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_26 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_26 = happySpecReduce_3 12# happyReduction_26 +happyReduction_26 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut17 happy_x_1 of { happy_var_1 -> + case happyOut18 happy_x_3 of { happy_var_3 -> + happyIn17 + (happy_var_3:happy_var_1 + )}} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_27 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_27 = happySpecReduce_1 13# happyReduction_27 +happyReduction_27 happy_x_1 + = case happyOut19 happy_x_1 of { happy_var_1 -> + happyIn18 + ([happy_var_1] + )} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_28 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_28 = happySpecReduce_3 13# happyReduction_28 +happyReduction_28 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut18 happy_x_1 of { happy_var_1 -> + case happyOut19 happy_x_3 of { happy_var_3 -> + happyIn18 + (happy_var_3:happy_var_1 + )}} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_29 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_29 = happySpecReduce_1 14# happyReduction_29 +happyReduction_29 happy_x_1 + = case happyOutTok happy_x_1 of { (TkAlphaNum happy_var_1) -> + happyIn19 + (happy_var_1 + )} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_30 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_30 = happyReduce 4# 15# happyReduction_30 +happyReduction_30 (happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOut30 happy_x_2 of { happy_var_2 -> + case happyOut43 happy_x_3 of { happy_var_3 -> + happyIn20 + (ExpBlock (reverse happy_var_2) happy_var_3 + ) `HappyStk` happyRest}} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_31 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_31 = happySpecReduce_0 16# happyReduction_31 +happyReduction_31 = happyIn21 + ([] + ) + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_32 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_32 = happySpecReduce_1 16# happyReduction_32 +happyReduction_32 happy_x_1 + = case happyOut22 happy_x_1 of { happy_var_1 -> + happyIn21 + (happy_var_1 + )} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_33 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_33 = happySpecReduce_1 17# happyReduction_33 +happyReduction_33 happy_x_1 + = case happyOut23 happy_x_1 of { happy_var_1 -> + happyIn22 + ([happy_var_1] + )} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_34 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_34 = happySpecReduce_3 17# happyReduction_34 +happyReduction_34 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut22 happy_x_1 of { happy_var_1 -> + case happyOut23 happy_x_3 of { happy_var_3 -> + happyIn22 + (happy_var_3:happy_var_1 + )}} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_35 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_35 = happySpecReduce_3 18# happyReduction_35 +happyReduction_35 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut15 happy_x_1 of { happy_var_1 -> + case happyOut36 happy_x_2 of { happy_var_2 -> + case happyOutTok happy_x_3 of { (TkAlphaNum happy_var_3) -> + happyIn23 + ((happy_var_1,happy_var_2,happy_var_3) + )}}} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_36 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_36 = happySpecReduce_0 19# happyReduction_36 +happyReduction_36 = happyIn24 + ([] + ) + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_37 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_37 = happySpecReduce_1 19# happyReduction_37 +happyReduction_37 happy_x_1 + = case happyOut25 happy_x_1 of { happy_var_1 -> + happyIn24 + (happy_var_1 + )} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_38 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_38 = happySpecReduce_1 20# happyReduction_38 +happyReduction_38 happy_x_1 + = case happyOut26 happy_x_1 of { happy_var_1 -> + happyIn25 + ([happy_var_1] + )} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_39 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_39 = happySpecReduce_3 20# happyReduction_39 +happyReduction_39 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut25 happy_x_1 of { happy_var_1 -> + case happyOut26 happy_x_3 of { happy_var_3 -> + happyIn25 + (happy_var_3:happy_var_1 + )}} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_40 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_40 = happySpecReduce_3 21# happyReduction_40 +happyReduction_40 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut18 happy_x_1 of { happy_var_1 -> + case happyOut48 happy_x_3 of { happy_var_3 -> + happyIn26 + (((reverse happy_var_1),happy_var_3) + )}} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_41 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_41 = happySpecReduce_0 22# happyReduction_41 +happyReduction_41 = happyIn27 + ([] + ) + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_42 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_42 = happySpecReduce_1 22# happyReduction_42 +happyReduction_42 happy_x_1 + = case happyOut28 happy_x_1 of { happy_var_1 -> + happyIn27 + (happy_var_1 + )} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_43 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_43 = happySpecReduce_1 23# happyReduction_43 +happyReduction_43 happy_x_1 + = case happyOut29 happy_x_1 of { happy_var_1 -> + happyIn28 + ([happy_var_1] + )} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_44 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_44 = happySpecReduce_3 23# happyReduction_44 +happyReduction_44 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut28 happy_x_1 of { happy_var_1 -> + case happyOut29 happy_x_3 of { happy_var_3 -> + happyIn28 + (happy_var_3:happy_var_1 + )}} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_45 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_45 = happySpecReduce_3 24# happyReduction_45 +happyReduction_45 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut19 happy_x_1 of { happy_var_1 -> + case happyOut43 happy_x_3 of { happy_var_3 -> + happyIn29 + ((happy_var_1,happy_var_3) + )}} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_46 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_46 = happySpecReduce_0 25# happyReduction_46 +happyReduction_46 = happyIn30 + ([] + ) + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_47 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_47 = happySpecReduce_3 25# happyReduction_47 +happyReduction_47 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut30 happy_x_1 of { happy_var_1 -> + case happyOut31 happy_x_2 of { happy_var_2 -> + happyIn30 + (happy_var_2:happy_var_1 + )}} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_48 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_48 = happySpecReduce_3 26# happyReduction_48 +happyReduction_48 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut37 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { (TkAlphaNum happy_var_2) -> + case happyOut35 happy_x_3 of { happy_var_3 -> + happyIn31 + (VarDecl happy_var_1 happy_var_2 happy_var_3 + )}}} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_49 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_49 = happySpecReduce_3 26# happyReduction_49 +happyReduction_49 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut39 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { (TkAlphaNum happy_var_2) -> + case happyOut35 happy_x_3 of { happy_var_3 -> + happyIn31 + (VarDecl happy_var_1 happy_var_2 happy_var_3 + )}}} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_50 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_50 = happyReduce 8# 26# happyReduction_50 +happyReduction_50 (happy_x_8 `HappyStk` + happy_x_7 `HappyStk` + happy_x_6 `HappyStk` + happy_x_5 `HappyStk` + happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOut19 happy_x_1 of { happy_var_1 -> + case happyOut39 happy_x_3 of { happy_var_3 -> + case happyOut32 happy_x_5 of { happy_var_5 -> + case happyOutTok happy_x_7 of { (TkAlphaNum happy_var_7) -> + case happyOut35 happy_x_8 of { happy_var_8 -> + happyIn31 + (LblArrVarDecl (Just happy_var_1) happy_var_3 (reverse happy_var_5) happy_var_7 happy_var_8 + ) `HappyStk` happyRest}}}}} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_51 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_51 = happyReduce 6# 26# happyReduction_51 +happyReduction_51 (happy_x_6 `HappyStk` + happy_x_5 `HappyStk` + happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOut39 happy_x_1 of { happy_var_1 -> + case happyOut32 happy_x_3 of { happy_var_3 -> + case happyOutTok happy_x_5 of { (TkAlphaNum happy_var_5) -> + case happyOut35 happy_x_6 of { happy_var_6 -> + happyIn31 + (LblArrVarDecl Nothing happy_var_1 (reverse happy_var_3) happy_var_5 happy_var_6 + ) `HappyStk` happyRest}}}} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_52 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_52 = happySpecReduce_1 27# happyReduction_52 +happyReduction_52 happy_x_1 + = case happyOut33 happy_x_1 of { happy_var_1 -> + happyIn32 + (map (\v -> ExpVar v) happy_var_1 + )} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_53 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_53 = happySpecReduce_1 27# happyReduction_53 +happyReduction_53 happy_x_1 + = case happyOut34 happy_x_1 of { happy_var_1 -> + happyIn32 + (happy_var_1 + )} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_54 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_54 = happySpecReduce_1 28# happyReduction_54 +happyReduction_54 happy_x_1 + = case happyOut45 happy_x_1 of { happy_var_1 -> + happyIn33 + ([happy_var_1] + )} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_55 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_55 = happySpecReduce_3 28# happyReduction_55 +happyReduction_55 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut33 happy_x_1 of { happy_var_1 -> + case happyOut45 happy_x_3 of { happy_var_3 -> + happyIn33 + (happy_var_3:happy_var_1 + )}} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_56 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_56 = happySpecReduce_1 29# happyReduction_56 +happyReduction_56 happy_x_1 + = case happyOutTok happy_x_1 of { (TkIntNum happy_var_1) -> + happyIn34 + ([KIntNum happy_var_1] + )} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_57 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_57 = happySpecReduce_3 29# happyReduction_57 +happyReduction_57 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut34 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_3 of { (TkIntNum happy_var_3) -> + happyIn34 + (KIntNum happy_var_3:happy_var_1 + )}} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_58 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_58 = happySpecReduce_0 30# happyReduction_58 +happyReduction_58 = happyIn35 + (ExpBogus + ) + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_59 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_59 = happySpecReduce_2 30# happyReduction_59 +happyReduction_59 happy_x_2 + happy_x_1 + = case happyOut43 happy_x_2 of { happy_var_2 -> + happyIn35 + (happy_var_2 + )} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_60 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_60 = happySpecReduce_1 31# happyReduction_60 +happyReduction_60 happy_x_1 + = case happyOut37 happy_x_1 of { happy_var_1 -> + happyIn36 + (happy_var_1 + )} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_61 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_61 = happySpecReduce_1 31# happyReduction_61 +happyReduction_61 happy_x_1 + = case happyOut39 happy_x_1 of { happy_var_1 -> + happyIn36 + (happy_var_1 + )} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_62 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_62 = happySpecReduce_1 32# happyReduction_62 +happyReduction_62 happy_x_1 + = happyIn37 + (PrimVoid{anno=Nothing} + ) + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_63 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_63 = happySpecReduce_1 32# happyReduction_63 +happyReduction_63 happy_x_1 + = happyIn37 + (PrimFloat{anno=Nothing} + ) + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_64 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_64 = happySpecReduce_2 32# happyReduction_64 +happyReduction_64 happy_x_2 + happy_x_1 + = case happyOut38 happy_x_2 of { happy_var_2 -> + happyIn37 + (PrimInt{anno=happy_var_2} + )} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_65 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_65 = happySpecReduce_2 32# happyReduction_65 +happyReduction_65 happy_x_2 + happy_x_1 + = case happyOut38 happy_x_2 of { happy_var_2 -> + happyIn37 + (PrimBool{anno=happy_var_2} + )} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_66 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_66 = happySpecReduce_0 33# happyReduction_66 +happyReduction_66 = happyIn38 + (Nothing + ) + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_67 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_67 = happySpecReduce_3 33# happyReduction_67 +happyReduction_67 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOutTok happy_x_2 of { (TkAlphaNum happy_var_2) -> + happyIn38 + ((Just happy_var_2) + )} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_68 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_68 = happyReduce 4# 34# happyReduction_68 +happyReduction_68 (happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOut37 happy_x_1 of { happy_var_1 -> + case happyOut40 happy_x_3 of { happy_var_3 -> + happyIn39 + (ArrayType happy_var_1 (reverse happy_var_3) + ) `HappyStk` happyRest}} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_69 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_69 = happySpecReduce_1 35# happyReduction_69 +happyReduction_69 happy_x_1 + = case happyOut37 happy_x_1 of { happy_var_1 -> + happyIn40 + ([happy_var_1] + )} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_70 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_70 = happySpecReduce_3 35# happyReduction_70 +happyReduction_70 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut40 happy_x_1 of { happy_var_1 -> + case happyOut37 happy_x_3 of { happy_var_3 -> + happyIn40 + (happy_var_3:happy_var_1 + )}} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_71 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_71 = happySpecReduce_0 36# happyReduction_71 +happyReduction_71 = happyIn41 + ([] + ) + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_72 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_72 = happySpecReduce_1 36# happyReduction_72 +happyReduction_72 happy_x_1 + = case happyOut42 happy_x_1 of { happy_var_1 -> + happyIn41 + (happy_var_1 + )} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_73 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_73 = happySpecReduce_1 37# happyReduction_73 +happyReduction_73 happy_x_1 + = case happyOut43 happy_x_1 of { happy_var_1 -> + happyIn42 + ([happy_var_1] + )} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_74 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_74 = happySpecReduce_3 37# happyReduction_74 +happyReduction_74 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut42 happy_x_1 of { happy_var_1 -> + case happyOut44 happy_x_3 of { happy_var_3 -> + happyIn42 + (happy_var_3:happy_var_1 + )}} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_75 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_75 = happySpecReduce_1 38# happyReduction_75 +happyReduction_75 happy_x_1 + = case happyOut44 happy_x_1 of { happy_var_1 -> + happyIn43 + (happy_var_1 + )} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_76 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_76 = happySpecReduce_3 38# happyReduction_76 +happyReduction_76 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut43 happy_x_1 of { happy_var_1 -> + case happyOut43 happy_x_3 of { happy_var_3 -> + happyIn43 + (Seq happy_var_1 happy_var_3 + )}} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_77 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_77 = happyReduce 6# 38# happyReduction_77 +happyReduction_77 (happy_x_6 `HappyStk` + happy_x_5 `HappyStk` + happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOut44 happy_x_2 of { happy_var_2 -> + case happyOut20 happy_x_4 of { happy_var_4 -> + case happyOut20 happy_x_6 of { happy_var_6 -> + happyIn43 + (If False happy_var_2 happy_var_4 happy_var_6 + ) `HappyStk` happyRest}}} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_78 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_78 = happyReduce 6# 38# happyReduction_78 +happyReduction_78 (happy_x_6 `HappyStk` + happy_x_5 `HappyStk` + happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOut44 happy_x_2 of { happy_var_2 -> + case happyOut20 happy_x_4 of { happy_var_4 -> + case happyOut20 happy_x_6 of { happy_var_6 -> + happyIn43 + (If True happy_var_2 happy_var_4 happy_var_6 + ) `HappyStk` happyRest}}} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_79 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_79 = happyReduce 4# 38# happyReduction_79 +happyReduction_79 (happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOut44 happy_x_2 of { happy_var_2 -> + case happyOut20 happy_x_4 of { happy_var_4 -> + happyIn43 + (While happy_var_2 happy_var_4 + ) `HappyStk` happyRest}} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_80 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_80 = happyReduce 9# 38# happyReduction_80 +happyReduction_80 (happy_x_9 `HappyStk` + happy_x_8 `HappyStk` + happy_x_7 `HappyStk` + happy_x_6 `HappyStk` + happy_x_5 `HappyStk` + happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOut44 happy_x_3 of { happy_var_3 -> + case happyOut44 happy_x_5 of { happy_var_5 -> + case happyOut44 happy_x_7 of { happy_var_7 -> + case happyOut20 happy_x_9 of { happy_var_9 -> + happyIn43 + (For happy_var_3 happy_var_5 happy_var_7 happy_var_9 + ) `HappyStk` happyRest}}}} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_81 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_81 = happySpecReduce_1 38# happyReduction_81 +happyReduction_81 happy_x_1 + = case happyOut20 happy_x_1 of { happy_var_1 -> + happyIn43 + (happy_var_1 + )} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_82 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_82 = happySpecReduce_1 39# happyReduction_82 +happyReduction_82 happy_x_1 + = case happyOut46 happy_x_1 of { happy_var_1 -> + happyIn44 + (happy_var_1 + )} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_83 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_83 = happySpecReduce_3 39# happyReduction_83 +happyReduction_83 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut44 happy_x_2 of { happy_var_2 -> + happyIn44 + (happy_var_2 + )} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_84 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_84 = happySpecReduce_3 39# happyReduction_84 +happyReduction_84 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut45 happy_x_1 of { happy_var_1 -> + case happyOut44 happy_x_3 of { happy_var_3 -> + happyIn44 + (AssignVar happy_var_1 happy_var_3 + )}} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_85 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_85 = happySpecReduce_1 39# happyReduction_85 +happyReduction_85 happy_x_1 + = case happyOut45 happy_x_1 of { happy_var_1 -> + happyIn44 + (ExpVar happy_var_1 + )} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_86 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_86 = happyReduce 6# 39# happyReduction_86 +happyReduction_86 (happy_x_6 `HappyStk` + happy_x_5 `HappyStk` + happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOut19 happy_x_1 of { happy_var_1 -> + case happyOut45 happy_x_3 of { happy_var_3 -> + case happyOut41 happy_x_5 of { happy_var_5 -> + happyIn44 + (LblMethCall (Just happy_var_1) happy_var_3 (reverse happy_var_5) + ) `HappyStk` happyRest}}} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_87 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_87 = happyReduce 4# 39# happyReduction_87 +happyReduction_87 (happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOut45 happy_x_1 of { happy_var_1 -> + case happyOut41 happy_x_3 of { happy_var_3 -> + happyIn44 + (LblMethCall Nothing happy_var_1 (reverse happy_var_3) + ) `HappyStk` happyRest}} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_88 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_88 = happySpecReduce_2 39# happyReduction_88 +happyReduction_88 happy_x_2 + happy_x_1 + = case happyOut44 happy_x_2 of { happy_var_2 -> + happyIn44 + (LblMethCall (Nothing) "minus" ((KIntNum 0):[happy_var_2]) + )} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_89 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_89 = happySpecReduce_1 39# happyReduction_89 +happyReduction_89 happy_x_1 + = happyIn44 + (ExpError + ) + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_90 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_90 = happySpecReduce_3 39# happyReduction_90 +happyReduction_90 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut44 happy_x_1 of { happy_var_1 -> + case happyOut44 happy_x_3 of { happy_var_3 -> + happyIn44 + (LblMethCall (Nothing) "plus" (happy_var_1:[happy_var_3]) + )}} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_91 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_91 = happySpecReduce_3 39# happyReduction_91 +happyReduction_91 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut44 happy_x_1 of { happy_var_1 -> + case happyOut44 happy_x_3 of { happy_var_3 -> + happyIn44 + (LblMethCall (Nothing) "minus" (happy_var_1:[happy_var_3]) + )}} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_92 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_92 = happySpecReduce_3 39# happyReduction_92 +happyReduction_92 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut44 happy_x_1 of { happy_var_1 -> + case happyOut44 happy_x_3 of { happy_var_3 -> + happyIn44 + (LblMethCall (Nothing) "mul" (happy_var_1:[happy_var_3]) + )}} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_93 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_93 = happySpecReduce_3 39# happyReduction_93 +happyReduction_93 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut44 happy_x_1 of { happy_var_1 -> + case happyOut44 happy_x_3 of { happy_var_3 -> + happyIn44 + (LblMethCall (Nothing) "divide" (happy_var_1:[happy_var_3]) + )}} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_94 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_94 = happySpecReduce_3 39# happyReduction_94 +happyReduction_94 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut44 happy_x_1 of { happy_var_1 -> + case happyOut44 happy_x_3 of { happy_var_3 -> + happyIn44 + (LblMethCall (Nothing) "eq" (happy_var_1:[happy_var_3]) + )}} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_95 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_95 = happySpecReduce_3 39# happyReduction_95 +happyReduction_95 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut44 happy_x_1 of { happy_var_1 -> + case happyOut44 happy_x_3 of { happy_var_3 -> + happyIn44 + (LblMethCall (Nothing) "lt" (happy_var_1:[happy_var_3]) + )}} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_96 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_96 = happySpecReduce_3 39# happyReduction_96 +happyReduction_96 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut44 happy_x_1 of { happy_var_1 -> + case happyOut44 happy_x_3 of { happy_var_3 -> + happyIn44 + (LblMethCall (Nothing) "gt" (happy_var_1:[happy_var_3]) + )}} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_97 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_97 = happySpecReduce_3 39# happyReduction_97 +happyReduction_97 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut44 happy_x_1 of { happy_var_1 -> + case happyOut44 happy_x_3 of { happy_var_3 -> + happyIn44 + (LblMethCall (Nothing) "gte" (happy_var_1:[happy_var_3]) + )}} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_98 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_98 = happySpecReduce_3 39# happyReduction_98 +happyReduction_98 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut44 happy_x_1 of { happy_var_1 -> + case happyOut44 happy_x_3 of { happy_var_3 -> + happyIn44 + (LblMethCall (Nothing) "lte" (happy_var_1:[happy_var_3]) + )}} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_99 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_99 = happyReduce 8# 39# happyReduction_99 +happyReduction_99 (happy_x_8 `HappyStk` + happy_x_7 `HappyStk` + happy_x_6 `HappyStk` + happy_x_5 `HappyStk` + happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOut19 happy_x_1 of { happy_var_1 -> + case happyOut45 happy_x_3 of { happy_var_3 -> + case happyOut41 happy_x_5 of { happy_var_5 -> + case happyOut44 happy_x_8 of { happy_var_8 -> + happyIn44 + (LblMethCall (Just happy_var_1) "assign" ((ExpVar happy_var_3):(reverse (happy_var_8:happy_var_5))) + ) `HappyStk` happyRest}}}} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_100 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_100 = happyReduce 6# 39# happyReduction_100 +happyReduction_100 (happy_x_6 `HappyStk` + happy_x_5 `HappyStk` + happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOut45 happy_x_1 of { happy_var_1 -> + case happyOut41 happy_x_3 of { happy_var_3 -> + case happyOut44 happy_x_6 of { happy_var_6 -> + happyIn44 + (LblMethCall Nothing "assign" ((ExpVar happy_var_1):(reverse (happy_var_6:happy_var_3))) + ) `HappyStk` happyRest}}} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_101 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_101 = happyReduce 6# 39# happyReduction_101 +happyReduction_101 (happy_x_6 `HappyStk` + happy_x_5 `HappyStk` + happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOut19 happy_x_1 of { happy_var_1 -> + case happyOut45 happy_x_3 of { happy_var_3 -> + case happyOut41 happy_x_5 of { happy_var_5 -> + happyIn44 + (LblMethCall (Just happy_var_1) "sub" ((ExpVar happy_var_3):(reverse happy_var_5)) + ) `HappyStk` happyRest}}} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_102 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_102 = happyReduce 4# 39# happyReduction_102 +happyReduction_102 (happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOut45 happy_x_1 of { happy_var_1 -> + case happyOut41 happy_x_3 of { happy_var_3 -> + happyIn44 + (LblMethCall Nothing "sub" ((ExpVar happy_var_1):(reverse happy_var_3)) + ) `HappyStk` happyRest}} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_103 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_103 = happySpecReduce_1 40# happyReduction_103 +happyReduction_103 happy_x_1 + = case happyOutTok happy_x_1 of { (TkAlphaNum happy_var_1) -> + happyIn45 + (happy_var_1 + )} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_104 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_104 = happySpecReduce_1 41# happyReduction_104 +happyReduction_104 happy_x_1 + = happyIn46 + (KTrue + ) + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_105 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_105 = happySpecReduce_1 41# happyReduction_105 +happyReduction_105 happy_x_1 + = happyIn46 + (KFalse + ) + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_106 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_106 = happySpecReduce_1 41# happyReduction_106 +happyReduction_106 happy_x_1 + = case happyOut47 happy_x_1 of { happy_var_1 -> + happyIn46 + (happy_var_1 + )} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_107 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_107 = happySpecReduce_1 41# happyReduction_107 +happyReduction_107 happy_x_1 + = happyIn46 + (KVoid + ) + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_108 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_108 = happySpecReduce_1 42# happyReduction_108 +happyReduction_108 happy_x_1 + = case happyOutTok happy_x_1 of { (TkIntNum happy_var_1) -> + happyIn47 + (KIntNum happy_var_1 + )} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_109 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_109 = happySpecReduce_1 42# happyReduction_109 +happyReduction_109 happy_x_1 + = case happyOutTok happy_x_1 of { (TkFloatNum happy_var_1) -> + happyIn47 + (KFloatNum happy_var_1 + )} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_110 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_110 = happySpecReduce_3 43# happyReduction_110 +happyReduction_110 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut49 happy_x_2 of { happy_var_2 -> + happyIn48 + (happy_var_2 + )} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_111 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_111 = happySpecReduce_1 44# happyReduction_111 +happyReduction_111 happy_x_1 + = case happyOut50 happy_x_1 of { (HappyWrap50 happy_var_1) -> + happyIn49 + (happy_var_1 + )} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_112 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_112 = happySpecReduce_3 44# happyReduction_112 +happyReduction_112 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut49 happy_x_2 of { happy_var_2 -> + happyIn49 + (happy_var_2 + )} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_113 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_113 = happySpecReduce_3 44# happyReduction_113 +happyReduction_113 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut49 happy_x_1 of { happy_var_1 -> + case happyOut49 happy_x_3 of { happy_var_3 -> + happyIn49 + (And [happy_var_1,happy_var_3] + )}} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_114 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_114 = happySpecReduce_3 44# happyReduction_114 +happyReduction_114 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut49 happy_x_1 of { happy_var_1 -> + case happyOut49 happy_x_3 of { happy_var_3 -> + happyIn49 + (Or [happy_var_1,happy_var_3] + )}} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_115 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_115 = happySpecReduce_1 44# happyReduction_115 +happyReduction_115 happy_x_1 + = happyIn49 + (fTrue + ) + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_116 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_116 = happySpecReduce_1 44# happyReduction_116 +happyReduction_116 happy_x_1 + = happyIn49 + (fFalse + ) + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_117 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_117 = happySpecReduce_1 44# happyReduction_117 +happyReduction_117 happy_x_1 + = happyIn49 + (FormulaBogus + ) + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_118 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_118 = happySpecReduce_1 45# happyReduction_118 +happyReduction_118 happy_x_1 + = case happyOut51 happy_x_1 of { (HappyWrap51 happy_var_1) -> + happyIn50 + (let (f,rest)=happy_var_1 in f + )} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_119 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_119 = happyReduce 6# 45# happyReduction_119 +happyReduction_119 (happy_x_6 `HappyStk` + happy_x_5 `HappyStk` + happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOut56 happy_x_3 of { happy_var_3 -> + case happyOut49 happy_x_5 of { happy_var_5 -> + happyIn50 + (fExists (reverse happy_var_3) happy_var_5 + ) `HappyStk` happyRest}} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_120 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_120 = happyReduce 6# 45# happyReduction_120 +happyReduction_120 (happy_x_6 `HappyStk` + happy_x_5 `HappyStk` + happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOut56 happy_x_3 of { happy_var_3 -> + case happyOut49 happy_x_5 of { happy_var_5 -> + happyIn50 + (fForall (reverse happy_var_3) happy_var_5 + ) `HappyStk` happyRest}} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_121 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_121 = happySpecReduce_1 46# happyReduction_121 +happyReduction_121 happy_x_1 + = case happyOut52 happy_x_1 of { (HappyWrap52 happy_var_1) -> + happyIn51 + (happy_var_1 + )} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_122 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_122 = happySpecReduce_3 46# happyReduction_122 +happyReduction_122 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut51 happy_x_1 of { (HappyWrap51 happy_var_1) -> + case happyOut53 happy_x_2 of { (HappyWrap53 happy_var_2) -> + case happyOut54 happy_x_3 of { (HappyWrap54 happy_var_3) -> + happyIn51 + (let (f,rest) = happy_var_1 in + let third = reverse happy_var_3 in + let combi = [(e1,e2) | e1 <- rest, e2 <- third] in + case happy_var_2 of + TkEq -> + let newfs = map (\(e1,e2) -> EqK (e1 ++ (minus_update e2))) combi in + (And (f:newfs),third) + TkGTE -> + let newfs = map (\(e1,e2) -> GEq (e1 ++ (minus_update e2))) combi in + (And (f:newfs),third) + TkGT -> + let newfs = map (\(e1,e2) -> GEq ((Const (-1)):(e1 ++ minus_update e2))) combi in + (And (f:newfs),third) + TkLTE -> + let newfs = map (\(e1,e2) -> GEq (e2 ++ (minus_update e1))) combi in + (And (f:newfs),third) + TkLT -> + let newfs = map (\(e1,e2) -> GEq ((Const (-1)):(e2 ++ minus_update e1))) combi in + (And (f:newfs),third) + )}}} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_123 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_123 = happySpecReduce_3 47# happyReduction_123 +happyReduction_123 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut54 happy_x_1 of { (HappyWrap54 happy_var_1) -> + case happyOut53 happy_x_2 of { (HappyWrap53 happy_var_2) -> + case happyOut54 happy_x_3 of { (HappyWrap54 happy_var_3) -> + happyIn52 + (let (first,third) = (reverse happy_var_1,reverse happy_var_3) in + let combi = [(e1,e2) | e1 <- first, e2 <- third] in + case happy_var_2 of + TkEq -> + let newfs = map (\(e1,e2) -> (EqK (e1 ++ (minus_update e2)))) combi in + if singleton newfs then (head newfs,third) else (And newfs,third) + TkGTE -> + let newfs = map (\(e1,e2) -> (GEq (e1 ++ (minus_update e2)))) combi in + if singleton newfs then (head newfs,third) else (And newfs,third) + TkGT -> + let newfs = map (\(e1,e2) -> (GEq ((Const (- 1)):(e1 ++ (minus_update e2))) )) combi in + if singleton newfs then (head newfs,third) else (And newfs,third) + TkLTE -> + let newfs = map (\(e1,e2) -> (GEq (e2 ++ (minus_update e1)))) combi in + if singleton newfs then (head newfs,third) else (And newfs,third) + TkLT -> + let newfs = map (\(e1,e2) -> (GEq ((Const (- 1)):(e2 ++ (minus_update e1))) )) combi in + if singleton newfs then (head newfs,third) else (And newfs,third) + )}}} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_124 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_124 = happySpecReduce_1 48# happyReduction_124 +happyReduction_124 happy_x_1 + = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn53 + (happy_var_1 + )} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_125 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_125 = happySpecReduce_1 48# happyReduction_125 +happyReduction_125 happy_x_1 + = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn53 + (happy_var_1 + )} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_126 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_126 = happySpecReduce_1 48# happyReduction_126 +happyReduction_126 happy_x_1 + = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn53 + (happy_var_1 + )} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_127 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_127 = happySpecReduce_1 48# happyReduction_127 +happyReduction_127 happy_x_1 + = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn53 + (happy_var_1 + )} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_128 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_128 = happySpecReduce_1 48# happyReduction_128 +happyReduction_128 happy_x_1 + = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn53 + (happy_var_1 + )} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_129 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_129 = happySpecReduce_3 49# happyReduction_129 +happyReduction_129 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut54 happy_x_1 of { (HappyWrap54 happy_var_1) -> + case happyOut55 happy_x_3 of { (HappyWrap55 happy_var_3) -> + happyIn54 + (happy_var_3:happy_var_1 + )}} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_130 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_130 = happySpecReduce_1 49# happyReduction_130 +happyReduction_130 happy_x_1 + = case happyOut55 happy_x_1 of { (HappyWrap55 happy_var_1) -> + happyIn54 + ([happy_var_1] + )} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_131 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_131 = happySpecReduce_3 50# happyReduction_131 +happyReduction_131 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut55 happy_x_1 of { (HappyWrap55 happy_var_1) -> + case happyOut55 happy_x_3 of { (HappyWrap55 happy_var_3) -> + happyIn55 + (happy_var_1 ++ happy_var_3 + )}} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_132 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_132 = happySpecReduce_3 50# happyReduction_132 +happyReduction_132 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut55 happy_x_1 of { (HappyWrap55 happy_var_1) -> + case happyOut55 happy_x_3 of { (HappyWrap55 happy_var_3) -> + happyIn55 + (happy_var_1 ++ (minus_update happy_var_3) + )}} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_133 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_133 = happySpecReduce_3 50# happyReduction_133 +happyReduction_133 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut55 happy_x_2 of { (HappyWrap55 happy_var_2) -> + happyIn55 + (happy_var_2 + )} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_134 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_134 = happySpecReduce_2 50# happyReduction_134 +happyReduction_134 happy_x_2 + happy_x_1 + = case happyOutTok happy_x_1 of { (TkIntNum happy_var_1) -> + case happyOut57 happy_x_2 of { (HappyWrap57 happy_var_2) -> + happyIn55 + ([ Coef happy_var_2 happy_var_1 ] + )}} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_135 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_135 = happySpecReduce_3 50# happyReduction_135 +happyReduction_135 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOutTok happy_x_2 of { (TkIntNum happy_var_2) -> + case happyOut57 happy_x_3 of { (HappyWrap57 happy_var_3) -> + happyIn55 + ([ Coef happy_var_3 (-happy_var_2) ] + )}} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_136 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_136 = happySpecReduce_1 50# happyReduction_136 +happyReduction_136 happy_x_1 + = case happyOutTok happy_x_1 of { (TkIntNum happy_var_1) -> + happyIn55 + ([ Const happy_var_1 ] + )} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_137 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_137 = happySpecReduce_2 50# happyReduction_137 +happyReduction_137 happy_x_2 + happy_x_1 + = case happyOutTok happy_x_2 of { (TkIntNum happy_var_2) -> + happyIn55 + ([ Const (- happy_var_2)] + )} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_138 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_138 = happySpecReduce_1 50# happyReduction_138 +happyReduction_138 happy_x_1 + = case happyOut57 happy_x_1 of { (HappyWrap57 happy_var_1) -> + happyIn55 + ([ Coef happy_var_1 1 ] + )} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_139 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_139 = happySpecReduce_2 50# happyReduction_139 +happyReduction_139 happy_x_2 + happy_x_1 + = case happyOut57 happy_x_2 of { (HappyWrap57 happy_var_2) -> + happyIn55 + ([ Coef happy_var_2 (-1) ] + )} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_140 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_140 = happySpecReduce_3 51# happyReduction_140 +happyReduction_140 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut56 happy_x_1 of { happy_var_1 -> + case happyOut57 happy_x_3 of { (HappyWrap57 happy_var_3) -> + happyIn56 + (happy_var_3:happy_var_1 + )}} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_141 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_141 = happySpecReduce_1 51# happyReduction_141 +happyReduction_141 happy_x_1 + = case happyOut57 happy_x_1 of { (HappyWrap57 happy_var_1) -> + happyIn56 + ([happy_var_1] + )} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_142 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_142 = happySpecReduce_1 52# happyReduction_142 +happyReduction_142 happy_x_1 + = case happyOutTok happy_x_1 of { (TkAlphaNum happy_var_1) -> + happyIn57 + ((stringToQsv happy_var_1) + )} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_143 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_143 = happySpecReduce_2 52# happyReduction_143 +happyReduction_143 happy_x_2 + happy_x_1 + = case happyOutTok happy_x_1 of { (TkAlphaNum happy_var_1) -> + happyIn57 + ((SizeVar happy_var_1,Primed) + )} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_144 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_144 = happySpecReduce_2 52# happyReduction_144 +happyReduction_144 happy_x_2 + happy_x_1 + = case happyOutTok happy_x_1 of { (TkAlphaNum happy_var_1) -> + happyIn57 + ((SizeVar happy_var_1,Recursive) + )} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_145 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_145 = happySpecReduce_3 52# happyReduction_145 +happyReduction_145 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOutTok happy_x_1 of { (TkAlphaNum happy_var_1) -> + case happyOutTok happy_x_3 of { (TkAlphaNum happy_var_3) -> + happyIn57 + (if (happy_var_3=="min") + then ((ArrSizeVar happy_var_1 Min),Unprimed) + else + if (happy_var_3=="max") + then ((ArrSizeVar happy_var_1 Max),Unprimed) + else error $ "neither min or max after QSizeVar" + )}} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_146 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_146 = happyReduce 4# 52# happyReduction_146 +happyReduction_146 (happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOutTok happy_x_1 of { (TkAlphaNum happy_var_1) -> + case happyOutTok happy_x_3 of { (TkAlphaNum happy_var_3) -> + happyIn57 + (if (happy_var_3=="min") + then ((ArrSizeVar happy_var_1 Min),Primed) + else + if (happy_var_3=="max") + then ((ArrSizeVar happy_var_1 Max),Primed) + else error $ "neither min or max after QSizeVar" + ) `HappyStk` happyRest}} + +#if __GLASGOW_HASKELL__ >= 710 +happyReduce_147 :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) +#endif +happyReduce_147 = happyReduce 4# 52# happyReduction_147 +happyReduction_147 (happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOutTok happy_x_1 of { (TkAlphaNum happy_var_1) -> + case happyOutTok happy_x_3 of { (TkAlphaNum happy_var_3) -> + happyIn57 + (if (happy_var_3=="min") + then ((ArrSizeVar happy_var_1 Min),Recursive) + else + if (happy_var_3=="max") + then ((ArrSizeVar happy_var_1 Max),Recursive) + else error $ "neither min or max after QSizeVar" + ) `HappyStk` happyRest}} + +happyNewToken action sts stk + = lexer(\tk -> + let cont i = happyDoAction i tk action sts stk in + case tk of { + TkEOF -> happyDoAction 50# tk action sts stk; + TkAlphaNum happy_dollar_dollar -> cont 1#; + TkIntNum happy_dollar_dollar -> cont 2#; + TkFloatNum happy_dollar_dollar -> cont 3#; + TkString happy_dollar_dollar -> cont 4#; + TkTrue -> cont 5#; + TkFalse -> cont 6#; + TkBogus -> cont 7#; + TkKwVoid -> cont 8#; + TkKwInt -> cont 9#; + TkKwBool -> cont 10#; + TkKwFloat -> cont 11#; + TkKwIf -> cont 12#; + TkKwIfND -> cont 13#; + TkKwThen -> cont 14#; + TkKwElse -> cont 15#; + TkKwWhile -> cont 16#; + TkKwFor -> cont 17#; + TkKwDo -> cont 18#; + TkKwRef -> cont 19#; + TkPlus -> cont 20#; + TkMinus -> cont 21#; + TkMul -> cont 22#; + TkDiv -> cont 23#; + TkLBr -> cont 24#; + TkRBr -> cont 25#; + TkSemiColon -> cont 26#; + TkAssign -> cont 27#; + TkLSqBr -> cont 28#; + TkRSqBr -> cont 29#; + TkLAcc -> cont 30#; + TkRAcc -> cont 31#; + TkComma -> cont 32#; + TkEq -> cont 33#; + TkLT -> cont 34#; + TkGT -> cont 35#; + TkGTE -> cont 36#; + TkLTE -> cont 37#; + TkAnd -> cont 38#; + TkOr -> cont 39#; + TkWhere -> cont 40#; + TkColon -> cont 41#; + TkDot -> cont 42#; + TkExists -> cont 43#; + TkForall -> cont 44#; + TkPrime -> cont 45#; + TkRec -> cont 46#; + TkError -> cont 47#; + TkHash -> cont 48#; + TkKwInclude -> cont 49#; + _ -> happyError' (tk, []) + }) + +happyError_ explist 50# tk = happyError' (tk, explist) +happyError_ explist _ tk = happyError' (tk, explist) + +happyThen :: () => P a -> (a -> P b) -> P b +happyThen = (Prelude.>>=) +happyReturn :: () => a -> P a +happyReturn = (Prelude.return) +#if __GLASGOW_HASKELL__ >= 710 +happyParse :: () => Happy_GHC_Exts.Int# -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) + +happyNewToken :: () => Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) + +happyDoAction :: () => Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) + +happyReduceArr :: () => Happy_Data_Array.Array Prelude.Int (Happy_GHC_Exts.Int# -> Tk -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> P (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)) + +#endif +happyThen1 :: () => P a -> (a -> P b) -> P b +happyThen1 = happyThen +happyReturn1 :: () => a -> P a +happyReturn1 = happyReturn +happyError' :: () => ((Tk), [Prelude.String]) -> P a +happyError' tk = (\(tokens, explist) -> happyError) tk +parseProg = happySomeParser where + happySomeParser = happyThen (happyParse 0#) (\x -> happyReturn (let {(HappyWrap5 x') = happyOut5 x} in x')) + +parseLPrimDecl = happySomeParser where + happySomeParser = happyThen (happyParse 1#) (\x -> happyReturn (let {x' = happyOut9 x} in x')) + +happySeq = happyDontSeq + + +happyError :: P a +happyError = do l <- getLineNum + s <- getInput + error $ "Parse error on line " ++ (show l) ++ " rest of line: " ++ (takeWhile (/= '\n') s) + +minus_update :: [Update] -> [Update] +minus_update [] = [] +minus_update ((Const i):us) = (Const (- i)):(minus_update us) +minus_update ((Coef v i):us) = (Coef v (- i)):(minus_update us) + +--returning type varies depending on the grammar's start symbol +parse :: String -> IO Prog +parse s = runP s parseProg +--parseFormula s = runP s parseFormula1 +{-# LINE 1 "templates/GenericTemplate.hs" #-} +-- $Id: GenericTemplate.hs,v 1.26 2005/01/14 14:47:22 simonmar Exp $ + + + + + + + + + + + + + +-- Do not remove this comment. Required to fix CPP parsing when using GCC and a clang-compiled alex. +#if __GLASGOW_HASKELL__ > 706 +#define LT(n,m) ((Happy_GHC_Exts.tagToEnum# (n Happy_GHC_Exts.<# m)) :: Prelude.Bool) +#define GTE(n,m) ((Happy_GHC_Exts.tagToEnum# (n Happy_GHC_Exts.>=# m)) :: Prelude.Bool) +#define EQ(n,m) ((Happy_GHC_Exts.tagToEnum# (n Happy_GHC_Exts.==# m)) :: Prelude.Bool) +#else +#define LT(n,m) (n Happy_GHC_Exts.<# m) +#define GTE(n,m) (n Happy_GHC_Exts.>=# m) +#define EQ(n,m) (n Happy_GHC_Exts.==# m) +#endif + + + + + + + + + + + + + + + + + + + +data Happy_IntList = HappyCons Happy_GHC_Exts.Int# Happy_IntList + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +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 ERROR_TOK, 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 0# tk st sts (_ `HappyStk` ans `HappyStk` _) = + happyReturn1 ans +happyAccept j tk st sts (HappyStk ans _) = + (happyTcHack j (happyTcHack st)) (happyReturn1 ans) + +----------------------------------------------------------------------------- +-- Arrays only: do the next action + + + +happyDoAction i tk st + = {- nothing -} + case action of + 0# -> {- nothing -} + happyFail (happyExpListPerState ((Happy_GHC_Exts.I# (st)) :: Prelude.Int)) i tk st + -1# -> {- nothing -} + happyAccept i tk st + n | LT(n,(0# :: Happy_GHC_Exts.Int#)) -> {- nothing -} + (happyReduceArr Happy_Data_Array.! rule) i tk st + where rule = (Happy_GHC_Exts.I# ((Happy_GHC_Exts.negateInt# ((n Happy_GHC_Exts.+# (1# :: Happy_GHC_Exts.Int#)))))) + n -> {- nothing -} + happyShift new_state i tk st + where new_state = (n Happy_GHC_Exts.-# (1# :: Happy_GHC_Exts.Int#)) + where off = happyAdjustOffset (indexShortOffAddr happyActOffsets st) + off_i = (off Happy_GHC_Exts.+# i) + check = if GTE(off_i,(0# :: Happy_GHC_Exts.Int#)) + then EQ(indexShortOffAddr happyCheck off_i, i) + else Prelude.False + action + | check = indexShortOffAddr happyTable off_i + | Prelude.otherwise = indexShortOffAddr happyDefActions st + + + + +indexShortOffAddr (HappyA# arr) off = + Happy_GHC_Exts.narrow16Int# i + where + i = Happy_GHC_Exts.word2Int# (Happy_GHC_Exts.or# (Happy_GHC_Exts.uncheckedShiftL# high 8#) low) + high = Happy_GHC_Exts.int2Word# (Happy_GHC_Exts.ord# (Happy_GHC_Exts.indexCharOffAddr# arr (off' Happy_GHC_Exts.+# 1#))) + low = Happy_GHC_Exts.int2Word# (Happy_GHC_Exts.ord# (Happy_GHC_Exts.indexCharOffAddr# arr off')) + off' = off Happy_GHC_Exts.*# 2# + + + + +{-# INLINE happyLt #-} +happyLt x y = LT(x,y) + + +readArrayBit arr bit = + Bits.testBit (Happy_GHC_Exts.I# (indexShortOffAddr arr ((unbox_int bit) `Happy_GHC_Exts.iShiftRA#` 4#))) (bit `Prelude.mod` 16) + where unbox_int (Happy_GHC_Exts.I# x) = x + + + + + + +data HappyAddr = HappyA# Happy_GHC_Exts.Addr# + + +----------------------------------------------------------------------------- +-- HappyState data type (not arrays) + + + + + + + + + + + + + +----------------------------------------------------------------------------- +-- Shifting a token + +happyShift new_state 0# tk st sts stk@(x `HappyStk` _) = + let i = (case Happy_GHC_Exts.unsafeCoerce# x of { (Happy_GHC_Exts.I# (i)) -> i }) in +-- trace "shifting the error token" $ + happyDoAction i tk new_state (HappyCons (st) (sts)) (stk) + +happyShift new_state i tk st sts stk = + happyNewToken new_state (HappyCons (st) (sts)) ((happyInTok (tk))`HappyStk`stk) + +-- happyReduce is specialised for the common cases. + +happySpecReduce_0 i fn 0# tk st sts stk + = happyFail [] 0# tk st sts stk +happySpecReduce_0 nt fn j tk st@((action)) sts stk + = happyGoto nt j tk st (HappyCons (st) (sts)) (fn `HappyStk` stk) + +happySpecReduce_1 i fn 0# tk st sts stk + = happyFail [] 0# tk st sts stk +happySpecReduce_1 nt fn j tk _ sts@((HappyCons (st@(action)) (_))) (v1`HappyStk`stk') + = let r = fn v1 in + happySeq r (happyGoto nt j tk st sts (r `HappyStk` stk')) + +happySpecReduce_2 i fn 0# tk st sts stk + = happyFail [] 0# tk st sts stk +happySpecReduce_2 nt fn j tk _ (HappyCons (_) (sts@((HappyCons (st@(action)) (_))))) (v1`HappyStk`v2`HappyStk`stk') + = let r = fn v1 v2 in + happySeq r (happyGoto nt j tk st sts (r `HappyStk` stk')) + +happySpecReduce_3 i fn 0# tk st sts stk + = happyFail [] 0# tk st sts stk +happySpecReduce_3 nt fn j tk _ (HappyCons (_) ((HappyCons (_) (sts@((HappyCons (st@(action)) (_))))))) (v1`HappyStk`v2`HappyStk`v3`HappyStk`stk') + = let r = fn v1 v2 v3 in + happySeq r (happyGoto nt j tk st sts (r `HappyStk` stk')) + +happyReduce k i fn 0# tk st sts stk + = happyFail [] 0# tk st sts stk +happyReduce k nt fn j tk st sts stk + = case happyDrop (k Happy_GHC_Exts.-# (1# :: Happy_GHC_Exts.Int#)) sts of + sts1@((HappyCons (st1@(action)) (_))) -> + let r = fn stk in -- it doesn't hurt to always seq here... + happyDoSeq r (happyGoto nt j tk st1 sts1 r) + +happyMonadReduce k nt fn 0# tk st sts stk + = happyFail [] 0# tk st sts stk +happyMonadReduce k nt fn j tk st sts stk = + case happyDrop k (HappyCons (st) (sts)) of + sts1@((HappyCons (st1@(action)) (_))) -> + let drop_stk = happyDropStk k stk in + happyThen1 (fn stk tk) (\r -> happyGoto nt j tk st1 sts1 (r `HappyStk` drop_stk)) + +happyMonad2Reduce k nt fn 0# tk st sts stk + = happyFail [] 0# tk st sts stk +happyMonad2Reduce k nt fn j tk st sts stk = + case happyDrop k (HappyCons (st) (sts)) of + sts1@((HappyCons (st1@(action)) (_))) -> + let drop_stk = happyDropStk k stk + + off = happyAdjustOffset (indexShortOffAddr happyGotoOffsets st1) + off_i = (off Happy_GHC_Exts.+# nt) + new_state = indexShortOffAddr happyTable off_i + + + + + in + happyThen1 (fn stk tk) (\r -> happyNewToken new_state sts1 (r `HappyStk` drop_stk)) + +happyDrop 0# l = l +happyDrop n (HappyCons (_) (t)) = happyDrop (n Happy_GHC_Exts.-# (1# :: Happy_GHC_Exts.Int#)) t + +happyDropStk 0# l = l +happyDropStk n (x `HappyStk` xs) = happyDropStk (n Happy_GHC_Exts.-# (1#::Happy_GHC_Exts.Int#)) xs + +----------------------------------------------------------------------------- +-- Moving to a new state after a reduction + + +happyGoto nt j tk st = + {- nothing -} + happyDoAction j tk new_state + where off = happyAdjustOffset (indexShortOffAddr happyGotoOffsets st) + off_i = (off Happy_GHC_Exts.+# nt) + new_state = indexShortOffAddr happyTable off_i + + + + +----------------------------------------------------------------------------- +-- Error recovery (ERROR_TOK is the error token) + +-- parse error if we are in recovery and we fail again +happyFail explist 0# tk old_st _ stk@(x `HappyStk` _) = + let i = (case Happy_GHC_Exts.unsafeCoerce# x of { (Happy_GHC_Exts.I# (i)) -> i }) in +-- trace "failing" $ + happyError_ explist i 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 ERROR_TOK tk old_st CONS(HAPPYSTATE(action),sts) + (saved_tok `HappyStk` _ `HappyStk` stk) = +-- trace ("discarding state, depth " ++ show (length stk)) $ + DO_ACTION(action,ERROR_TOK,tk,sts,(saved_tok`HappyStk`stk)) +-} + +-- Enter error recovery: generate an error token, +-- save the old token and carry on. +happyFail explist i tk (action) sts stk = +-- trace "entering error recovery" $ + happyDoAction 0# tk action sts ((Happy_GHC_Exts.unsafeCoerce# (Happy_GHC_Exts.I# (i))) `HappyStk` stk) + +-- Internal happy errors: + +notHappyAtAll :: a +notHappyAtAll = Prelude.error "Internal Happy error\n" + +----------------------------------------------------------------------------- +-- Hack to get the typechecker to accept our action functions + + +happyTcHack :: Happy_GHC_Exts.Int# -> a -> a +happyTcHack x y = y +{-# INLINE happyTcHack #-} + + +----------------------------------------------------------------------------- +-- 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 `Prelude.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. + + +{-# NOINLINE happyDoAction #-} +{-# NOINLINE happyTable #-} +{-# NOINLINE happyCheck #-} +{-# NOINLINE happyActOffsets #-} +{-# NOINLINE happyGotoOffsets #-} +{-# NOINLINE happyDefActions #-} + +{-# 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. diff --git a/Makefile b/Makefile index 50c7112..01acfbf 100755 --- a/Makefile +++ b/Makefile @@ -48,7 +48,7 @@ OBJS = ImpMain.o ImpParser.o ImpTypeChecker.o ImpFormula.o ImpAST.o \ .y.hs: happy -agci $< -all: imp fixcalc +all: imp fixcalc loopinv imp : $(OBJS) ImpParser.y ImpMain.hs rm -f $@ @@ -58,6 +58,7 @@ imp : $(OBJS) ImpParser.y ImpMain.hs clean: rm -f *.hi *.o *~ imp ImpParser.hs *.info a.omega a.all.c a.c a.out a.impi a.impt a.omega-err a.pre oc.out fixcalc FixCalcParser.hs log + rm -f loopinv-bin $(LOOPINV_DIR)/*.hi $(LOOPINV_DIR)/*.o install: fixcalc scp fixcalc popeeaco@loris-7.ddns:/home/popeeaco/bin/. @@ -77,6 +78,23 @@ fixcalc: $(FixCalcOBJS) FixCalcParser.y FixCalcMain.hs ghc -o fixcalc $(HC_OPTS) -lstdc++ FixCalcMain.hs $(LIBS) $(OMEGA_LIBS) $(RAZVAN_LIBS) ##### +##### LoopInv - Loop Invariant Generator +LOOPINV_DIR = loopinv +LOOPINV_SRCS = $(LOOPINV_DIR)/AST.hs $(LOOPINV_DIR)/Lexer.hs \ + $(LOOPINV_DIR)/Parser.hs $(LOOPINV_DIR)/ImpEmit.hs \ + $(LOOPINV_DIR)/Main.hs + +loopinv: $(LOOPINV_SRCS) imp + ghc -o loopinv-bin -i$(LOOPINV_DIR) -package process -package filepath \ + --make $(LOOPINV_DIR)/Main.hs + +loopinv-test: loopinv + cd $(LOOPINV_DIR)/examples && ../../loopinv-bin test1.c + +loopinv-clean: + rm -f loopinv-bin $(LOOPINV_DIR)/*.hi $(LOOPINV_DIR)/*.o +##### + static: $(FixCalcOBJS) FixCalcParser.y FixCalcMain.hs rm -f fixcalc ghc -o fixcalc $(HC_SOPTS) -lstdc++ FixCalcMain.hs $(LIBS) $(OMEGA_LIBS) $(RAZVAN_LIBS) diff --git a/a.c b/a.c new file mode 100644 index 0000000..75ca43f --- /dev/null +++ b/a.c @@ -0,0 +1,20 @@ +#include "Primitives.h" + +void simple(int n) { + int x = 0; + return whilef_0(x,n); + } + +void whilef_0(int x,int n) { + bool v_14 = lt(x,n); + if (v_14) { + { + int v_12 = 1; + x=plus(x,v_12); + }; + return whilef_0(x,n); + } else { + return ; + }; + } + diff --git a/loopinv/AST.hs b/loopinv/AST.hs new file mode 100644 index 0000000..e31d386 --- /dev/null +++ b/loopinv/AST.hs @@ -0,0 +1,52 @@ +-- | Simple AST for C subset (loops, assignments, basic expressions) +module AST where + +-- | A program is a list of functions +data Program = Program [Func] + deriving (Show, Eq) + +-- | Function definition +data Func = Func { + funcRetType :: Type, + funcName :: String, + funcParams :: [(Type, String)], + funcBody :: [Stmt] + } + deriving (Show, Eq) + +-- | Types we support +data Type = TInt | TVoid + deriving (Show, Eq) + +-- | Statements +data Stmt + = VarDecl Type String (Maybe Expr) -- int x = 0; + | Assign String Expr -- x = expr; + | While Expr [Stmt] -- while (cond) { body } + | If Expr [Stmt] (Maybe [Stmt]) -- if (cond) { } else { } + | Return (Maybe Expr) -- return expr; + | ExprStmt Expr -- expr; + deriving (Show, Eq) + +-- | Expressions +data Expr + = Var String -- variable + | Lit Int -- integer literal + | BinOp BinOp Expr Expr -- e1 op e2 + | UnaryOp UnaryOp Expr -- op e + | Call String [Expr] -- func(args) + deriving (Show, Eq) + +-- | Binary operators +data BinOp + = Add | Sub | Mul | Div | Mod -- arithmetic + | Lt | Le | Gt | Ge | Eq | Ne -- comparison + | And | Or -- logical + deriving (Show, Eq) + +-- | Unary operators +data UnaryOp = Neg | Not + deriving (Show, Eq) + + + diff --git a/loopinv/ImpEmit.hs b/loopinv/ImpEmit.hs new file mode 100644 index 0000000..6644cdb --- /dev/null +++ b/loopinv/ImpEmit.hs @@ -0,0 +1,168 @@ +-- | Emit AST as Imp language syntax +module ImpEmit (emitImp) where + +import AST +import Data.List (intercalate) + +-- | Convert program to Imp source code +emitImp :: Program -> String +emitImp (Program funcs) = + "#include \"Primitives.imp\"\n\n" ++ + intercalate "\n\n" (map emitFunc funcs) + +-- | Emit a function (with variable hoisting for imp tool compatibility) +emitFunc :: Func -> String +emitFunc (Func retType name params body) = + let (hoisted, transformedBody) = hoistVarDecls body + in emitType retType ++ " " ++ name ++ "(" ++ emitParams params ++ ") {\n" ++ + -- Emit hoisted declarations first (without initial value) + concatMap (emitHoistedDecl 1) hoisted ++ + emitStmts 1 transformedBody ++ + "}" + +-- | Emit a hoisted declaration (with default initialization - Imp requires it) +emitHoistedDecl :: Int -> (Type, String) -> String +emitHoistedDecl indent (typ, name) = + replicate (indent * 2) ' ' ++ emitType typ ++ " " ++ name ++ " := 0;\n" + +-- | Hoist variable declarations from inside loops to function level +-- Returns (hoisted declarations, transformed statements) +hoistVarDecls :: [Stmt] -> ([(Type, String)], [Stmt]) +hoistVarDecls stmts = + let (hoisted, transformed) = unzip $ map hoistFromStmt stmts + in (concat hoisted, transformed) + +-- | Hoist from a single statement +hoistFromStmt :: Stmt -> ([(Type, String)], Stmt) +hoistFromStmt (While cond body) = + let (hoisted, transformedBody) = hoistFromBody body + in (hoisted, While cond transformedBody) +hoistFromStmt (If cond thenBody elseBody) = + let (hoistedThen, transformedThen) = hoistFromBody thenBody + (hoistedElse, transformedElse) = case elseBody of + Just eb -> let (h, t) = hoistFromBody eb in (h, Just t) + Nothing -> ([], Nothing) + in (hoistedThen ++ hoistedElse, If cond transformedThen transformedElse) +hoistFromStmt stmt = ([], stmt) + +-- | Hoist from body (inside a loop or if) +-- This is where we actually hoist - VarDecls become assignments +hoistFromBody :: [Stmt] -> ([(Type, String)], [Stmt]) +hoistFromBody stmts = + let (hoisted, transformed) = unzip $ map hoistAndTransform stmts + in (concat hoisted, concat transformed) + +-- | Hoist a statement and transform VarDecl to Assign +hoistAndTransform :: Stmt -> ([(Type, String)], [Stmt]) +hoistAndTransform (VarDecl typ name maybeExpr) = + -- Hoist the declaration, keep assignment in place + case maybeExpr of + Just expr -> ([(typ, name)], [Assign name expr]) + Nothing -> ([(typ, name)], [Assign name (Lit 0)]) +hoistAndTransform (While cond body) = + let (hoisted, transformedBody) = hoistFromBody body + in (hoisted, [While cond transformedBody]) +hoistAndTransform (If cond thenBody elseBody) = + let (hoistedThen, transformedThen) = hoistFromBody thenBody + (hoistedElse, transformedElse) = case elseBody of + Just eb -> let (h, t) = hoistFromBody eb in (h, Just t) + Nothing -> ([], Nothing) + in (hoistedThen ++ hoistedElse, [If cond transformedThen transformedElse]) +hoistAndTransform stmt = ([], [stmt]) + +-- | Emit type +emitType :: Type -> String +emitType TInt = "int" +emitType TVoid = "void" + +-- | Emit parameters +emitParams :: [(Type, String)] -> String +emitParams = intercalate ", " . map (\(t, n) -> emitType t ++ " " ++ n) + +-- | Emit statements with indentation +emitStmts :: Int -> [Stmt] -> String +emitStmts indent stmts = + concatMap (emitStmt indent) (init' stmts) ++ + emitStmtLast indent (last' stmts) + where + -- All statements except last get semicolon + init' [] = [] + init' xs = init xs + -- Last statement has no trailing semicolon (Imp uses ; as separator) + last' [] = Nothing + last' xs = Just (last xs) + +-- | Emit a statement (not the last one - includes semicolon separator) +emitStmt :: Int -> Stmt -> String +emitStmt indent stmt = emitStmtCore indent stmt ++ ";\n" + +-- | Emit the last statement (no semicolon) +emitStmtLast :: Int -> Maybe Stmt -> String +emitStmtLast _ Nothing = "" +emitStmtLast indent (Just stmt) = emitStmtCore indent stmt ++ "\n" + +-- | Emit statement core (without semicolon) +emitStmtCore :: Int -> Stmt -> String +emitStmtCore indent stmt = + let ind = replicate (indent * 2) ' ' + in case stmt of + VarDecl typ name Nothing -> + ind ++ emitType typ ++ " " ++ name ++ " := 0" -- Imp needs initialization + VarDecl typ name (Just expr) -> + ind ++ emitType typ ++ " " ++ name ++ " := " ++ emitExpr expr + Assign name expr -> + ind ++ name ++ " := " ++ emitExpr expr + While cond body -> + ind ++ "while (" ++ emitExpr cond ++ ") do {\n" ++ + emitStmts (indent + 1) body ++ + ind ++ "}" + If cond thenBody Nothing -> + ind ++ "if " ++ emitExpr cond ++ " then {\n" ++ + emitStmts (indent + 1) thenBody ++ + ind ++ "} else { Void }" + If cond thenBody (Just elseBody) -> + ind ++ "if " ++ emitExpr cond ++ " then {\n" ++ + emitStmts (indent + 1) thenBody ++ + ind ++ "} else {\n" ++ + emitStmts (indent + 1) elseBody ++ + ind ++ "}" + Return Nothing -> + ind ++ "Void" + Return (Just expr) -> + ind ++ emitExpr expr + ExprStmt expr -> + ind ++ emitExpr expr + +-- | Emit expression +emitExpr :: Expr -> String +emitExpr (Var name) = name +emitExpr (Lit n) = show n +emitExpr (BinOp op e1 e2) = + "(" ++ emitExpr e1 ++ " " ++ emitBinOp op ++ " " ++ emitExpr e2 ++ ")" +emitExpr (UnaryOp op e) = emitUnaryOp op ++ emitExpr e +emitExpr (Call name args) = + name ++ "(" ++ intercalate ", " (map emitExpr args) ++ ")" + +-- | Emit binary operator +emitBinOp :: BinOp -> String +emitBinOp Add = "+" +emitBinOp Sub = "-" +emitBinOp Mul = "*" +emitBinOp Div = "/" +emitBinOp Mod = "%" +emitBinOp Lt = "<" +emitBinOp Le = "<=" +emitBinOp Gt = ">" +emitBinOp Ge = ">=" +emitBinOp Eq = "=" -- Imp uses = for equality in expressions +emitBinOp Ne = "<>" -- Imp uses <> for not equal +emitBinOp And = "&&" +emitBinOp Or = "||" + +-- | Emit unary operator +emitUnaryOp :: UnaryOp -> String +emitUnaryOp Neg = "-" +emitUnaryOp Not = "!" + + + diff --git a/loopinv/Lexer.hs b/loopinv/Lexer.hs new file mode 100644 index 0000000..f06f0ac --- /dev/null +++ b/loopinv/Lexer.hs @@ -0,0 +1,85 @@ +-- | Simple lexer for C subset +module Lexer (Token(..), tokenize) where + +import Data.Char (isAlpha, isAlphaNum, isDigit, isSpace) + +-- | Tokens +data Token + = TkInt | TkVoid -- types + | TkWhile | TkIf | TkElse | TkReturn -- keywords + | TkIdent String -- identifier + | TkNum Int -- number + | TkPlus | TkMinus | TkStar | TkSlash | TkPercent -- arithmetic + | TkLt | TkLe | TkGt | TkGe | TkEqEq | TkNe -- comparison + | TkAnd | TkOr | TkNot -- logical + | TkAssign -- = + | TkLParen | TkRParen -- ( ) + | TkLBrace | TkRBrace -- { } + | TkSemi | TkComma -- ; , + | TkEOF + deriving (Show, Eq) + +-- | Tokenize a string +tokenize :: String -> [Token] +tokenize [] = [TkEOF] +tokenize s@(c:cs) + | isSpace c = tokenize cs + -- Skip single-line comments + | take 2 s == "//" = tokenize (dropWhile (/= '\n') s) + -- Skip multi-line comments + | take 2 s == "/*" = tokenize (skipBlockComment (drop 2 s)) + -- Two-character operators + | take 2 s == "<=" = TkLe : tokenize (drop 2 s) + | take 2 s == ">=" = TkGe : tokenize (drop 2 s) + | take 2 s == "==" = TkEqEq : tokenize (drop 2 s) + | take 2 s == "!=" = TkNe : tokenize (drop 2 s) + | take 2 s == "&&" = TkAnd : tokenize (drop 2 s) + | take 2 s == "||" = TkOr : tokenize (drop 2 s) + -- Single-character operators + | c == '+' = TkPlus : tokenize cs + | c == '-' = TkMinus : tokenize cs + | c == '*' = TkStar : tokenize cs + | c == '/' = TkSlash : tokenize cs + | c == '%' = TkPercent : tokenize cs + | c == '<' = TkLt : tokenize cs + | c == '>' = TkGt : tokenize cs + | c == '=' = TkAssign : tokenize cs + | c == '!' = TkNot : tokenize cs + | c == '(' = TkLParen : tokenize cs + | c == ')' = TkRParen : tokenize cs + | c == '{' = TkLBrace : tokenize cs + | c == '}' = TkRBrace : tokenize cs + | c == ';' = TkSemi : tokenize cs + | c == ',' = TkComma : tokenize cs + -- Numbers + | isDigit c = let (num, rest) = span isDigit s + in TkNum (read num) : tokenize rest + -- Identifiers and keywords + | isAlpha c || c == '_' = + let (ident, rest) = span isIdentChar s + in keywordOrIdent ident : tokenize rest + | otherwise = error $ "Unexpected character: " ++ [c] + +-- | Check if character can be part of identifier +isIdentChar :: Char -> Bool +isIdentChar c = isAlphaNum c || c == '_' + +-- | Convert identifier to keyword or keep as identifier +keywordOrIdent :: String -> Token +keywordOrIdent "int" = TkInt +keywordOrIdent "void" = TkVoid +keywordOrIdent "while" = TkWhile +keywordOrIdent "if" = TkIf +keywordOrIdent "else" = TkElse +keywordOrIdent "return" = TkReturn +keywordOrIdent s = TkIdent s + +-- | Skip block comment (find closing */) +skipBlockComment :: String -> String +skipBlockComment [] = [] +skipBlockComment s + | take 2 s == "*/" = drop 2 s + | otherwise = skipBlockComment (tail s) + + + diff --git a/loopinv/Main.hs b/loopinv/Main.hs new file mode 100644 index 0000000..9b23c28 --- /dev/null +++ b/loopinv/Main.hs @@ -0,0 +1,757 @@ +-- | LoopInv: Build constraint abstractions and compute loop invariants via LFP +-- +-- This tool: +-- 1. Converts C code to Imp syntax (constraint abstraction) +-- 2. Runs the imp tool which uses fixCalc to compute LFP +-- 3. Extracts disjuncts and outputs in prime notation +-- 4. Verifies if the LFP is exact (EX) or over-approximate (OX) +-- +module Main where + +import System.Environment (getArgs) +import System.Process (readProcessWithExitCode) +import System.Exit (ExitCode(..)) +import System.FilePath (takeBaseName, takeDirectory, ()) +import Data.List (isPrefixOf, isInfixOf, stripPrefix, partition) +import Data.Maybe (mapMaybe) +import Data.Char (isSpace) + +import Lexer (tokenize) +import Parser (parse) +import AST (Program(..), Func(..), Stmt(..), Expr(..), BinOp(..), UnaryOp(..)) +import ImpEmit (emitImp) + +main :: IO () +main = do + args <- getArgs + case args of + [inputFile] -> processFile inputFile + _ -> showHelp + +showHelp :: IO () +showHelp = do + putStrLn "LoopInv - Loop Invariant Generator using fixCalc" + putStrLn "" + putStrLn "Usage: loopinv " + putStrLn "" + putStrLn "This tool:" + putStrLn " 1. Converts C code to Imp (constraint abstraction)" + putStrLn " 2. Runs imp tool to compute loop invariants via LFP (fixCalc)" + putStrLn " 3. Displays the computed result" + +processFile :: FilePath -> IO () +processFile inputFile = do + putStrLn "================================================================" + putStrLn " LoopInv - Constraint Abstraction & LFP Computation" + putStrLn "================================================================" + putStrLn "" + + -- Step 1: Read and parse C code + putStrLn $ "Input: " ++ inputFile + putStrLn "" + cCode <- readFile inputFile + + putStrLn "=== Original C Code ===" + putStrLn cCode + + -- Step 2: Convert to Imp (constraint abstraction) + putStrLn "=== Converting to Imp (Constraint Abstraction) ===" + let tokens = tokenize cCode + let ast = parse tokens + let impCode = emitImp ast + + let impFile = takeDirectory inputFile takeBaseName inputFile ++ ".imp" + writeFile impFile impCode + putStrLn $ "Generated: " ++ impFile + putStrLn "" + putStrLn impCode + + -- Step 3: Run imp tool (which calls fixCalc for LFP) + putStrLn "=== Running imp tool (LFP computation via fixCalc) ===" + putStrLn "" + + let impBin = "./imp" + (exitCode, stdout, stderr) <- readProcessWithExitCode impBin [impFile, "+infer"] "" + + case exitCode of + ExitSuccess -> do + putStrLn stdout + + -- Read and parse the LFP result + imptContent <- readFile "a.impt" + + -- Extract variable mapping and LFP formula + let varMapping = extractVarMapping imptContent + let lfpFormula = extractLFP imptContent + + putStrLn "=== LFP Analysis ===" + putStrLn "" + putStrLn $ "Variable mapping: " ++ show varMapping + putStrLn "" + putStrLn $ "Raw LFP: " ++ lfpFormula + putStrLn "" + + -- Convert to prime notation + let primeFormula = toPrimeNotation varMapping lfpFormula + putStrLn $ "Prime notation: " ++ primeFormula + putStrLn "" + + -- Split into disjuncts + let disjuncts = splitDisjuncts primeFormula + putStrLn $ "=== Disjuncts (" ++ show (length disjuncts) ++ " cases) ===" + putStrLn "" + mapM_ (\(i, d) -> putStrLn $ "Case " ++ show i ++ ": " ++ d) (zip [1..] disjuncts) + putStrLn "" + + -- Convert disjuncts to case format + let cases = map disjunctToCase disjuncts + putStrLn "=== Case Format (pre ens post) ===" + putStrLn "" + putStrLn "case {" + mapM_ (\c -> putStrLn $ " " ++ formatCaseClause c) cases + putStrLn "}" + putStrLn "" + + -- Step 4: Verify EX/OX (exactness check) + putStrLn "=== Exactness Verification (EX/OX) ===" + putStrLn "" + + -- Find the first while loop in the AST + case findWhileLoop ast of + Just (loopCond, loopBody, loopVars) -> do + -- Generate fixcalc verification query + let fcQuery = generateExactnessQuery loopCond loopBody loopVars primeFormula varMapping + let fcFile = "exactness_check.fc" + writeFile fcFile fcQuery + putStrLn $ "Generated verification query: " ++ fcFile + putStrLn "" + putStrLn "Query:" + putStrLn fcQuery + putStrLn "" + + -- Run fixcalc + (fcExit, fcOut, fcErr) <- readProcessWithExitCode "./fixcalc" [fcFile] "" + case fcExit of + ExitSuccess -> do + putStrLn "fixcalc output:" + putStrLn fcOut + -- Parse result to determine EX/OX + let result = parseExactnessResult fcOut + putStrLn "" + putStrLn $ "=== Result: " ++ result ++ " ===" + putStrLn "" + case result of + "EX" -> putStrLn "The LFP is EXACT - it precisely captures the loop's input-output relation." + "OX" -> putStrLn "The LFP is OVER-APPROXIMATE - it may include behaviors that cannot happen." + _ -> putStrLn "Could not determine exactness." + ExitFailure _ -> do + putStrLn $ "fixcalc error: " ++ fcErr + putStrLn fcOut + Nothing -> do + putStrLn "No while loop found in AST for exactness verification." + + ExitFailure code -> do + putStrLn $ "Error: imp tool failed with code " ++ show code + putStrLn "stderr:" + putStrLn stderr + putStrLn "stdout:" + putStrLn stdout + +-- | Extract variable mapping from a.impt +-- Find the whilef function whose variables match the LFP formula +extractVarMapping :: String -> [(String, String)] +extractVarMapping content = + let ls = lines content + lfp = extractLFP content + -- Find all whilef function definition lines (have Int "whilef_" `isInfixOf` l && "Int m + [] -> case allMappings of + (m:_) -> m -- fallback to first mapping + [] -> [] + +-- | Check if a variable mapping matches the LFP formula +mappingMatchesLFP :: String -> [(String, String)] -> Bool +mappingMatchesLFP lfp mapping = + -- Check if all internal variable names appear in the LFP + all (\(internal, _) -> internal `isInfixOf` lfp) mapping + +extractMappingsFromWhileLine :: String -> [(String, String)] +extractMappingsFromWhileLine line = + -- Parse: ref Void whilef_0(ref Int x,ref Int n) + -- Extract pairs like (f_6f, x), (f_7f, n) + let -- Find content between ( and ) + afterParen = dropWhile (/= '(') line + params = takeWhile (/= ')') (drop 1 afterParen) + -- Split by comma + paramList = splitByComma params + in mapMaybe parseParam paramList + +splitByComma :: String -> [String] +splitByComma s = map trim $ go s "" + where + go [] acc = [reverse acc] + go (',':rest) acc = reverse acc : go rest "" + go (c:rest) acc = go rest (c:acc) + +parseParam :: String -> Maybe (String, String) +parseParam param = + -- Parse: ref Int x + let tokens = words param + -- Find token with and the next token is the var name + in findMapping tokens + +findMapping :: [String] -> Maybe (String, String) +findMapping [] = Nothing +findMapping [_] = Nothing +findMapping (t1:t2:rest) + | " Just (internal, t2) + Nothing -> findMapping (t2:rest) + | otherwise = findMapping (t2:rest) + +extractInternalName :: String -> Maybe String +extractInternalName s = + -- Extract f_Xf from something like "Int" + case break (== '<') s of + (_, '<':rest) -> + case break (== '>') rest of + (internal, '>':_) -> Just internal + _ -> Nothing + _ -> Nothing + +-- | Extract LFP formula from a.impt +-- Look for the where clause line that starts with ((( and contains PRMf_ +extractLFP :: String -> String +extractLFP content = + let ls = lines content + -- Find lines that start with ((( and contain PRMf_ (the actual LFP formula) + lfpLines = filter (\l -> "(((" `isPrefixOf` trim l && "PRMf_" `isInfixOf` l) ls + in case lfpLines of + (l:_) -> cleanLFP (trim l) + [] -> "" + +cleanLFP :: String -> String +cleanLFP s = + -- Remove trailing comma if present + let s' = if not (null s) && last s == ',' then init s else s + in s' + +-- | Convert internal variable names to prime notation +-- f_Xf -> X (pre-state, unprimed) +-- PRMf_Xf -> X' (post-state, primed) +toPrimeNotation :: [(String, String)] -> String -> String +toPrimeNotation mapping formula = + -- First replace PRMf_* with primed versions (do this first to avoid substring issues) + let withPrimed = foldl (\f (internal, orig) -> replaceAll ("PRM" ++ internal) (orig ++ "'") f) formula mapping + -- Then replace f_* with unprimed versions + in foldl (\f (internal, orig) -> replaceAll internal orig f) withPrimed mapping + +-- | Replace all occurrences of a substring +replaceAll :: String -> String -> String -> String +replaceAll old new str = go str + where + go [] = [] + go s@(c:cs) + | old `isPrefixOf` s = new ++ go (drop (length old) s) + | otherwise = c : go cs + +-- | Split formula into disjuncts by || +-- Handles nested parentheses correctly +splitDisjuncts :: String -> [String] +splitDisjuncts formula = + let -- Remove outermost parentheses if present + stripped = stripOuterParens (trim formula) + in map trim $ splitByOr stripped 0 "" + +stripOuterParens :: String -> String +stripOuterParens s + | null s = s + | head s == '(' && last s == ')' && isMatchingOuter s = stripOuterParens (init (tail s)) + | otherwise = s + +-- | Check if the outer parens actually match each other (not just any open/close) +isMatchingOuter :: String -> Bool +isMatchingOuter s = + let inner = init (tail s) -- remove first and last char + in checkBalanced inner 0 + +checkBalanced :: String -> Int -> Bool +checkBalanced [] depth = depth == 0 +checkBalanced ('(':rest) depth = checkBalanced rest (depth + 1) +checkBalanced (')':rest) depth + | depth > 0 = checkBalanced rest (depth - 1) + | otherwise = False -- unmatched close paren means outer parens don't match +checkBalanced (_:rest) depth = checkBalanced rest depth + +-- | Split by || at depth 0 (respecting parentheses) +splitByOr :: String -> Int -> String -> [String] +splitByOr [] _ acc = [reverse acc] +splitByOr ('(':rest) depth acc = splitByOr rest (depth + 1) ('(':acc) +splitByOr (')':rest) depth acc = splitByOr rest (depth - 1) (')':acc) +splitByOr ('|':'|':rest) 0 acc = reverse acc : splitByOr rest 0 "" +splitByOr (c:rest) depth acc = splitByOr rest depth (c:acc) + +-- | Trim whitespace from both ends +trim :: String -> String +trim = dropWhile isSpace . reverse . dropWhile isSpace . reverse + +-- ============================================================================ +-- Case Format Conversion (disjunct -> pre ens post) +-- ============================================================================ + +-- | A case clause with preconditions and postconditions +data CaseClause = CaseClause + { preConds :: [String] -- Preconditions (unprimed constraints) + , postAssigns :: [(String, String)] -- Post-assignments (var', value) + , invariants :: [(String, String)] -- Invariants (var', var) meaning unchanged + , postConstraints :: [String] -- Constraints on primed vars (not assignments) + } deriving (Show) + +-- | Convert a disjunct to a case clause +disjunctToCase :: String -> CaseClause +disjunctToCase disjunct = + let conjuncts = splitConjuncts (stripOuterParens disjunct) + -- First pass: find all equalities + equalities = mapMaybe parseEquality conjuncts + -- Find post-assignments: primed = unprimed (e.g., x' = n, x' = 0) + postAssigns' = findPostAssignments equalities + -- Find invariants: var' = var (unchanged) or derived + invariants' = findInvariants equalities postAssigns' + -- Find constraints (non-equalities) + constraints = filter (not . isEquality) conjuncts + -- Also get equalities that are constraints (primed on both sides, etc.) + constraintEqualities = filter (isConstraintEquality postAssigns') equalities + -- Substitute post-values into constraints + allConstraints = constraints ++ map equalityToString constraintEqualities + substituted = map (substituteAll postAssigns') allConstraints + -- Separate into preconditions (unprimed) and post-constraints (still have primed) + (preConds', postConstraints) = partition (not . containsPrimed) substituted + -- Filter out trivial preconditions (like "true" or empty) + validPreConds = filter isValidPrecond preConds' + -- Post-constraints remain as constraints on primed variables (use different filter) + validPostConstraints = filter isValidPostConstraint postConstraints + in CaseClause validPreConds postAssigns' invariants' validPostConstraints + +-- | Split a disjunct into conjuncts by && (recursively flattens) +splitConjuncts :: String -> [String] +splitConjuncts s = flattenConjuncts [stripOuterParens s] + +-- | Recursively flatten conjuncts until no more && at top level +flattenConjuncts :: [String] -> [String] +flattenConjuncts parts = + let split1 = concatMap splitOneLevel parts + cleaned = map (trim . stripOuterParens) split1 + in if cleaned == parts then parts else flattenConjuncts cleaned + +-- | Split by && at depth 0 (one level only) +splitOneLevel :: String -> [String] +splitOneLevel s = splitByAnd (stripOuterParens s) 0 "" + +splitByAnd :: String -> Int -> String -> [String] +splitByAnd [] _ acc = [reverse acc] +splitByAnd ('(':rest) depth acc = splitByAnd rest (depth + 1) ('(':acc) +splitByAnd (')':rest) depth acc = splitByAnd rest (depth - 1) (')':acc) +splitByAnd ('&':'&':rest) 0 acc = reverse acc : splitByAnd rest 0 "" +splitByAnd (c:rest) depth acc = splitByAnd rest depth (c:acc) + +-- | Parse an equality like "x' = n" or "0 = x'" +parseEquality :: String -> Maybe (String, String) +parseEquality s = + let s' = trim s + in case splitByEquals s' of + [lhs, rhs] -> Just (trim lhs, trim rhs) + _ -> Nothing + +-- | Split by = (but not >= or <=) +splitByEquals :: String -> [String] +splitByEquals s = go s "" False + where + go [] acc _ = [reverse acc] + go ('>':'=':rest) acc _ = go rest ('=':'>':acc) True + go ('<':'=':rest) acc _ = go rest ('=':'<':acc) True + go ('=':rest) acc False = reverse acc : go rest "" False + go ('=':rest) acc True = go rest ('=':acc) False -- reset flag after consuming + go (c:rest) acc _ = go rest (c:acc) False + +-- | Check if a string is an equality (contains = but not >= or <=) +isEquality :: String -> Bool +isEquality s = + let s' = removeComparisonOps s + in '=' `elem` s' && not (">=" `isInfixOf` s) && not ("<=" `isInfixOf` s) + +removeComparisonOps :: String -> String +removeComparisonOps [] = [] +removeComparisonOps ('>':'=':rest) = removeComparisonOps rest +removeComparisonOps ('<':'=':rest) = removeComparisonOps rest +removeComparisonOps (c:rest) = c : removeComparisonOps rest + +-- | Check if a variable is primed (ends with ') +isPrimed :: String -> Bool +isPrimed s = not (null s) && last s == '\'' + +-- | Get the unprimed version of a variable +unprime :: String -> String +unprime s = if isPrimed s then init s else s + +-- | Check if an expression contains any primed variables +containsPrimed :: String -> Bool +containsPrimed s = '\'' `elem` s + +-- | Find post-assignments: equalities where primed var = unprimed expr +findPostAssignments :: [(String, String)] -> [(String, String)] +findPostAssignments eqs = concatMap checkEquality eqs + where + checkEquality (lhs, rhs) + -- x' = expr (expr is unprimed) + | isPrimedVar lhs && not (containsPrimed rhs) = [(lhs, rhs)] + -- expr = x' (expr is unprimed) + | isPrimedVar rhs && not (containsPrimed lhs) = [(rhs, lhs)] + | otherwise = [] + + isPrimedVar s = isPrimed s && isSimpleVar (unprime s) + isSimpleVar s = all (\c -> c `elem` (['a'..'z'] ++ ['A'..'Z'] ++ ['0'..'9'] ++ "_")) s + +-- | Find invariants: var' = var (unchanged variables) +-- Also derive from chains like x' = n' and x' = n -> n' = n +-- Excludes variables already in post-assignments +findInvariants :: [(String, String)] -> [(String, String)] -> [(String, String)] +findInvariants eqs postAssigns' = + let -- Direct invariants: x' = x or x = x' + direct = concatMap checkDirect eqs + -- Derived: if x' = n' and x' = n, then n' = n + derived = deriveInvariants eqs postAssigns' + -- Normalize all to (primed, unprimed) form + normalized = map normalizeInv (direct ++ derived) + allInvs = nubBy sameInvariant normalized + -- Filter out invariants for variables already in post-assignments + postVars = map (unprime . fst) postAssigns' + in filter (\(v, _) -> unprime v `notElem` postVars) allInvs + where + checkDirect (lhs, rhs) + | isPrimed lhs && unprime lhs == rhs = [(lhs, rhs)] + | isPrimed rhs && unprime rhs == lhs = [(rhs, lhs)] + | otherwise = [] + + -- Normalize invariant to (primed, unprimed) form + normalizeInv (a, b) + | isPrimed a && not (isPrimed b) = (a, b) + | isPrimed b && not (isPrimed a) = (b, a) + | otherwise = (a, b) -- both primed or both unprimed, keep as is + + sameInvariant (a, _) (b, _) = unprime a == unprime b + +-- | Derive invariants from equality chains +deriveInvariants :: [(String, String)] -> [(String, String)] -> [(String, String)] +deriveInvariants eqs postAssigns' = + -- For each primed = primed equality, check if we can derive an invariant + concatMap derive eqs + where + derive (lhs, rhs) + | isPrimed lhs && isPrimed rhs = + -- x' = n', check if x' = someVal in postAssigns + case lookup lhs postAssigns' of + Just val -> [(rhs, val)] -- n' = val + Nothing -> case lookup rhs postAssigns' of + Just val -> [(lhs, val)] + Nothing -> [] + | otherwise = [] + +-- | Check if an equality is a constraint (not a post-assignment or invariant or derived) +isConstraintEquality :: [(String, String)] -> (String, String) -> Bool +isConstraintEquality postAssigns' (lhs, rhs) = + -- It's a constraint if it involves primed vars but isn't a post-assignment or invariant + (containsPrimed lhs || containsPrimed rhs) && + not (isPostAssignment lhs rhs) && + not (isInvariant lhs rhs) && + not (isDerivedInvariant lhs rhs) + where + isPostAssignment l r = + (isPrimed l && not (containsPrimed r)) || + (isPrimed r && not (containsPrimed l)) + isInvariant l r = + (isPrimed l && unprime l == r) || + (isPrimed r && unprime r == l) + -- Check if this equality will be derived as an invariant (both sides have same base) + isDerivedInvariant l r = + isPrimed l && isPrimed r && + (any (\(pv, _) -> pv == l || pv == r) postAssigns') + +equalityToString :: (String, String) -> String +equalityToString (lhs, rhs) = lhs ++ " = " ++ rhs + +-- | Substitute all post-assignments into an expression +substituteAll :: [(String, String)] -> String -> String +substituteAll postAssigns' expr = + foldl (\e (var, val) -> replaceAll var val e) expr postAssigns' + +-- | Check if a precondition is valid (not trivial) +isValidPrecond :: String -> Bool +isValidPrecond s = + let s' = trim s + in not (null s') && + s' /= "true" && + s' /= "0 = 0" && + not (containsPrimed s') -- should not have primed vars after substitution + +-- | Check if a post-constraint is valid (not trivial, must have primed vars, not an invariant) +isValidPostConstraint :: String -> Bool +isValidPostConstraint s = + let s' = trim s + in not (null s') && + s' /= "true" && + s' /= "0 = 0" && + containsPrimed s' && -- must have primed vars + not (isInvariantString s') -- not just "x = x'" or "x' = x" + +-- | Check if a string represents an invariant (var = var' or var' = var) +isInvariantString :: String -> Bool +isInvariantString s = + case splitByEquals s of + [lhs, rhs] -> + let l = trim lhs + r = trim rhs + in (isPrimed l && unprime l == r) || (isPrimed r && unprime r == l) + _ -> False + +-- | Format a case clause as "pre ens post" +formatCaseClause :: CaseClause -> String +formatCaseClause (CaseClause pres posts invs postConstrs) = + let preStr = if null pres then "true" else intercalate " && " pres + -- Combine post-assignments and invariants, removing duplicates + allAssigns = nubBy sameAssign (posts ++ invs) + assignStrs = map formatAssign allAssigns + -- Add post-constraints (inequalities on primed vars) + allPostStrs = assignStrs ++ postConstrs + postStr = if null allPostStrs + then "true" + else intercalate " && " allPostStrs + in preStr ++ " ens " ++ postStr + where + formatAssign (var, val) = var ++ " = " ++ val + sameAssign (a, _) (b, _) = unprime a == unprime b + +-- | Remove duplicates by a predicate +nubBy :: (a -> a -> Bool) -> [a] -> [a] +nubBy _ [] = [] +nubBy eq (x:xs) = x : nubBy eq (filter (not . eq x) xs) + +-- | Intercalate (join with separator) +intercalate :: String -> [String] -> String +intercalate _ [] = "" +intercalate _ [x] = x +intercalate sep (x:xs) = x ++ sep ++ intercalate sep xs + +-- ============================================================================ +-- Exactness Verification (EX/OX) +-- ============================================================================ + +-- | Find the first while loop in the AST +-- Returns (condition, body, variables used) +findWhileLoop :: Program -> Maybe (Expr, [Stmt], [String]) +findWhileLoop (Program funcs) = + case concatMap findInFunc funcs of + (w:_) -> Just w + [] -> Nothing + where + findInFunc (Func _ _ params body) = + let paramVars = map snd params + in findInStmts paramVars body + + findInStmts vars stmts = concatMap (findInStmt vars) stmts + + findInStmt vars (While cond body) = + let bodyVars = collectVarsFromStmts body + allVars = vars ++ bodyVars + in [(cond, body, allVars)] + findInStmt vars (If _ thenB maybeElse) = + findInStmts vars thenB ++ maybe [] (findInStmts vars) maybeElse + findInStmt _ _ = [] + + collectVarsFromStmts stmts = concatMap collectVarsFromStmt stmts + collectVarsFromStmt (VarDecl _ name _) = [name] + collectVarsFromStmt (Assign name _) = [name] + collectVarsFromStmt (While _ body) = collectVarsFromStmts body + collectVarsFromStmt (If _ thenB maybeElse) = + collectVarsFromStmts thenB ++ maybe [] collectVarsFromStmts maybeElse + collectVarsFromStmt _ = [] + +-- | Generate fixcalc query to verify exactness +-- F = base ∪ (F ∘ step) => EX +-- F ⊃ base ∪ (F ∘ step) => OX +generateExactnessQuery :: Expr -> [Stmt] -> [String] -> String -> [(String, String)] -> String +generateExactnessQuery loopCond loopBody allVars lfpFormula varMapping = + let -- Get the variables from the mapping (these are the actual loop variables) + vars = map snd varMapping + -- fixcalc uses P prefix for primed vars, _t suffix for temp vars + primedVars = map ("P" ++) vars + tempVars = map (++ "_t") vars + + -- Format variable lists for fixcalc + varList = intercalate "," vars + primedList = intercalate "," primedVars + tempList = intercalate "," tempVars + + -- Convert LFP to fixcalc format (replace ' with P prefix) + lfpFixcalc = convertToFixcalcFormat lfpFormula vars + + -- Generate condition expression + condExpr = exprToFixcalc loopCond + negCondExpr = "!(" ++ condExpr ++ ")" + + -- Generate step relation from loop body + stepExpr = generateStepExpr loopBody vars tempVars + + -- Build the identity assignments for base case (Px = x) + identityAssigns = intercalate " && " [("P" ++ v) ++ " = " ++ v | v <- vars] + + -- Build combined condition inline (since fixcalc doesn't have union) + baseCondition = "(" ++ negCondExpr ++ " && " ++ identityAssigns ++ ")" + stepCondition = "(" ++ condExpr ++ " && " ++ stepExpr ++ ")" + -- Composition: exists temp vars such that step and F hold + compositionCondition = "exists(" ++ tempList ++ ": " ++ stepCondition ++ " && " ++ lfpFixcalc ++ ")" + -- Replace vars with temp vars in LFP for composition + lfpWithTemp = convertVarsToTemp lfpFormula vars tempVars + compositionCondition2 = "exists(" ++ tempList ++ ": " ++ stepCondition ++ " && " ++ lfpWithTemp ++ ")" + + -- Build the query + in unlines + [ "# Exactness verification for loop LFP" + , "# Variables: " ++ varList + , "" + , "# Computed LFP from imp tool" + , "F := {[" ++ varList ++ "," ++ primedList ++ "]: " ++ lfpFixcalc ++ "};" + , "" + , "# Combined: base || (exists temp. step && F(temp, post))" + , "# Base: condition false, vars unchanged" + , "# Step+Compose: condition true, one iteration, then F" + , "combined := {[" ++ varList ++ "," ++ primedList ++ "]: " + , " " ++ baseCondition + , " || " ++ compositionCondition2 + , "};" + , "" + , "# Exactness check: F = combined iff both subset checks pass" + , "F subset combined;" + , "combined subset F;" + ] + +-- | Convert prime notation to fixcalc format +-- x' -> Px, n' -> Pn, etc. +convertToFixcalcFormat :: String -> [String] -> String +convertToFixcalcFormat formula vars = + let -- Replace x' with Px for each variable + withPrimed = foldl (\f v -> replaceAll (v ++ "'") ("P" ++ v) f) formula vars + -- Replace == with = + cleaned = replaceAll "==" "=" withPrimed + in cleaned + +-- | Convert vars to temp vars for composition +-- In F(temp, post), the unprimed vars become temp vars +-- x -> x_t, but Px stays as Px +convertVarsToTemp :: String -> [String] -> [String] -> String +convertVarsToTemp formula vars tempVars = + let -- First convert to fixcalc format (x' -> Px) + fixcalc = convertToFixcalcFormat formula vars + -- Then replace unprimed vars with temp vars + -- Need to be careful not to replace inside "Px" + -- Do this by first marking primed, then replacing, then unmarking + marked = foldl (\f v -> replaceAll ("P" ++ v) ("__PRIMED_" ++ v ++ "__") f) fixcalc vars + withTemp = foldl (\f (v, tv) -> replaceWholeWord v tv f) marked (zip vars tempVars) + unmarked = foldl (\f v -> replaceAll ("__PRIMED_" ++ v ++ "__") ("P" ++ v) f) withTemp vars + in unmarked + +-- | Replace whole word only (not as part of another word) +replaceWholeWord :: String -> String -> String -> String +replaceWholeWord old new str = go str + where + go [] = [] + go s@(c:cs) + | old `isPrefixOf` s && not (isVarChar (safeLast (take (length str - length s) str))) && not (isVarChar (safeHead (drop (length old) s))) = + new ++ go (drop (length old) s) + | otherwise = c : go cs + + isVarChar c = c `elem` (['a'..'z'] ++ ['A'..'Z'] ++ ['0'..'9'] ++ "_") + safeLast [] = ' ' + safeLast xs = last xs + safeHead [] = ' ' + safeHead (x:_) = x + +-- | Convert AST expression to fixcalc format +exprToFixcalc :: Expr -> String +exprToFixcalc (Var v) = v +exprToFixcalc (Lit n) = show n +exprToFixcalc (BinOp op e1 e2) = + let s1 = exprToFixcalc e1 + s2 = exprToFixcalc e2 + in case op of + Add -> "(" ++ s1 ++ " + " ++ s2 ++ ")" + Sub -> "(" ++ s1 ++ " - " ++ s2 ++ ")" + Mul -> "(" ++ s1 ++ " * " ++ s2 ++ ")" + Div -> "(" ++ s1 ++ " / " ++ s2 ++ ")" + Mod -> "(" ++ s1 ++ " % " ++ s2 ++ ")" + Lt -> "(" ++ s1 ++ " < " ++ s2 ++ ")" + Le -> "(" ++ s1 ++ " <= " ++ s2 ++ ")" + Gt -> "(" ++ s1 ++ " > " ++ s2 ++ ")" + Ge -> "(" ++ s1 ++ " >= " ++ s2 ++ ")" + Eq -> "(" ++ s1 ++ " = " ++ s2 ++ ")" + Ne -> "(" ++ s1 ++ " != " ++ s2 ++ ")" + And -> "(" ++ s1 ++ " && " ++ s2 ++ ")" + Or -> "(" ++ s1 ++ " || " ++ s2 ++ ")" +exprToFixcalc (UnaryOp op e) = + let s = exprToFixcalc e + in case op of + Neg -> "(-" ++ s ++ ")" + Not -> "(!(" ++ s ++ "))" +exprToFixcalc (Call _ _) = "true" -- Function calls not supported, assume true + +-- | Generate step expression from loop body (one iteration) +-- vars: original variable names (x, n) +-- tempVars: temp variable names (x_t, n_t) +generateStepExpr :: [Stmt] -> [String] -> [String] -> String +generateStepExpr stmts vars tempVars = + let -- Find all assignments in the body + assigns = collectAssigns stmts + -- Create var -> tempVar mapping + varToTemp = zip vars tempVars + -- For each variable, determine its new value + -- Variables not assigned keep their value + stepParts = map (varStep assigns varToTemp) (zip vars tempVars) + in intercalate " && " stepParts + where + varStep assigns varToTemp (v, tv) = + case lookup v assigns of + Just expr -> tv ++ " = " ++ exprToFixcalc expr + Nothing -> tv ++ " = " ++ v -- unchanged + + collectAssigns :: [Stmt] -> [(String, Expr)] + collectAssigns = concatMap collectFromStmt + + collectFromStmt (Assign v e) = [(v, e)] + collectFromStmt (VarDecl _ v (Just e)) = [(v, e)] + collectFromStmt (While _ body) = collectAssigns body -- nested loops + collectFromStmt (If _ thenB maybeElse) = + collectAssigns thenB ++ maybe [] collectAssigns maybeElse + collectFromStmt _ = [] + +-- | Parse fixcalc output to determine EX or OX +parseExactnessResult :: String -> String +parseExactnessResult output = + let ls = lines output + -- Look for the two subset check results + -- fixcalc outputs "True" or "False" for subset checks + results = filter isResultLine ls + -- We need both "True" for EX + in if length results >= 2 + then let r1 = "true" `isInfixOf` (map toLower (results !! 0)) + r2 = "true" `isInfixOf` (map toLower (results !! 1)) + in if r1 && r2 then "EX" else "OX" + else "UNKNOWN" + where + isResultLine l = "true" `isInfixOf` map toLower l || "false" `isInfixOf` map toLower l + toLower c = if c >= 'A' && c <= 'Z' then toEnum (fromEnum c + 32) else c diff --git a/loopinv/Parser.hs b/loopinv/Parser.hs new file mode 100644 index 0000000..5919612 --- /dev/null +++ b/loopinv/Parser.hs @@ -0,0 +1,228 @@ +-- | Simple recursive descent parser for C subset +module Parser (parse) where + +import AST +import Lexer + +-- | Parse tokens into a program +parse :: [Token] -> Program +parse toks = Program (parseFuncs toks) + +-- | Parse list of functions +parseFuncs :: [Token] -> [Func] +parseFuncs [TkEOF] = [] +parseFuncs toks = + let (func, rest) = parseFunc toks + in func : parseFuncs rest + +-- | Parse a single function +parseFunc :: [Token] -> (Func, [Token]) +parseFunc toks = + let (retType, toks1) = parseType toks + (name, toks2) = parseIdent toks1 + toks3 = expect TkLParen toks2 + (params, toks4) = parseParams toks3 + toks5 = expect TkRParen toks4 + toks6 = expect TkLBrace toks5 + (body, toks7) = parseStmts toks6 + toks8 = expect TkRBrace toks7 + in (Func retType name params body, toks8) + +-- | Parse type +parseType :: [Token] -> (Type, [Token]) +parseType (TkInt : rest) = (TInt, rest) +parseType (TkVoid : rest) = (TVoid, rest) +parseType toks = error $ "Expected type, got: " ++ show (take 3 toks) + +-- | Parse identifier +parseIdent :: [Token] -> (String, [Token]) +parseIdent (TkIdent s : rest) = (s, rest) +parseIdent toks = error $ "Expected identifier, got: " ++ show (take 3 toks) + +-- | Parse parameters +parseParams :: [Token] -> ([(Type, String)], [Token]) +parseParams (TkRParen : _) = ([], TkRParen : drop 0 []) -- empty params, put back RParen +parseParams toks = parseParams' toks + where + parseParams' ts = + let (typ, ts1) = parseType ts + (name, ts2) = parseIdent ts1 + in case ts2 of + (TkComma : ts3) -> + let (rest, ts4) = parseParams' ts3 + in ((typ, name) : rest, ts4) + _ -> ([(typ, name)], ts2) + +-- | Parse list of statements until } +parseStmts :: [Token] -> ([Stmt], [Token]) +parseStmts (TkRBrace : rest) = ([], TkRBrace : rest) -- put back RBrace +parseStmts toks = + let (stmt, rest) = parseStmt toks + (stmts, rest') = parseStmts rest + in (stmt : stmts, rest') + +-- | Parse a single statement +parseStmt :: [Token] -> (Stmt, [Token]) +-- Variable declaration: int x = expr; or int x; +parseStmt (TkInt : TkIdent name : TkAssign : rest) = + let (expr, rest') = parseExpr rest + rest'' = expect TkSemi rest' + in (VarDecl TInt name (Just expr), rest'') +parseStmt (TkInt : TkIdent name : TkSemi : rest) = + (VarDecl TInt name Nothing, rest) +-- While loop +parseStmt (TkWhile : TkLParen : rest) = + let (cond, rest') = parseExpr rest + rest'' = expect TkRParen rest' + rest''' = expect TkLBrace rest'' + (body, rest4) = parseStmts rest''' + rest5 = expect TkRBrace rest4 + in (While cond body, rest5) +-- If statement +parseStmt (TkIf : TkLParen : rest) = + let (cond, rest') = parseExpr rest + rest'' = expect TkRParen rest' + rest''' = expect TkLBrace rest'' + (thenBody, rest4) = parseStmts rest''' + rest5 = expect TkRBrace rest4 + in case rest5 of + (TkElse : TkLBrace : rest6) -> + let (elseBody, rest7) = parseStmts rest6 + rest8 = expect TkRBrace rest7 + in (If cond thenBody (Just elseBody), rest8) + _ -> (If cond thenBody Nothing, rest5) +-- Return statement +parseStmt (TkReturn : TkSemi : rest) = + (Return Nothing, rest) +parseStmt (TkReturn : rest) = + let (expr, rest') = parseExpr rest + rest'' = expect TkSemi rest' + in (Return (Just expr), rest'') +-- Assignment: x = expr; +parseStmt (TkIdent name : TkAssign : rest) = + let (expr, rest') = parseExpr rest + rest'' = expect TkSemi rest' + in (Assign name expr, rest'') +-- Expression statement +parseStmt toks = + let (expr, rest) = parseExpr toks + rest' = expect TkSemi rest + in (ExprStmt expr, rest') + +-- | Parse expression (with precedence) +parseExpr :: [Token] -> (Expr, [Token]) +parseExpr = parseOr + +-- | Parse || (lowest precedence) +parseOr :: [Token] -> (Expr, [Token]) +parseOr toks = + let (left, rest) = parseAnd toks + in parseOr' left rest + where + parseOr' left (TkOr : rest) = + let (right, rest') = parseAnd rest + in parseOr' (BinOp Or left right) rest' + parseOr' left rest = (left, rest) + +-- | Parse && +parseAnd :: [Token] -> (Expr, [Token]) +parseAnd toks = + let (left, rest) = parseComparison toks + in parseAnd' left rest + where + parseAnd' left (TkAnd : rest) = + let (right, rest') = parseComparison rest + in parseAnd' (BinOp And left right) rest' + parseAnd' left rest = (left, rest) + +-- | Parse comparison operators +parseComparison :: [Token] -> (Expr, [Token]) +parseComparison toks = + let (left, rest) = parseAddSub toks + in case rest of + (TkLt : rest') -> let (right, rest'') = parseAddSub rest' in (BinOp Lt left right, rest'') + (TkLe : rest') -> let (right, rest'') = parseAddSub rest' in (BinOp Le left right, rest'') + (TkGt : rest') -> let (right, rest'') = parseAddSub rest' in (BinOp Gt left right, rest'') + (TkGe : rest') -> let (right, rest'') = parseAddSub rest' in (BinOp Ge left right, rest'') + (TkEqEq : rest') -> let (right, rest'') = parseAddSub rest' in (BinOp Eq left right, rest'') + (TkNe : rest') -> let (right, rest'') = parseAddSub rest' in (BinOp Ne left right, rest'') + _ -> (left, rest) + +-- | Parse + and - +parseAddSub :: [Token] -> (Expr, [Token]) +parseAddSub toks = + let (left, rest) = parseMulDiv toks + in parseAddSub' left rest + where + parseAddSub' left (TkPlus : rest) = + let (right, rest') = parseMulDiv rest + in parseAddSub' (BinOp Add left right) rest' + parseAddSub' left (TkMinus : rest) = + let (right, rest') = parseMulDiv rest + in parseAddSub' (BinOp Sub left right) rest' + parseAddSub' left rest = (left, rest) + +-- | Parse * / % +parseMulDiv :: [Token] -> (Expr, [Token]) +parseMulDiv toks = + let (left, rest) = parseUnary toks + in parseMulDiv' left rest + where + parseMulDiv' left (TkStar : rest) = + let (right, rest') = parseUnary rest + in parseMulDiv' (BinOp Mul left right) rest' + parseMulDiv' left (TkSlash : rest) = + let (right, rest') = parseUnary rest + in parseMulDiv' (BinOp Div left right) rest' + parseMulDiv' left (TkPercent : rest) = + let (right, rest') = parseUnary rest + in parseMulDiv' (BinOp Mod left right) rest' + parseMulDiv' left rest = (left, rest) + +-- | Parse unary operators +parseUnary :: [Token] -> (Expr, [Token]) +parseUnary (TkMinus : rest) = + let (expr, rest') = parseUnary rest + in (UnaryOp Neg expr, rest') +parseUnary (TkNot : rest) = + let (expr, rest') = parseUnary rest + in (UnaryOp Not expr, rest') +parseUnary toks = parsePrimary toks + +-- | Parse primary expressions +parsePrimary :: [Token] -> (Expr, [Token]) +parsePrimary (TkNum n : rest) = (Lit n, rest) +parsePrimary (TkIdent name : TkLParen : rest) = + -- Function call + let (args, rest') = parseArgs rest + rest'' = expect TkRParen rest' + in (Call name args, rest'') +parsePrimary (TkIdent name : rest) = (Var name, rest) +parsePrimary (TkLParen : rest) = + let (expr, rest') = parseExpr rest + rest'' = expect TkRParen rest' + in (expr, rest'') +parsePrimary toks = error $ "Expected expression, got: " ++ show (take 3 toks) + +-- | Parse function arguments +parseArgs :: [Token] -> ([Expr], [Token]) +parseArgs (TkRParen : rest) = ([], TkRParen : rest) -- put back RParen +parseArgs toks = parseArgs' toks + where + parseArgs' ts = + let (expr, ts') = parseExpr ts + in case ts' of + (TkComma : ts'') -> + let (rest, ts''') = parseArgs' ts'' + in (expr : rest, ts''') + _ -> ([expr], ts') + +-- | Expect a specific token +expect :: Token -> [Token] -> [Token] +expect expected (tok : rest) + | tok == expected = rest + | otherwise = error $ "Expected " ++ show expected ++ ", got " ++ show tok +expect expected [] = error $ "Expected " ++ show expected ++ ", got EOF" + + + diff --git a/loopinv/examples/test1.c b/loopinv/examples/test1.c new file mode 100644 index 0000000..7d87183 --- /dev/null +++ b/loopinv/examples/test1.c @@ -0,0 +1,12 @@ +// Simple counting loop +// Expected: loop invariant 0 <= x <= n + +void simple(int n) { + int x = 0; + while (x < n) { + x = x + 1; + } +} + + + diff --git a/loopinv/examples/test2.c b/loopinv/examples/test2.c new file mode 100644 index 0000000..f5a0b32 --- /dev/null +++ b/loopinv/examples/test2.c @@ -0,0 +1,12 @@ +// Nested loop example +void nested(int n, int m) { + int i = 0; + while (i < n) { + int j = 0; + while (j < m) { + j = j + 1; + } + i = i + 1; + } +} + diff --git a/loopinv/examples/test3.c b/loopinv/examples/test3.c new file mode 100644 index 0000000..8fc0755 --- /dev/null +++ b/loopinv/examples/test3.c @@ -0,0 +1,8 @@ +// Countdown loop +void countdown(int n) { + int x = n; + while (x > 0) { + x = x - 1; + } +} + diff --git a/loopinv/examples/test_tricky.c b/loopinv/examples/test_tricky.c new file mode 100644 index 0000000..ff02a0c --- /dev/null +++ b/loopinv/examples/test_tricky.c @@ -0,0 +1,8 @@ +// Tricky loop - increment by 2 +void tricky(int n) { + int x = 0; + while (x < n) { + x = x + 2; + } +} +