This commit is contained in:
aarne committed 2004-09-23 14:41:42 +00:00
1 parent d5b4230d6d
commit 2c60a2d82a
31 files changed
+434 -211

No files matched your search

+4 -4
View File
@@ -36,10 +36,10 @@ concrete ImperC of Imper = open ResImper in {
EVar _ x = constant x.s ; EVar _ x = constant x.s ;
EInt n = constant n.s ; EInt n = constant n.s ;
EFloat a b = constant (a.s ++ "." ++ b.s) ; EFloat a b = constant (a.s ++ "." ++ b.s) ;
EMul _ = infixL P2 "*" ; EMul _ = infixL 3 "*" ;
EAdd _ = infixL P1 "+" ; EAdd _ = infixL 2 "+" ;
ESub _ = infixL P1 "-" ; ESub _ = infixL 2 "-" ;
ELt _ = infixN P0 "<" ; ELt _ = infixN 1 "<" ;
EApp args val f exps = constant (f.s ++ paren exps.s) ; EApp args val f exps = constant (f.s ++ paren exps.s) ;
+16 -21
View File
@@ -1,33 +1,28 @@
resource ResImper = { resource ResImper = open Predef in {
-- precedence -- precedence
param oper
Prec = P0 | P1 | P2 | P3 ; Prec : PType = Predef.Ints 4 ;
oper PrecExp : Type = {s : Prec => Str} ;
PrecExp : Type = {s : Prec => Str} ; ex : PrecExp -> Str = \exp -> exp.s ! 0 ;
ex : PrecExp -> Str = \exp -> exp.s ! P0 ; constant : Str -> PrecExp = \c -> {s = \\_ => c} ;
constant : Str -> PrecExp = \c -> {s = \\_ => c} ;
infixN : Prec -> Str -> PrecExp -> PrecExp -> PrecExp = \p,f,x,y -> infixN : Prec -> Str -> PrecExp -> PrecExp -> PrecExp = \p,f,x,y ->
{s = \\k => mkPrec (x.s ! (nextPrec ! p) ++ f ++ y.s ! (nextPrec ! p)) ! p ! k} ; {s = mkPrec (x.s ! (nextPrec ! p) ++ f ++ y.s ! (nextPrec ! p)) ! p} ;
infixL : Prec -> Str -> PrecExp -> PrecExp -> PrecExp = \p,f,x,y -> infixL : Prec -> Str -> PrecExp -> PrecExp -> PrecExp = \p,f,x,y ->
{s = mkPrec (x.s ! p ++ f ++ y.s ! (nextPrec ! p)) ! p} ; {s = mkPrec (x.s ! p ++ f ++ y.s ! (nextPrec ! p)) ! p} ;
nextPrec : Prec => Prec = table {P0 => P1 ; P1 => P2 ; _ => P3} ; nextPrec : Prec => Prec = table {
mkPrec : Str -> Prec => Prec => Str = \str -> table { 4 => 4 ;
P3 => table { -- use the term of precedence P3... n => Predef.plus n 1
_ => str} ; -- ...always without parentheses
P2 => table { -- use the term of precedence P2...
P3 => paren str ; -- ...in parentheses if P3 is expected...
_ => str} ; -- ...otherwise without parentheses
P1 => table {
P3 | P2 => paren str ;
_ => str} ;
P0 => table {
P0 => str ;
_ => paren str}
} ; } ;
mkPrec : Str -> Prec => Prec => Str = \str ->
\\p,q => case Predef.lessInt p q of {
Predef.PTrue => paren str ;
_ => str
} ;
-- string operations -- string operations
SS : Type = {s : Str} ; SS : Type = {s : Str} ;
+30
View File
@@ -0,0 +1,30 @@
module Main where
import System
main :: IO ()
main = do
jvm:src:_ <- getArgs
s <- readFile jvm
let obj = takeWhile (/='.') src ++ ".j"
writeFile obj $ mkJVM s
putStrLn $ "wrote file " ++ obj
mkJVM :: String -> String
mkJVM = unlines . reverse . fst . foldl trans ([],([],0)) . lines where
trans (code,(env,v)) s = case words s of
".method":f:ns -> ((".method " ++ f ++ concat ns):code,([],0))
"alloc":t:x:_ -> (code, ((x,v):env, v + size t))
".limit":"locals":ns -> chCode (".limit locals " ++ show (length ns - 1))
t:"_load" :x:_ -> chCode (t ++ "load " ++ look x)
t:"_store":x:_ -> chCode (t ++ "store " ++ look x)
t:"_return":_ -> chCode (t ++ "return")
"goto":ns -> chCode ("goto " ++ concat ns)
"ifzero":ns -> chCode ("ifzero " ++ concat ns)
_ -> chCode s
where
chCode c = (c:code,(env,v))
look x = maybe (x ++ show env) show $ lookup x env
size t = case t of
"d" -> 2
_ -> 1
+39
View File
@@ -0,0 +1,39 @@
GF sources:
----------
Imper.gf -- abstract syntax of an imperative language
ImperC.gf -- concrete syntax for C notation
ImperJVM.gf -- concrete syntax for JVM notation
ResImper.gf -- resource module for concrete syntaxes
Scripts:
-------
gfcc -- the main compiler executable reading Foo.c ; shell script
typecheck.gfs -- the type checker and constraint solver ; GF editor script
CleanJVM.hs -- cleans up jvm.tmp to produce Foo.j ; Haskell module
makefile -- builds the compiler from GF source ; Unix Make file
Generated files:
---------------
Imper.gfcm -- canonical multilingual GF grammar for C and JVM
ImperC.cf -- LBNF grammar for C generated from Imper.gfcm
gft.tmp -- parse result generated by the compiler front end
jvm.tmp -- pseudo-JVM produced by GF linearization
Required programs to use the compiler:
-------------------------------------
gf+ -- Grammatical Framework version 2.0+, >= 23/9/2004
jasmin -- JVM assembler (to compile Foo.j to Foo.class)
Required programs to build the compiler:
---------------------------------------
bnfc -- BNF Converter version 2.1+, >= 23/9/2004
happy -- parser generator for Haskell, >= 1.13
alex -- lexer generator for Haskell, >= 2.0
Profile.hs -- BNFC source file (formats/profile), must be on your path
Trees.hs -- BNFC source file (formats/profile), must be on your path
File formats:
------------
Foo.c -- C source file
Foo.j -- generated Jasmin JVM assembler file
Foo.class -- assembled JVM bytecode file
+12
View File
@@ -0,0 +1,12 @@
int abs (int x){
if (x < 0){
return 0 - x ;
}
else return x ;
} ;
int main () {
int i ;
i = abs (16);
} ;
+4
View File
@@ -0,0 +1,4 @@
./TestImperC $1 | tail -1 >gft.tmp
echo "es -file=typecheck.gfs" | gf+ -s Imper.gfcm
runhugs CleanJVM jvm.tmp $1
rm *.tmp
+12
View File
@@ -0,0 +1,12 @@
GF=gf+
SRC=../
all: compiler
compiler:
echo "pm | wf Imper.gfcm ;; pg -lang=ImperC -printer=lbnf | wf ImperC.tmp" | $(GF) $(SRC)ImperC.gf $(SRC)ImperJVM.gf
echo "entrypoints Program, Stm, Exp ;" >entry.tmp
cat entry.tmp ImperC.tmp >ImperC.cf
bnfc -m -prof ImperC.cf
make -f Makefile
rm *.tmp
+8
View File
@@ -0,0 +1,8 @@
n Program
open gft.tmp
'
c solve
'
c reindex
'
save ImperJVM jvm.tmp
+3 -1
View File
@@ -7,7 +7,8 @@ resource Predef = {
-- these operations have their proper definitions in AppPredefined.hs -- these operations have their proper definitions in AppPredefined.hs
oper Int : Type = variants {} ; -- the type of integers oper Int : Type = variants {} ; -- the type of integers
oper Ints : Int -> Type = variants {} ; -- the type of integers from 0 to n
oper length : Tok -> Int = variants {} ; -- length of string oper length : Tok -> Int = variants {} ; -- length of string
oper drop : Int -> Tok -> Tok = variants {} ; -- drop prefix of length oper drop : Int -> Tok -> Tok = variants {} ; -- drop prefix of length
@@ -15,6 +16,7 @@ resource Predef = {
oper tk : Int -> Tok -> Tok = variants {} ; -- drop suffix of length oper tk : Int -> Tok -> Tok = variants {} ; -- drop suffix of length
oper dp : Int -> Tok -> Tok = variants {} ; -- take suffix of length oper dp : Int -> Tok -> Tok = variants {} ; -- take suffix of length
oper eqInt : Int -> Int -> PBool = variants {} ; -- test if equal integers oper eqInt : Int -> Int -> PBool = variants {} ; -- test if equal integers
oper lessInt: Int -> Int -> PBool = variants {} ; -- test order of integers
oper plus : Int -> Int -> Int = variants {} ; -- add integers oper plus : Int -> Int -> Int = variants {} ; -- add integers
oper eqStr : Tok -> Tok -> PBool = variants {} ; -- test if equal strings oper eqStr : Tok -> Tok -> PBool = variants {} ; -- test if equal strings
oper occur : Tok -> Tok -> PBool = variants {} ; -- test if occurs as substring oper occur : Tok -> Tok -> PBool = variants {} ; -- test if occurs as substring
+5 -3
View File
@@ -26,6 +26,7 @@ main = do
let (os,fs) = getOptions "-" xs let (os,fs) = getOptions "-" xs
opt j = oElem j os opt j = oElem j os
st0 = optInitShellState os st0 = optInitShellState os
ifNotSil c = if oElem beSilent os then return () else c
case 0 of case 0 of
_ | opt getHelp -> do _ | opt getHelp -> do
@@ -51,10 +52,11 @@ main = do
if opt beSilent then return () else putStrLnFlush "</gfbatch>" if opt beSilent then return () else putStrLnFlush "</gfbatch>"
return () return ()
_ -> do _ -> do
putStrLnFlush $ welcomeMsg
ifNotSil $ putStrLnFlush $ welcomeMsg
st <- useIOE st0 $ st <- useIOE st0 $
foldM (shellStateFromFiles os) st0 fs foldM (shellStateFromFiles os) st0 fs
if null fs then return () else putCPU if null fs then return () else (ifNotSil putCPU)
gfInteract (initHState st) gfInteract (initHState st)
return () return ()
@@ -73,7 +75,7 @@ welcomeMsg =
"Welcome to " ++ authorMsg ++++ welcomeArch ++ "\n\nType 'h' for help." "Welcome to " ++ authorMsg ++++ welcomeArch ++ "\n\nType 'h' for help."
authorMsg = unlines [ authorMsg = unlines [
"Grammatical Framework, Version 2.0", "Grammatical Framework, Version 2.0+",
"Compiled " ++ today, "Compiled " ++ today,
"Copyright (c)", "Copyright (c)",
"Björn Bringert, Markus Forsberg, Thomas Hallgren, Harald Hammarström,", "Björn Bringert, Markus Forsberg, Thomas Hallgren, Harald Hammarström,",
+3
View File
@@ -104,6 +104,7 @@ data CType =
| Table CType CType | Table CType CType
| Cn CIdent | Cn CIdent
| TStr | TStr
| TInts Integer
deriving (Eq,Ord,Show) deriving (Eq,Ord,Show)
data Labelling = data Labelling =
@@ -121,6 +122,7 @@ data Term =
| S Term Term | S Term Term
| C Term Term | C Term Term
| FV [Term] | FV [Term]
| EInt Integer
| K Tokn | K Tokn
| E | E
deriving (Eq,Ord,Show) deriving (Eq,Ord,Show)
@@ -157,6 +159,7 @@ data Patt =
| PV Ident | PV Ident
| PW | PW
| PR [PattAssign] | PR [PattAssign]
| PI Integer
deriving (Eq,Ord,Show) deriving (Eq,Ord,Show)
data PattAssign = data PattAssign =
+2
View File
@@ -77,6 +77,7 @@ term2patt trm = case trm of
aa' <- mapM term2patt aa aa' <- mapM term2patt aa
return (PR (map (uncurry PAss) (zip ll aa'))) return (PR (map (uncurry PAss) (zip ll aa')))
LI x -> return $ PV x LI x -> return $ PV x
EInt i -> return $ PI i
_ -> prtBad "no pattern corresponds to term" trm _ -> prtBad "no pattern corresponds to term" trm
patt2term :: Patt -> Term patt2term :: Patt -> Term
@@ -85,6 +86,7 @@ patt2term p = case p of
PV x -> LI x PV x -> LI x
PW -> anyTerm ---- PW -> anyTerm ----
PR pas -> R [ Ass lbl (patt2term q) | PAss lbl q <- pas ] PR pas -> R [ Ass lbl (patt2term q) | PAss lbl q <- pas ]
PI i -> EInt i
anyTerm :: Term anyTerm :: Term
anyTerm = LI (A.identC "_") --- should not happen anyTerm = LI (A.identC "_") --- should not happen
+3
View File
@@ -111,6 +111,7 @@ redCType t = case t of
Table p v -> liftM2 G.Table (redCType p) (redCType v) Table p v -> liftM2 G.Table (redCType p) (redCType v)
Cn mc -> liftM (uncurry G.QC) $ redQIdent mc Cn mc -> liftM (uncurry G.QC) $ redQIdent mc
TStr -> return $ F.typeStr TStr -> return $ F.typeStr
TInts i -> return $ F.typeInts (fromInteger i)
redCTerm :: Term -> Err G.Term redCTerm :: Term -> Err G.Term
redCTerm x = case x of redCTerm x = case x of
@@ -139,6 +140,7 @@ redCTerm x = case x of
C term0 term -> liftM2 G.C (redCTerm term0) (redCTerm term) C term0 term -> liftM2 G.C (redCTerm term0) (redCTerm term)
FV terms -> liftM G.FV $ mapM redCTerm terms FV terms -> liftM G.FV $ mapM redCTerm terms
K (KS str) -> return $ G.K str K (KS str) -> return $ G.K str
EInt i -> return $ G.EInt $ fromInteger i
E -> return $ G.Empty E -> return $ G.Empty
K (KP d vs) -> return $ K (KP d vs) -> return $
G.Alts (tList d,[(tList s, G.Strs $ map G.K v) | Var s v <- vs]) G.Alts (tList d,[(tList s, G.Strs $ map G.K v) | Var s v <- vs])
@@ -169,5 +171,6 @@ redPatt p = case p of
ls' = map redLabel ls ls' = map redLabel ls
ts <- mapM redPatt ts ts <- mapM redPatt ts
return $ G.PR $ zip ls' ts return $ G.PR $ zip ls' ts
PI i -> return $ G.PInt (fromInteger i)
_ -> Bad $ "cannot recompile pattern" +++ show p _ -> Bad $ "cannot recompile pattern" +++ show p
+3
View File
@@ -93,6 +93,7 @@ RecType. CType ::= "{" [Labelling] "}" ;
Table. CType ::= "(" CType "=>" CType ")" ; Table. CType ::= "(" CType "=>" CType ")" ;
Cn. CType ::= CIdent ; Cn. CType ::= CIdent ;
TStr. CType ::= "Str" ; TStr. CType ::= "Str" ;
TInts. CType ::= "Ints" Integer ;
Lbg. Labelling ::= Label ":" CType ; Lbg. Labelling ::= Label ":" CType ;
@@ -108,6 +109,7 @@ S. Term1 ::= Term1 "!" Term2 ;
C. Term ::= Term "++" Term1 ; C. Term ::= Term "++" Term1 ;
FV. Term1 ::= "variants" "{" [Term2] "}" ; --- no separator! FV. Term1 ::= "variants" "{" [Term2] "}" ; --- no separator!
EInt. Term2 ::= Integer ;
K. Term2 ::= Tokn ; K. Term2 ::= Tokn ;
E. Term2 ::= "[" "]" ; E. Term2 ::= "[" "]" ;
@@ -129,6 +131,7 @@ PC. Patt ::= "(" CIdent [Patt] ")" ;
PV. Patt ::= Ident ; PV. Patt ::= Ident ;
PW. Patt ::= "_" ; PW. Patt ::= "_" ;
PR. Patt ::= "{" [PattAssign] "}" ; PR. Patt ::= "{" [PattAssign] "}" ;
PI. Patt ::= Integer ;
PAss. PattAssign ::= Label "=" Patt ; PAss. PattAssign ::= Label "=" Patt ;
+5 -4
View File
@@ -37,12 +37,12 @@ data Tok =
| TD String -- double precision float literals | TD String -- double precision float literals
| TC String -- character literals | TC String -- character literals
deriving (Eq,Show) deriving (Eq,Show,Ord)
data Token = data Token =
PT Posn Tok PT Posn Tok
| Err Posn | Err Posn
deriving Show deriving (Eq,Show,Ord)
tokenPos (PT (Pn _ l _) _ :_) = "line " ++ show l tokenPos (PT (Pn _ l _) _ :_) = "line " ++ show l
tokenPos (Err (Pn _ l _) :_) = "line " ++ show l tokenPos (Err (Pn _ l _) :_) = "line " ++ show l
@@ -57,12 +57,13 @@ prToken t = case t of
PT _ (TV s) -> s PT _ (TV s) -> s
PT _ (TD s) -> s PT _ (TD s) -> s
PT _ (TC s) -> s PT _ (TC s) -> s
_ -> show t
eitherResIdent :: (String -> Tok) -> String -> Tok eitherResIdent :: (String -> Tok) -> String -> Tok
eitherResIdent tv s = if isResWord s then (TS s) else (tv s) where eitherResIdent tv s = if isResWord s then (TS s) else (tv s) where
isResWord s = isInTree s $ isResWord s = isInTree s $
B "lin" (B "data" (B "abstract" (B "Type" (B "Str" N N) N) (B "concrete" (B "cat" N N) N)) (B "grammar" (B "fun" (B "flags" N N) N) (B "in" N N))) (B "pre" (B "open" (B "of" (B "lincat" N N) N) (B "param" (B "oper" N N) N)) (B "transfer" (B "table" (B "resource" N N) N) (B "variants" N N))) B "lin" (B "concrete" (B "Type" (B "Str" (B "Ints" N N) N) (B "cat" (B "abstract" N N) N)) (B "fun" (B "flags" (B "data" N N) N) (B "in" (B "grammar" N N) N))) (B "pre" (B "open" (B "of" (B "lincat" N N) N) (B "param" (B "oper" N N) N)) (B "transfer" (B "table" (B "resource" N N) N) (B "variants" N N)))
data BTree = N | B String BTree BTree deriving (Show) data BTree = N | B String BTree BTree deriving (Show)
@@ -90,7 +91,7 @@ unescapeInitTail = unesc . tail where
------------------------------------------------------------------- -------------------------------------------------------------------
data Posn = Pn !Int !Int !Int data Posn = Pn !Int !Int !Int
deriving (Eq, Show) deriving (Eq, Show,Ord)
alexStartPos :: Posn alexStartPos :: Posn
alexStartPos = Pn 0 1 1 alexStartPos = Pn 0 1 1
+197 -171
View File
@@ -340,21 +340,21 @@ happyOutTok x = unsafeCoerce# x
{-# INLINE happyOutTok #-} {-# INLINE happyOutTok #-}
happyActOffsets :: HappyAddr happyActOffsets :: HappyAddr
happyActOffsets = HappyA# "\x0a\x02\x06\x02\x00\x00\x04\x02\xdd\x00\x02\x02\x14\x02\x00\x02\x00\x00\x29\x02\xfc\x01\xfc\x01\xfc\x01\xfc\x01\x25\x02\x00\x00\xff\x01\x00\x00\xff\xff\xf9\x01\xf9\x01\x00\x00\x22\x02\xfd\x01\x1d\x02\xf8\x01\xf8\x01\x1b\x02\x00\x00\x00\x00\x1c\x02\xf0\x01\x00\x00\xdd\x00\xf5\x01\x00\x00\xee\x01\x00\x00\xf6\x01\x00\x00\x15\x02\x66\x00\xed\x01\x13\x02\xef\x01\x0d\x02\x00\x00\xda\x01\xda\x01\xda\x01\xda\x01\xda\x01\xda\x01\xda\x01\x00\x00\x07\x02\x05\x02\x01\x02\xfb\x01\xf7\x01\xf4\x01\xf3\x01\x00\x00\xd6\x01\x00\x00\xc8\x01\x00\x00\xc8\x01\xc8\x01\x11\x00\xc8\x01\x44\x00\x44\x00\xc8\x01\x11\x00\xe9\x01\x00\x00\x00\x00\x00\x00\x94\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x01\x11\x00\xc7\x01\xc7\x01\xc3\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd2\x01\x00\x00\x00\x00\xe8\x01\x5d\x00\x44\x00\x00\x00\xe7\x01\xe6\x01\xe4\x01\xe2\x01\xdc\x01\xe1\x01\x00\x00\xb3\x01\xd7\x01\x11\x00\x11\x00\xce\x01\x0d\x00\xc4\x01\x00\x00\xd5\x01\xd0\x01\xcf\x01\xa2\x01\x0d\x00\xa1\x01\x44\x00\x00\x00\x00\x00\xc0\x01\xa3\x00\xba\x01\xbf\x01\xc2\x01\x00\x00\x11\x00\x93\x01\x00\x00\xc1\x01\x69\x00\x00\x00\x11\x00\x00\x00\x11\x00\x00\x00\x00\x00\x00\x00\xc7\x00\x00\x00\x00\x00\xb6\x01\xaa\x01\xaf\x01\x00\x00\x00\x00\x5d\x00\x72\x00\x0d\x00\x8f\x01\x8f\x01\x44\x00\xb2\x01\x00\x00\x00\x00\x44\x00\x5d\x00\x44\x00\xa6\x00\x84\x01\x00\x00\x00\x00\x00\x00\x00\x00\x84\x01\xcf\x00\x99\x01\xac\x01\x0d\x00\x0d\x00\xa4\x01\x00\x00\x00\x00\x00\x00\xad\x01\x00\x00\x00\x00\xfd\xff\x00\x00\x00\x00\xae\x01\xab\x01\x9f\x01\x4c\x00\x5d\x00\x70\x01\x70\x01\x90\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x00\x71\x01\x00\x00\x00\x00\x00\x00\x00\x00\x9a\x01\x95\x01\x00\x00\x00\x00\x00\x00\x00\x00\x0d\x00\x5d\x00\x15\x00\x00\x00\x42\x00\x96\x01\x3c\x00\x00\x00\x8b\x01\x89\x01\x0d\x00\x6b\x01\x00\x00\x00\x00\x65\x00\x00\x00\x00\x00\x8e\x01\x8a\x01\x56\x00\x00\x00\x00\x00\x51\x00\x00\x00\x7c\x01\x57\x01\x11\x00\x85\x00\x00\x00\x00\x00\x00\x00\x8c\x01\xf9\xff\x88\x01\x00\x00\x00\x00\x5d\x00\x4f\x01\x00\x00\x0d\x00\x00\x00\x87\x01\x0d\x00\x7b\x01\x00\x00\x7b\x01\x00\x00\x86\x01\x7d\x01\x78\x01\x74\x01\x00\x00\xf7\xff\x00\x00\x4a\x01\x00\x00\x00\x00\x5d\x00\x57\x00\x49\x00\x00\x00\x00\x00\x00\x00\x00\x00"# happyActOffsets = HappyA# "\x26\x02\x22\x02\x00\x00\x21\x02\x5b\x01\x18\x02\x28\x02\x1f\x02\x00\x00\x3f\x02\x12\x02\x12\x02\x12\x02\x12\x02\x3a\x02\x00\x00\x1c\x02\x00\x00\x17\x00\x0d\x02\x0d\x02\x00\x00\x38\x02\x17\x02\x34\x02\x0c\x02\x0c\x02\x32\x02\x00\x00\x00\x00\x33\x02\x0b\x02\x00\x00\x5b\x01\x15\x02\x00\x00\x06\x02\x00\x00\x13\x02\x00\x00\x31\x02\x71\x00\x03\x02\x2f\x02\x0f\x02\x2e\x02\x00\x00\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x00\x00\x2c\x02\x2b\x02\x27\x02\x29\x02\x25\x02\x24\x02\x20\x02\x00\x00\x00\x02\x00\x00\xf6\x01\x00\x00\xf6\x01\xf6\x01\x10\x00\xf6\x01\x60\x00\x60\x00\xf6\x01\x10\x00\x19\x02\x00\x00\x00\x00\x00\x00\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf5\x01\x10\x00\xf5\x01\xf5\x01\xf0\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x09\x02\x00\x00\x00\x00\x1e\x02\x15\x00\x60\x00\xee\x01\x00\x00\x1d\x02\x1b\x02\x1a\x02\x16\x02\x10\x02\x14\x02\x00\x00\xe9\x01\x11\x02\x10\x00\x10\x00\x08\x02\x0c\x00\x00\x00\xfe\x01\x00\x00\x0a\x02\x05\x02\x01\x02\xd3\x01\x0c\x00\xd2\x01\x60\x00\x00\x00\x00\x00\xf2\x01\xf8\x00\xec\x01\xf1\x01\xf4\x01\x00\x00\x10\x00\xc4\x01\x00\x00\xf3\x01\x7a\x00\x00\x00\x10\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\xe4\x00\x00\x00\x00\x00\x00\x00\xe8\x01\xdd\x01\xe1\x01\x00\x00\x00\x00\x15\x00\x43\x00\x0c\x00\xbf\x01\xbf\x01\x60\x00\xe4\x01\x00\x00\x00\x00\x60\x00\x15\x00\x60\x00\xb7\x00\xb4\x01\x00\x00\x00\x00\x00\x00\x00\x00\xb4\x01\x87\x00\xca\x01\xe0\x01\x0c\x00\x0c\x00\xd4\x01\x00\x00\x00\x00\x00\x00\xdf\x01\x00\x00\x00\x00\xb4\x00\x00\x00\x00\x00\xde\x01\xdc\x01\xd1\x01\x51\x00\x15\x00\xb0\x01\xb0\x01\xc7\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\xa2\x01\x00\x00\x00\x00\x00\x00\x00\x00\xcc\x01\xb6\x01\x00\x00\x00\x00\x00\x00\x00\x00\x0c\x00\x15\x00\x0e\x00\x00\x00\x47\x00\xcb\x01\x41\x00\x00\x00\xbd\x01\xbb\x01\x0c\x00\x9b\x01\x00\x00\x00\x00\x94\x00\x00\x00\x00\x00\xc0\x01\xbc\x01\x5b\x00\x00\x00\x00\x00\x4b\x00\x00\x00\xae\x01\x88\x01\x10\x00\xa9\x00\x00\x00\x00\x00\x00\x00\xbe\x01\x3f\x00\xba\x01\x00\x00\x00\x00\x00\x00\x15\x00\x80\x01\x00\x00\x0c\x00\x00\x00\xb9\x01\x0c\x00\xad\x01\x00\x00\xad\x01\x00\x00\xb8\x01\xaf\x01\xaa\x01\xa6\x01\x00\x00\xf8\xff\x00\x00\x7b\x01\x00\x00\x00\x00\x15\x00\x5c\x00\x4e\x00\x00\x00\x00\x00\x00\x00\x00\x00"#
happyGotoOffsets :: HappyAddr happyGotoOffsets :: HappyAddr
happyGotoOffsets = HappyA# "\x51\x01\x00\x00\x00\x00\x00\x00\xc9\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7a\x01\x79\x01\x77\x01\x76\x01\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x6d\x01\x03\x00\x00\x00\x00\x00\x63\x01\x00\x00\x6a\x01\x69\x01\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x58\x01\xc9\x00\x00\x00\x36\x01\x5a\x01\x00\x00\x93\x00\x00\x00\x00\x00\x1a\x00\x55\x01\x00\x00\x4c\x01\x00\x00\x00\x00\x44\x01\x40\x01\x3f\x01\x39\x01\x38\x01\x28\x01\x27\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1e\x01\x00\x00\x16\x01\x26\x01\x03\x02\x5b\x01\xfb\x00\xea\x00\x0c\x00\xf1\x01\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x02\x00\x00\x00\x00\x00\x00\x00\x00\xff\x00\x0e\x01\xdf\x01\x59\x01\x0c\x01\x08\x01\x00\x00\x00\x00\x00\x00\x00\x00\xdb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5c\x00\xe9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1a\x01\x00\x00\xcd\x01\xbb\x01\x00\x00\x2a\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf7\x00\x18\x01\x0b\x00\xd8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0a\x01\x00\x00\xa9\x01\xf8\x00\x00\x00\x00\x00\xc1\x00\x00\x00\x97\x01\x00\x00\x85\x01\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\x06\x01\x52\x01\xd6\x00\xd7\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x05\x00\xa4\x00\x00\x00\x6b\x00\x00\x00\x00\x00\xab\x00\x00\x00\x2f\x01\x00\x00\x00\x00\x00\x00\xf4\x00\x30\x01\x00\x00\x00\x00\x00\x00\xc3\x00\x00\x00\x00\x00\xb9\x00\x00\x00\x00\x00\x88\x00\x00\x00\x00\x00\x00\x00\x49\x01\x0e\x00\xb0\x00\xa7\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x73\x01\xd3\x00\x00\x00\x00\x00\x83\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe2\x00\x7f\x00\x82\x00\x00\x00\x42\x01\xed\x00\x42\x01\x00\x00\x00\x00\x00\x00\xd0\x00\x5e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x71\x00\x00\x00\x00\x00\x20\x01\x00\x00\x00\x00\x76\x00\x61\x01\xc1\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6f\x00\x00\x00\x00\x00\x00\x00\x09\x00\xaf\x00\x00\x00\xbe\x00\x00\x00\xf3\xff\xac\x00\x00\x00\x00\x00\x00\x00\x35\x00\x00\x00\x00\x00\x00\x00\x00\x00\x30\x00\xfc\x00\x00\x00\x10\x00\x00\x00\x00\x00\x07\x00\x61\x00\x25\x00\x00\x00\x00\x00\x00\x00\x00\x00"# happyGotoOffsets = HappyA# "\x13\x00\x00\x00\x00\x00\x00\x00\x61\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\xac\x01\xab\x01\xa9\x01\xa8\x01\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x9f\x01\x03\x00\x00\x00\x00\x00\x96\x01\x00\x00\x9d\x01\x9c\x01\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x95\x01\x61\x00\x00\x00\x74\x01\x8d\x01\x00\x00\x64\x00\x00\x00\x00\x00\xaf\x00\x8b\x01\x00\x00\x38\x01\x00\x00\x00\x00\x7a\x01\x75\x01\x73\x01\x69\x01\x65\x01\x57\x01\x54\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4f\x01\x00\x00\x49\x01\x34\x01\xff\x01\x8c\x01\x4e\x01\x4d\x01\x6b\x00\xed\x01\x00\x00\x00\x00\x00\x00\x00\x00\x07\x02\x00\x00\x00\x00\x00\x00\x00\x00\x2d\x01\x2e\x01\xdb\x01\x78\x01\x2c\x01\x24\x01\x00\x00\x00\x00\x00\x00\x00\x00\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x70\x00\x3d\x01\x22\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xba\x00\x00\x00\xc9\x01\xb7\x01\x00\x00\x1e\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe8\x00\x15\x01\x0a\x00\x14\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x39\x00\x00\x00\xa5\x01\x23\x01\x00\x00\x00\x00\xf2\x00\x00\x00\x93\x01\x00\x00\x81\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\x85\x00\x00\x00\x0c\x01\x55\x01\x1d\x01\xeb\x00\x00\x00\x00\x00\x00\x00\xd0\x00\x06\x00\xa5\x00\x00\x00\x7e\x00\x00\x00\x00\x00\xc7\x00\x00\x00\xc2\x00\x00\x00\x00\x00\x00\x00\xf5\x00\x35\x01\x00\x00\x00\x00\x00\x00\xed\x00\x00\x00\x00\x00\xcb\x00\x00\x00\x00\x00\xb6\x00\x00\x00\x00\x00\x00\x00\x45\x01\x12\x00\xe6\x00\xc9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6f\x01\xc0\x00\x00\x00\x00\x00\xb2\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xec\x00\x05\x00\x86\x00\x00\x00\x3e\x01\x56\x01\x3e\x01\x00\x00\x00\x00\x00\x00\xe3\x00\x77\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa6\x00\x00\x00\x00\x00\x66\x01\x00\x00\x00\x00\x97\x00\x5d\x01\xf2\x00\x00\x00\x00\x00\x00\x00\x00\x00\x63\x00\x00\x00\x00\x00\x00\x00\x00\x00\x09\x00\x89\x00\x00\x00\xc4\x00\x00\x00\x44\x01\xbb\x00\x00\x00\x00\x00\x00\x00\xe4\xff\x00\x00\x00\x00\x00\x00\x00\x00\xdc\xff\xea\x00\x00\x00\x0f\x00\x00\x00\x00\x00\x07\x00\x23\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00"#
happyDefActions :: HappyAddr happyDefActions :: HappyAddr
happyDefActions = HappyA# "\xf4\xff\x00\x00\xfe\xff\x00\x00\xfa\xff\x7d\xff\x7c\xff\x00\x00\xf3\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf6\xff\x00\x00\xf8\xff\xf1\xff\x00\x00\x7d\xff\x7b\xff\x00\x00\xef\xff\x00\x00\x00\x00\x00\x00\x00\x00\xf7\xff\xf2\xff\x00\x00\x7d\xff\xf4\xff\xfb\xff\x00\x00\xa0\xff\x00\x00\xf5\xff\x9e\xff\xf0\xff\x00\x00\x00\x00\x00\x00\x00\x00\xe3\xff\x00\x00\xf9\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9f\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9d\xff\x00\x00\xe4\xff\x00\x00\xee\xff\x00\x00\xd1\xff\x00\x00\x00\x00\x00\x00\x00\x00\x9c\xff\x00\x00\x00\x00\xc6\xff\xc5\xff\xca\xff\xdc\xff\xeb\xff\xe0\xff\xc4\xff\xdb\xff\xcc\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd8\xff\xda\xff\xfd\xff\xfc\xff\x99\xff\x9b\xff\xea\xff\xc0\xff\x00\x00\x8f\xff\x00\x00\xbf\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd0\xff\xe6\xff\xd1\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa9\xff\x8e\xff\x00\x00\x00\x00\x00\x00\x00\x00\x9c\xff\xe5\xff\xc7\xff\xc8\xff\x00\x00\x00\x00\x00\x00\x00\x00\xce\xff\xe1\xff\x00\x00\x00\x00\xe2\xff\x00\x00\x00\x00\xdd\xff\x00\x00\xd9\xff\x00\x00\xc9\xff\x98\xff\x9a\xff\x00\x00\xae\xff\xbc\xff\xb1\xff\xaf\xff\xe9\xff\xb8\xff\xbd\xff\x95\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa8\xff\xc2\xff\x00\x00\x8f\xff\x00\x00\x00\x00\x92\xff\xec\xff\xc3\xff\x97\xff\xcf\xff\xed\xff\x00\x00\x91\xff\x00\x00\x00\x00\x00\x00\x00\x00\x8d\xff\xbe\xff\x89\xff\x00\x00\xba\xff\x89\xff\x00\x00\xb7\xff\x87\xff\x94\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xde\xff\xd5\xff\xd4\xff\xd3\xff\xcd\xff\x00\x00\x00\x00\xd2\xff\xcb\xff\xce\xff\xd7\xff\x00\x00\x00\x00\xa7\xff\xb5\xff\xb3\xff\xb9\xff\x00\x00\x95\xff\x00\x00\xb6\xff\x00\x00\x7f\xff\x00\x00\xc1\xff\xb0\xff\xe8\xff\x00\x00\x92\xff\x96\xff\x90\xff\x00\x00\x88\xff\xb2\xff\x8b\xff\x00\x00\x00\x00\xbb\xff\x86\xff\x85\xff\x93\xff\xac\xff\x00\x00\x00\x00\x00\x00\xd6\xff\xdf\xff\xa6\xff\x84\xff\x00\x00\x00\x00\xa4\xff\x7e\xff\x82\xff\x00\x00\xa3\xff\x00\x00\xb4\xff\x7f\xff\x00\x00\xe7\xff\x8a\xff\xab\xff\x7f\xff\x00\x00\x81\xff\x00\x00\x00\x00\x87\xff\x85\xff\x83\xff\xaa\xff\xad\xff\xa2\xff\x82\xff\x00\x00\x00\x00\xa5\xff\xa1\xff\x80\xff"# happyDefActions = HappyA# "\xf4\xff\x00\x00\xfe\xff\x00\x00\xfa\xff\x7a\xff\x79\xff\x00\x00\xf3\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf6\xff\x00\x00\xf8\xff\xf1\xff\x00\x00\x7a\xff\x78\xff\x00\x00\xef\xff\x00\x00\x00\x00\x00\x00\x00\x00\xf7\xff\xf2\xff\x00\x00\x7a\xff\xf4\xff\xfb\xff\x00\x00\x9d\xff\x00\x00\xf5\xff\x9b\xff\xf0\xff\x00\x00\x00\x00\x00\x00\x00\x00\xe3\xff\x00\x00\xf9\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9c\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9a\xff\x00\x00\xe4\xff\x00\x00\xee\xff\x00\x00\xd1\xff\x00\x00\x00\x00\x00\x00\x00\x00\x99\xff\x00\x00\x00\x00\xc6\xff\xc5\xff\xca\xff\xdc\xff\xeb\xff\xe0\xff\xc4\xff\xdb\xff\xcc\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd8\xff\xda\xff\xfd\xff\xfc\xff\x96\xff\x98\xff\xea\xff\xc0\xff\x00\x00\x8c\xff\x00\x00\x00\x00\xbf\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd0\xff\xe6\xff\xd1\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbe\xff\x00\x00\xa7\xff\x8b\xff\x00\x00\x00\x00\x00\x00\x00\x00\x99\xff\xe5\xff\xc7\xff\xc8\xff\x00\x00\x00\x00\x00\x00\x00\x00\xce\xff\xe1\xff\x00\x00\x00\x00\xe2\xff\x00\x00\x00\x00\xdd\xff\x00\x00\xd9\xff\x00\x00\xc9\xff\x95\xff\x97\xff\x00\x00\xac\xff\xb7\xff\xbb\xff\xaf\xff\xad\xff\xe9\xff\xb6\xff\xbc\xff\x92\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa6\xff\xc2\xff\x00\x00\x8c\xff\x00\x00\x00\x00\x8f\xff\xec\xff\xc3\xff\x94\xff\xcf\xff\xed\xff\x00\x00\x8e\xff\x00\x00\x00\x00\x00\x00\x00\x00\x8a\xff\xbd\xff\x86\xff\x00\x00\xb9\xff\x86\xff\x00\x00\xb5\xff\x84\xff\x91\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xde\xff\xd5\xff\xd4\xff\xd3\xff\xcd\xff\x00\x00\x00\x00\xd2\xff\xcb\xff\xce\xff\xd7\xff\x00\x00\x00\x00\xa5\xff\xb3\xff\xb1\xff\xb8\xff\x00\x00\x92\xff\x00\x00\xb4\xff\x00\x00\x7c\xff\x00\x00\xc1\xff\xae\xff\xe8\xff\x00\x00\x8f\xff\x93\xff\x8d\xff\x00\x00\x85\xff\xb0\xff\x88\xff\x00\x00\x00\x00\xba\xff\x83\xff\x82\xff\x90\xff\xaa\xff\x00\x00\x00\x00\x00\x00\xd6\xff\xdf\xff\xa4\xff\x81\xff\x00\x00\x00\x00\xa2\xff\x9f\xff\x7b\xff\x7f\xff\x00\x00\xa1\xff\x00\x00\xb2\xff\x7c\xff\x00\x00\xe7\xff\x87\xff\xa9\xff\x7c\xff\x00\x00\x7e\xff\x00\x00\x00\x00\x84\xff\x82\xff\x80\xff\xa8\xff\xab\xff\xa0\xff\x7f\xff\x00\x00\x00\x00\xa3\xff\x9e\xff\x7d\xff"#
happyCheck :: HappyAddr happyCheck :: HappyAddr
happyCheck = HappyA# "\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x07\x00\x00\x00\x0d\x00\x00\x00\x00\x00\x16\x00\x00\x00\x16\x00\x03\x00\x01\x00\x15\x00\x20\x00\x03\x00\x08\x00\x0b\x00\x0b\x00\x03\x00\x0c\x00\x00\x00\x0a\x00\x0f\x00\x0c\x00\x11\x00\x1a\x00\x0f\x00\x2e\x00\x11\x00\x12\x00\x0a\x00\x00\x00\x33\x00\x22\x00\x31\x00\x22\x00\x31\x00\x22\x00\x25\x00\x1c\x00\x25\x00\x30\x00\x22\x00\x20\x00\x2d\x00\x28\x00\x28\x00\x34\x00\x34\x00\x34\x00\x34\x00\x32\x00\x2d\x00\x32\x00\x2f\x00\x30\x00\x31\x00\x03\x00\x04\x00\x30\x00\x31\x00\x32\x00\x08\x00\x03\x00\x31\x00\x03\x00\x0c\x00\x24\x00\x08\x00\x0f\x00\x03\x00\x11\x00\x0c\x00\x03\x00\x0c\x00\x0f\x00\x10\x00\x11\x00\x08\x00\x0c\x00\x0d\x00\x0e\x00\x0c\x00\x03\x00\x03\x00\x0f\x00\x00\x00\x11\x00\x00\x00\x1b\x00\x30\x00\x00\x00\x0c\x00\x0c\x00\x0e\x00\x0e\x00\x01\x00\x16\x00\x33\x00\x13\x00\x04\x00\x00\x00\x30\x00\x31\x00\x11\x00\x06\x00\x01\x00\x00\x00\x30\x00\x31\x00\x30\x00\x0c\x00\x1a\x00\x0e\x00\x02\x00\x30\x00\x15\x00\x09\x00\x30\x00\x31\x00\x22\x00\x00\x00\x00\x00\x23\x00\x31\x00\x01\x00\x1e\x00\x24\x00\x30\x00\x30\x00\x22\x00\x2d\x00\x2c\x00\x25\x00\x26\x00\x30\x00\x23\x00\x29\x00\x2a\x00\x0c\x00\x0d\x00\x0e\x00\x2e\x00\x24\x00\x30\x00\x2c\x00\x15\x00\x30\x00\x31\x00\x32\x00\x09\x00\x2b\x00\x1f\x00\x1f\x00\x0c\x00\x22\x00\x22\x00\x0f\x00\x00\x00\x11\x00\x12\x00\x01\x00\x05\x00\x02\x00\x2b\x00\x2b\x00\x00\x00\x01\x00\x0b\x00\x00\x00\x1c\x00\x0d\x00\x02\x00\x00\x00\x20\x00\x30\x00\x31\x00\x32\x00\x30\x00\x0d\x00\x27\x00\x15\x00\x0d\x00\x19\x00\x00\x00\x01\x00\x0d\x00\x00\x00\x01\x00\x02\x00\x30\x00\x31\x00\x32\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x0d\x00\x19\x00\x04\x00\x05\x00\x23\x00\x00\x00\x01\x00\x0b\x00\x00\x00\x13\x00\x2a\x00\x00\x00\x00\x00\x00\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x0d\x00\x17\x00\x18\x00\x0d\x00\x23\x00\x00\x00\x01\x00\x0d\x00\x0d\x00\x17\x00\x18\x00\x2f\x00\x00\x00\x00\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x0d\x00\x19\x00\x19\x00\x2f\x00\x23\x00\x00\x00\x01\x00\x0d\x00\x0d\x00\x00\x00\x02\x00\x1d\x00\x00\x00\x1f\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x0d\x00\x19\x00\x19\x00\x29\x00\x23\x00\x00\x00\x01\x00\x0d\x00\x2c\x00\x02\x00\x2e\x00\x00\x00\x20\x00\x00\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x0d\x00\x19\x00\x16\x00\x00\x00\x23\x00\x00\x00\x01\x00\x00\x00\x2e\x00\x12\x00\x21\x00\x00\x00\x15\x00\x33\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x0d\x00\x00\x00\x00\x00\x00\x00\x23\x00\x00\x00\x01\x00\x30\x00\x31\x00\x14\x00\x00\x00\x00\x00\x01\x00\x18\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x0d\x00\x00\x00\x00\x00\x14\x00\x23\x00\x0d\x00\x0d\x00\x18\x00\x00\x00\x00\x00\x21\x00\x00\x00\x01\x00\x00\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x00\x00\x01\x00\x1b\x00\x1c\x00\x23\x00\x1e\x00\x0d\x00\x30\x00\x31\x00\x00\x00\x23\x00\x03\x00\x00\x00\x0d\x00\x06\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x26\x00\x1b\x00\x06\x00\x0d\x00\x1e\x00\x00\x00\x01\x00\x02\x00\x1b\x00\x23\x00\x0d\x00\x1e\x00\x0d\x00\x00\x00\x00\x00\x08\x00\x23\x00\x00\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x00\x00\x01\x00\x02\x00\x00\x00\x00\x00\x17\x00\x00\x00\x00\x00\x31\x00\x04\x00\x09\x00\x01\x00\x30\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x00\x00\x01\x00\x02\x00\x02\x00\x32\x00\x17\x00\x04\x00\x04\x00\x01\x00\x04\x00\x01\x00\x15\x00\x15\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x00\x00\x01\x00\x02\x00\x04\x00\x30\x00\x17\x00\x0d\x00\x15\x00\x14\x00\x06\x00\x30\x00\x32\x00\x04\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x00\x00\x01\x00\x02\x00\x17\x00\x02\x00\x17\x00\x01\x00\x03\x00\x0d\x00\x06\x00\x1a\x00\x30\x00\x03\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x00\x00\x01\x00\x02\x00\x14\x00\x30\x00\x17\x00\x0b\x00\x01\x00\x30\x00\x15\x00\x06\x00\x04\x00\x0d\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x00\x00\x01\x00\x02\x00\x10\x00\x30\x00\x17\x00\x04\x00\x32\x00\x05\x00\x01\x00\x13\x00\x0a\x00\x02\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x00\x00\x01\x00\x02\x00\x01\x00\x30\x00\x17\x00\x09\x00\x02\x00\x05\x00\x02\x00\x02\x00\x02\x00\x19\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x00\x00\x01\x00\x02\x00\x0b\x00\x32\x00\x17\x00\x30\x00\x30\x00\x05\x00\x24\x00\x08\x00\x05\x00\x02\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x00\x00\x01\x00\x02\x00\x05\x00\x02\x00\x17\x00\x02\x00\x30\x00\x00\x00\x01\x00\x02\x00\x01\x00\x20\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x02\x00\x01\x00\x21\x00\x0d\x00\x24\x00\x17\x00\x10\x00\x11\x00\x30\x00\x30\x00\x03\x00\x30\x00\x06\x00\x17\x00\x01\x00\x07\x00\x28\x00\x27\x00\x27\x00\x30\x00\x30\x00\x05\x00\x02\x00\x30\x00\x23\x00\x1a\x00\xff\xff\xff\xff\xff\xff\x30\x00\xff\xff\xff\xff\xff\xff\x30\x00\xff\xff\x34\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"# happyCheck = HappyA# "\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x30\x00\x02\x00\x16\x00\x03\x00\x01\x00\x03\x00\x00\x00\x03\x00\x08\x00\x0b\x00\x03\x00\x33\x00\x0c\x00\x06\x00\x0a\x00\x0f\x00\x0c\x00\x11\x00\x07\x00\x0f\x00\x1a\x00\x11\x00\x12\x00\x00\x00\x1f\x00\x02\x00\x11\x00\x22\x00\x22\x00\x22\x00\x32\x00\x22\x00\x25\x00\x1d\x00\x25\x00\x24\x00\x2b\x00\x21\x00\x28\x00\x2d\x00\x22\x00\x34\x00\x34\x00\x34\x00\x34\x00\x32\x00\x2e\x00\x32\x00\x30\x00\x31\x00\x32\x00\x33\x00\x32\x00\x31\x00\x32\x00\x33\x00\x03\x00\x04\x00\x31\x00\x24\x00\x31\x00\x08\x00\x03\x00\x12\x00\x09\x00\x0c\x00\x15\x00\x08\x00\x0f\x00\x03\x00\x11\x00\x0c\x00\x03\x00\x16\x00\x0f\x00\x10\x00\x11\x00\x08\x00\x0c\x00\x0d\x00\x0e\x00\x0c\x00\x03\x00\x03\x00\x0f\x00\x16\x00\x11\x00\x03\x00\x01\x00\x04\x00\x05\x00\x0c\x00\x0c\x00\x0e\x00\x0e\x00\x00\x00\x0c\x00\x09\x00\x13\x00\x2c\x00\x00\x00\x32\x00\x31\x00\x32\x00\x33\x00\x04\x00\x0b\x00\x00\x00\x31\x00\x32\x00\x33\x00\x1b\x00\x1c\x00\x32\x00\x00\x00\x31\x00\x06\x00\x33\x00\x31\x00\x32\x00\x33\x00\x00\x00\x0c\x00\x01\x00\x0e\x00\x00\x00\x1a\x00\x27\x00\x31\x00\x31\x00\x33\x00\x33\x00\x1f\x00\x31\x00\x22\x00\x28\x00\x23\x00\x01\x00\x0d\x00\x26\x00\x27\x00\x02\x00\x23\x00\x2a\x00\x2b\x00\x2d\x00\x17\x00\x18\x00\x2f\x00\x23\x00\x31\x00\x2c\x00\x1f\x00\x00\x00\x00\x00\x22\x00\x02\x00\x15\x00\x2c\x00\x31\x00\x32\x00\x33\x00\x0c\x00\x00\x00\x2b\x00\x0f\x00\x0d\x00\x11\x00\x12\x00\x0c\x00\x0d\x00\x0e\x00\x01\x00\x0a\x00\x00\x00\x00\x00\x01\x00\x02\x00\x19\x00\x1d\x00\x00\x00\x0d\x00\x00\x00\x21\x00\x00\x00\x01\x00\x02\x00\x15\x00\x0d\x00\x15\x00\x24\x00\x02\x00\x15\x00\x0d\x00\x14\x00\x0d\x00\x00\x00\x0d\x00\x18\x00\x31\x00\x32\x00\x33\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x31\x00\x32\x00\x33\x00\x0d\x00\x23\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x00\x00\x01\x00\x02\x00\x30\x00\x23\x00\x02\x00\x19\x00\x02\x00\x00\x00\x00\x00\x01\x00\x02\x00\x0b\x00\x0d\x00\x2a\x00\x00\x00\x01\x00\x02\x00\x00\x00\x01\x00\x02\x00\x0d\x00\x0d\x00\x2f\x00\x17\x00\x18\x00\x05\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x0d\x00\x0b\x00\x19\x00\x13\x00\x23\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x21\x00\x00\x00\x01\x00\x02\x00\x23\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x00\x00\x00\x00\x01\x00\x02\x00\x23\x00\x0d\x00\x30\x00\x31\x00\x2f\x00\x00\x00\x00\x00\x01\x00\x02\x00\x0d\x00\x0d\x00\x00\x00\x02\x00\x29\x00\x02\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x0d\x00\x00\x00\x19\x00\x00\x00\x23\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x00\x00\x00\x00\x01\x00\x02\x00\x23\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x00\x00\x00\x00\x01\x00\x02\x00\x23\x00\x0d\x00\x16\x00\x0c\x00\x00\x00\x01\x00\x02\x00\x14\x00\x00\x00\x0d\x00\x0d\x00\x18\x00\x00\x00\x00\x00\x00\x00\x1b\x00\x1c\x00\x0d\x00\x1e\x00\x00\x00\x00\x00\x19\x00\x00\x00\x23\x00\x1b\x00\x0d\x00\x0d\x00\x1e\x00\x00\x00\x01\x00\x02\x00\x1b\x00\x23\x00\x0d\x00\x1e\x00\x20\x00\x00\x00\x19\x00\x19\x00\x23\x00\x00\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x00\x00\x01\x00\x02\x00\x2e\x00\x00\x00\x17\x00\x00\x00\x20\x00\x33\x00\x00\x00\x1e\x00\x00\x00\x20\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x00\x00\x01\x00\x02\x00\x2e\x00\x0d\x00\x17\x00\x21\x00\x2d\x00\x33\x00\x2f\x00\x00\x00\x00\x00\x00\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x00\x00\x01\x00\x02\x00\x30\x00\x31\x00\x17\x00\x0d\x00\x26\x00\x06\x00\x00\x00\x00\x00\x08\x00\x00\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x00\x00\x01\x00\x02\x00\x00\x00\x00\x00\x17\x00\x00\x00\x00\x00\x32\x00\x04\x00\x09\x00\x01\x00\x31\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x00\x00\x01\x00\x02\x00\x02\x00\x33\x00\x17\x00\x04\x00\x04\x00\x01\x00\x04\x00\x01\x00\x15\x00\x15\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x00\x00\x01\x00\x02\x00\x31\x00\x17\x00\x17\x00\x04\x00\x15\x00\x14\x00\x06\x00\x31\x00\x0d\x00\x04\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x00\x00\x01\x00\x02\x00\x02\x00\x01\x00\x17\x00\x0d\x00\x03\x00\x33\x00\x1a\x00\x31\x00\x06\x00\x03\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x00\x00\x01\x00\x02\x00\x31\x00\x14\x00\x17\x00\x0b\x00\x01\x00\x31\x00\x15\x00\x06\x00\x04\x00\x0d\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x00\x00\x01\x00\x02\x00\x10\x00\x31\x00\x17\x00\x04\x00\x33\x00\x00\x00\x01\x00\x02\x00\x05\x00\x01\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x13\x00\x0a\x00\x02\x00\x0d\x00\x01\x00\x17\x00\x10\x00\x11\x00\x09\x00\x31\x00\x05\x00\x02\x00\x02\x00\x17\x00\x02\x00\x02\x00\x33\x00\x19\x00\x33\x00\x0b\x00\x25\x00\x31\x00\x31\x00\x08\x00\x05\x00\x05\x00\x02\x00\x05\x00\x02\x00\x02\x00\x01\x00\x21\x00\x02\x00\x01\x00\x31\x00\x31\x00\x22\x00\x03\x00\x31\x00\x06\x00\x01\x00\x25\x00\x07\x00\x31\x00\x31\x00\x31\x00\x05\x00\x29\x00\x02\x00\x1a\x00\x31\x00\x28\x00\xff\xff\xff\xff\x28\x00\xff\xff\x31\x00\x24\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x31\x00\xff\xff\xff\xff\x35\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\Line truncated
happyTable :: HappyAddr happyTable :: HappyAddr
happyTable = HappyA# "\x00\x00\x06\x00\x06\x00\x06\x00\x06\x00\x74\x00\x7d\xff\x74\x00\x17\x00\x74\x00\xd7\x00\x5e\x00\x5e\x00\x87\xff\x74\x00\x07\x01\x99\x00\xe8\x00\xb0\x00\xe4\x00\x55\x00\x9a\x00\x5f\x00\x5f\x00\xea\x00\x9b\x00\x2c\x00\x56\x00\x9c\x00\x57\x00\x9d\x00\x75\x00\x58\x00\xff\x00\x59\x00\x5a\x00\x2d\x00\xf5\x00\xe6\x00\x76\x00\x87\xff\x02\x01\x5d\x00\x02\x01\x03\x01\x5b\x00\x03\x01\x03\x00\xd0\x00\x5c\x00\xb1\x00\x8f\x00\x60\x00\x18\x00\x22\x00\x15\x00\x07\x00\x11\x01\x9e\x00\x04\x01\x9f\x00\x03\x00\x5d\x00\x99\x00\xe4\x00\x03\x00\x5d\x00\x5e\x00\x9a\x00\x99\x00\x5d\x00\x64\x00\x9b\x00\xf6\x00\x9a\x00\x9c\x00\xf8\x00\x9d\x00\x9b\x00\x99\x00\x65\x00\x9c\x00\xe8\x00\x9d\x00\x9a\x00\xf9\x00\x10\x01\xfa\x00\x9b\x00\xf8\x00\xf8\x00\x9c\x00\x74\x00\x9d\x00\xab\x00\x66\x00\x09\x01\xf5\x00\xf9\x00\xf9\x00\xfa\x00\xfa\x00\xfe\x00\x87\xff\x0e\x01\xfb\x00\x2f\x00\xab\x00\x03\x00\x5d\x00\x79\x00\xc8\x00\xe8\x00\xf5\x00\x03\x00\x5d\x00\x03\x00\xc9\x00\x75\x00\xca\x00\xf1\x00\x03\x00\xb0\x00\xb9\x00\x03\x00\x5d\x00\x76\x00\x74\x00\x74\x00\xac\x00\x87\xff\xe8\x00\x30\x00\x10\x01\x03\x00\x03\x00\x31\x00\x77\x00\xe0\x00\x32\x00\x33\x00\x03\x00\xac\x00\x34\x00\x35\x00\xc9\x00\xf0\x00\xca\x00\x36\x00\xf6\x00\x03\x00\xad\x00\xee\x00\x03\x00\x5d\x00\x5e\x00\x28\x00\xba\x00\xba\x00\xba\x00\x85\x00\xbb\x00\xbb\x00\x58\x00\x4b\x00\x59\x00\x5a\x00\xaf\x00\x8d\x00\xce\x00\xea\x00\xbc\x00\x90\x00\x91\x00\x86\x00\x4b\x00\x5b\x00\x61\x00\xcf\x00\x4b\x00\x5c\x00\x03\x00\x5d\x00\x5e\x00\xd5\x00\x92\x00\x29\x00\xb0\x00\x01\x01\xb0\x00\x90\x00\x91\x00\x61\x00\xc3\x00\xc4\x00\xc5\x00\x03\x00\x5d\x00\x5e\x00\x93\x00\x94\x00\xfe\x00\x96\x00\x92\x00\xb2\x00\x08\x00\x09\x00\x97\x00\x90\x00\x91\x00\x86\x00\x4b\x00\xc6\x00\xaa\x00\xb5\x00\x4b\x00\x4b\x00\x93\x00\x94\x00\x00\x01\x96\x00\x92\x00\xc0\x00\xc1\x00\xcb\x00\x97\x00\x90\x00\x91\x00\x61\x00\x61\x00\xc0\x00\xc1\x00\xd7\x00\x4b\x00\x4b\x00\x93\x00\x94\x00\xe1\x00\x96\x00\x92\x00\xb4\x00\x8e\x00\xd9\x00\x97\x00\x90\x00\x91\x00\x61\x00\x61\x00\x86\x00\x9f\x00\x0b\x00\x4b\x00\x0c\x00\x93\x00\x94\x00\xeb\x00\x96\x00\x92\x00\x73\x00\x62\x00\x7b\x00\x97\x00\x90\x00\x91\x00\x61\x00\x0d\x00\x7c\x00\x0e\x00\x7d\x00\xe4\x00\x81\x00\x93\x00\x94\x00\xdc\x00\x96\x00\x92\x00\x66\x00\x82\x00\x6c\x00\x97\x00\x90\x00\x91\x00\x69\x00\xe5\x00\x87\x00\xf2\x00\x42\x00\x88\x00\xe6\x00\x93\x00\x94\x00\xb7\x00\x96\x00\x92\x00\x69\x00\x37\x00\x38\x00\x97\x00\x90\x00\x91\x00\xf3\x00\x08\x01\xa9\x00\x4b\x00\x90\x00\x91\x00\x6b\x00\x93\x00\x94\x00\x95\x00\x96\x00\x92\x00\x39\x00\x3a\x00\x6a\x00\x97\x00\xdf\x00\x92\x00\x6b\x00\x3b\x00\x3c\x00\xf2\x00\x90\x00\x91\x00\x3d\x00\x93\x00\x94\x00\xa4\x00\x96\x00\x90\x00\x91\x00\x93\x00\xdb\x00\x97\x00\x96\x00\x92\x00\xf3\x00\xf4\x00\x4b\x00\x97\x00\x03\x00\x2b\x00\x92\x00\x04\x00\x3f\x00\x4b\x00\x25\x00\x4b\x00\x26\x00\xe2\x00\x21\x00\xb6\x00\x96\x00\x4b\x00\x4c\x00\x4d\x00\xd1\x00\x97\x00\x7e\x00\x96\x00\x67\x00\x1b\x00\x1c\x00\x1e\x00\x97\x00\x16\x00\x4e\x00\x4f\x00\xf0\x00\x51\x00\x52\x00\x4b\x00\x4c\x00\x4d\x00\x0e\x00\x0f\x00\x53\x00\x10\x00\x11\x00\x5d\x00\x0c\x01\x0b\x01\x0d\x01\x03\x00\x4e\x00\x4f\x00\xcc\x00\x51\x00\x52\x00\x4b\x00\x4c\x00\x4d\x00\x0e\x01\x5e\x00\x53\x00\x8c\xff\x06\x01\x08\x01\xfc\x00\xfd\x00\xb0\x00\xb0\x00\x4e\x00\x4f\x00\xc1\x00\x51\x00\x52\x00\x4b\x00\x4c\x00\x4d\x00\x8c\xff\x03\x00\x53\x00\xce\x00\xb0\x00\xbe\x00\xee\x00\x03\x00\x5e\x00\xd3\x00\x4e\x00\x4f\x00\xc2\x00\x51\x00\x52\x00\x4b\x00\x4c\x00\x4d\x00\xed\x00\xd4\x00\x53\x00\xd5\x00\xd9\x00\xdb\x00\xde\x00\xdf\x00\x03\x00\xb4\x00\x4e\x00\x4f\x00\x80\x00\x51\x00\x52\x00\x4b\x00\x4c\x00\x4d\x00\xbe\x00\x03\x00\x53\x00\xbf\x00\xcb\x00\x03\x00\xb0\x00\x8b\x00\x8a\x00\x8c\x00\x4e\x00\x4f\x00\xa6\x00\x51\x00\x52\x00\x4b\x00\x4c\x00\x4d\x00\x8e\x00\x03\x00\x53\x00\xa1\x00\x5e\x00\xa2\x00\xa3\x00\xa4\x00\xa6\x00\xa9\x00\x4e\x00\x4f\x00\xa7\x00\x51\x00\x52\x00\x7f\x00\x4c\x00\x4d\x00\x6e\x00\x03\x00\x53\x00\x6f\x00\x71\x00\x70\x00\x72\x00\x73\x00\x7a\x00\x7b\x00\x4e\x00\x4f\x00\x80\x00\x51\x00\x52\x00\x4b\x00\x4c\x00\x4d\x00\x86\x00\x5e\x00\x53\x00\x03\x00\x03\x00\x46\x00\x44\x00\x45\x00\x47\x00\x48\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x4b\x00\x4c\x00\x4d\x00\x49\x00\x4a\x00\x53\x00\x4b\x00\x03\x00\x4b\x00\x4c\x00\x4d\x00\x3f\x00\x41\x00\x4e\x00\x4f\x00\x68\x00\x51\x00\x52\x00\x42\x00\x37\x00\x2b\x00\x4e\x00\x28\x00\x53\x00\x83\x00\x52\x00\x03\x00\x03\x00\x24\x00\x03\x00\x25\x00\x53\x00\x21\x00\x1e\x00\x20\x00\x1a\x00\x14\x00\x03\x00\x03\x00\x1b\x00\x13\x00\x03\x00\x06\x00\x15\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\xff\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"# happyTable = HappyA# "\x00\x00\x06\x00\x06\x00\x06\x00\x06\x00\x76\x00\x76\x00\x76\x00\x17\x00\x76\x00\x5e\x00\xf8\x00\x0d\x01\xf9\x00\x84\xff\x9c\x00\xeb\x00\xed\x00\x76\x00\x55\x00\x9d\x00\x5f\x00\x03\x00\x12\x01\x9e\x00\x04\x00\x56\x00\x9f\x00\x57\x00\xa0\x00\x7a\xff\x58\x00\x77\x00\x59\x00\x5a\x00\xf8\x00\xbd\x00\xf9\x00\x7b\x00\xbe\x00\x78\x00\x06\x01\x84\xff\x06\x01\x07\x01\x5b\x00\x07\x01\xfa\x00\xed\x00\x5c\x00\x91\x00\xb4\x00\xd3\x00\x18\x00\x22\x00\x15\x00\x07\x00\x15\x01\xa1\x00\x08\x01\xa2\x00\x03\x00\x5d\x00\x5e\x00\x5d\x00\x03\x00\x5d\x00\x5e\x00\x9c\x00\xe7\x00\x03\x00\x14\x01\x03\x00\x9d\x00\x9c\x00\x89\x00\xbc\x00\x9e\x00\x8a\x00\x9d\x00\x9f\x00\xfc\x00\xa0\x00\x9e\x00\x9c\x00\x0b\x01\x9f\x00\xeb\x00\xa0\x00\x9d\x00\xfd\x00\x14\x01\xfe\x00\x9e\x00\xfc\x00\xfc\x00\x9f\x00\x84\xff\xa0\x00\x64\x00\xeb\x00\x08\x00\x09\x00\xfd\x00\xfd\x00\xfe\x00\xfe\x00\x5e\x00\x65\x00\x28\x00\xff\x00\xbd\x00\x76\x00\x5d\x00\x03\x00\x5d\x00\x5e\x00\x2f\x00\x5f\x00\xae\x00\x03\x00\x5d\x00\x5e\x00\x66\x00\x67\x00\x84\xff\xae\x00\x03\x00\xcb\x00\x5e\x00\x03\x00\x5d\x00\x5e\x00\x76\x00\xcc\x00\xeb\x00\xcd\x00\x4b\x00\x77\x00\x29\x00\x03\x00\x03\x00\x5e\x00\x5e\x00\x30\x00\x03\x00\x78\x00\x60\x00\x31\x00\x02\x01\x05\x01\x32\x00\x33\x00\xf4\x00\xaf\x00\x34\x00\x35\x00\x79\x00\xc3\x00\xc4\x00\x36\x00\xaf\x00\x03\x00\xe3\x00\xbd\x00\x4b\x00\xf8\x00\xbe\x00\xf9\x00\xb3\x00\xb0\x00\x03\x00\x5d\x00\x5e\x00\x87\x00\x2c\x00\xbf\x00\x58\x00\x61\x00\x59\x00\x5a\x00\xcc\x00\xf3\x00\xcd\x00\xb2\x00\x2d\x00\x6a\x00\x92\x00\x93\x00\x94\x00\xb3\x00\x5b\x00\x4b\x00\xda\x00\x4b\x00\x5c\x00\x92\x00\x93\x00\x94\x00\xf1\x00\x95\x00\xb3\x00\xfa\x00\xd1\x00\xb3\x00\xce\x00\xac\x00\xe2\x00\x4b\x00\x95\x00\x6c\x00\x03\x00\x5d\x00\x5e\x00\x96\x00\x97\x00\x02\x01\x99\x00\x03\x00\x5d\x00\x5e\x00\x61\x00\x9a\x00\x96\x00\x97\x00\x04\x01\x99\x00\x92\x00\x93\x00\x94\x00\xd8\x00\x9a\x00\xd2\x00\xb5\x00\xa2\x00\x4b\x00\x92\x00\x93\x00\x94\x00\x88\x00\x95\x00\xad\x00\xc6\x00\xc7\x00\xc8\x00\x92\x00\x93\x00\x94\x00\x61\x00\x95\x00\xda\x00\xc3\x00\xc4\x00\x8f\x00\x96\x00\x97\x00\xe4\x00\x99\x00\x95\x00\x88\x00\xb7\x00\xc9\x00\x9a\x00\x96\x00\x97\x00\xee\x00\x99\x00\xf5\x00\x92\x00\x93\x00\x94\x00\x9a\x00\x96\x00\x97\x00\xdf\x00\x99\x00\x4b\x00\x92\x00\x93\x00\x94\x00\x9a\x00\x95\x00\xf6\x00\x0c\x01\xdc\x00\xb8\x00\x92\x00\x93\x00\x94\x00\x61\x00\x95\x00\x88\x00\x74\x00\x7d\x00\x7e\x00\x96\x00\x97\x00\xba\x00\x99\x00\x95\x00\x7f\x00\x90\x00\x83\x00\x9a\x00\x96\x00\x97\x00\x98\x00\x99\x00\x6a\x00\x92\x00\x93\x00\x94\x00\x9a\x00\x96\x00\x97\x00\xa7\x00\x99\x00\x4b\x00\x92\x00\x93\x00\x94\x00\x9a\x00\x95\x00\x84\x00\x3f\x00\x92\x00\x93\x00\x94\x00\x6b\x00\x6d\x00\x61\x00\x95\x00\x6c\x00\x4b\x00\x4b\x00\x42\x00\x96\x00\xde\x00\x95\x00\x99\x00\x37\x00\x4b\x00\x75\x00\x38\x00\x9a\x00\xe5\x00\x61\x00\x61\x00\x99\x00\x4b\x00\x4c\x00\x4d\x00\xd4\x00\x9a\x00\xb9\x00\x99\x00\xe7\x00\x39\x00\x62\x00\x67\x00\x9a\x00\x3a\x00\x4e\x00\x4f\x00\xf3\x00\x51\x00\x52\x00\x4b\x00\x4c\x00\x4d\x00\x03\x01\x3b\x00\x53\x00\x3c\x00\xe7\x00\xe9\x00\x4b\x00\x0b\x00\x3d\x00\x0c\x00\x4e\x00\x4f\x00\xcf\x00\x51\x00\x52\x00\x4b\x00\x4c\x00\x4d\x00\xe8\x00\x80\x00\x53\x00\xf5\x00\x0d\x00\xe9\x00\x0e\x00\x2b\x00\x4b\x00\x25\x00\x4e\x00\x4f\x00\xc4\x00\x51\x00\x52\x00\x4b\x00\x4c\x00\x4d\x00\xf6\x00\xf7\x00\x53\x00\x68\x00\x26\x00\x21\x00\x1b\x00\x1c\x00\x1e\x00\x16\x00\x4e\x00\x4f\x00\xc5\x00\x51\x00\x52\x00\x4b\x00\x4c\x00\x4d\x00\x0e\x00\x0f\x00\x53\x00\x10\x00\x11\x00\x5d\x00\x10\x01\x0f\x01\x11\x01\x03\x00\x4e\x00\x4f\x00\x82\x00\x51\x00\x52\x00\x4b\x00\x4c\x00\x4d\x00\x12\x01\x5e\x00\x53\x00\x89\xff\x0a\x01\x0c\x01\x00\x01\x01\x01\xb3\x00\xb3\x00\x4e\x00\x4f\x00\xa9\x00\x51\x00\x52\x00\x4b\x00\x4c\x00\x4d\x00\x03\x00\xf0\x00\x53\x00\x89\xff\xb3\x00\xc1\x00\xf1\x00\x03\x00\xd1\x00\xd6\x00\x4e\x00\x4f\x00\xaa\x00\x51\x00\x52\x00\x81\x00\x4c\x00\x4d\x00\xd7\x00\xd8\x00\x53\x00\xde\x00\xdc\x00\x5e\x00\xe2\x00\x03\x00\xe1\x00\xb7\x00\x4e\x00\x4f\x00\x82\x00\x51\x00\x52\x00\x4b\x00\x4c\x00\x4d\x00\x03\x00\xc1\x00\x53\x00\xc2\x00\xce\x00\x03\x00\xb3\x00\x8d\x00\x8c\x00\x8e\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x4b\x00\x4c\x00\x4d\x00\x90\x00\x03\x00\x53\x00\xa4\x00\x5e\x00\x4b\x00\x4c\x00\x4d\x00\xa5\x00\xa6\x00\x4e\x00\x4f\x00\x69\x00\x51\x00\x52\x00\xa7\x00\xa9\x00\xac\x00\x4e\x00\x6f\x00\x53\x00\x85\x00\x52\x00\x70\x00\x03\x00\x71\x00\x72\x00\x73\x00\x53\x00\x74\x00\x7c\x00\x5e\x00\x7d\x00\x5e\x00\x88\x00\x44\x00\x03\x00\x03\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x3f\x00\x41\x00\x42\x00\x37\x00\x03\x00\x03\x00\x2b\x00\x24\x00\x03\x00\x25\x00\x21\x00\x28\x00\x1e\x00\x03\x00\x03\x00\x03\x00\x1b\x00\x20\x00\x13\x00\x15\x00\x03\x00\x1a\x00\x00\x00\x00\x00\x14\x00\x00\x00\x03\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\xff\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\Line truncated
happyReduceArr = array (1, 132) [ happyReduceArr = array (1, 135) [
(1 , happyReduce_1), (1 , happyReduce_1),
(2 , happyReduce_2), (2 , happyReduce_2),
(3 , happyReduce_3), (3 , happyReduce_3),
@@ -486,10 +486,13 @@ happyReduceArr = array (1, 132) [
(129 , happyReduce_129), (129 , happyReduce_129),
(130 , happyReduce_130), (130 , happyReduce_130),
(131 , happyReduce_131), (131 , happyReduce_131),
(132 , happyReduce_132) (132 , happyReduce_132),
(133 , happyReduce_133),
(134 , happyReduce_134),
(135 , happyReduce_135)
] ]
happy_n_terms = 53 :: Int happy_n_terms = 54 :: Int
happy_n_nonterms = 53 :: Int happy_n_nonterms = 53 :: Int
happyReduce_1 = happySpecReduce_1 0# happyReduction_1 happyReduce_1 = happySpecReduce_1 0# happyReduction_1
@@ -1089,8 +1092,16 @@ happyReduction_64 happy_x_1
(TStr (TStr
) )
happyReduce_65 = happySpecReduce_3 26# happyReduction_65 happyReduce_65 = happySpecReduce_2 25# happyReduction_65
happyReduction_65 happy_x_3 happyReduction_65 happy_x_2
happy_x_1
= case happyOut6 happy_x_2 of { happy_var_2 ->
happyIn29
(TInts happy_var_2
)}
happyReduce_66 = happySpecReduce_3 26# happyReduction_66
happyReduction_66 happy_x_3
happy_x_2 happy_x_2
happy_x_1 happy_x_1
= case happyOut38 happy_x_1 of { happy_var_1 -> = case happyOut38 happy_x_1 of { happy_var_1 ->
@@ -1099,22 +1110,22 @@ happyReduction_65 happy_x_3
(Lbg happy_var_1 happy_var_3 (Lbg happy_var_1 happy_var_3
)}} )}}
happyReduce_66 = happySpecReduce_1 27# happyReduction_66 happyReduce_67 = happySpecReduce_1 27# happyReduction_67
happyReduction_66 happy_x_1 happyReduction_67 happy_x_1
= case happyOut39 happy_x_1 of { happy_var_1 -> = case happyOut39 happy_x_1 of { happy_var_1 ->
happyIn31 happyIn31
(Arg happy_var_1 (Arg happy_var_1
)} )}
happyReduce_67 = happySpecReduce_1 27# happyReduction_67 happyReduce_68 = happySpecReduce_1 27# happyReduction_68
happyReduction_67 happy_x_1 happyReduction_68 happy_x_1
= case happyOut17 happy_x_1 of { happy_var_1 -> = case happyOut17 happy_x_1 of { happy_var_1 ->
happyIn31 happyIn31
(I happy_var_1 (I happy_var_1
)} )}
happyReduce_68 = happyReduce 4# 27# happyReduction_68 happyReduce_69 = happyReduce 4# 27# happyReduction_69
happyReduction_68 (happy_x_4 `HappyStk` happyReduction_69 (happy_x_4 `HappyStk`
happy_x_3 `HappyStk` happy_x_3 `HappyStk`
happy_x_2 `HappyStk` happy_x_2 `HappyStk`
happy_x_1 `HappyStk` happy_x_1 `HappyStk`
@@ -1125,16 +1136,16 @@ happyReduction_68 (happy_x_4 `HappyStk`
(Con happy_var_2 (reverse happy_var_3) (Con happy_var_2 (reverse happy_var_3)
) `HappyStk` happyRest}} ) `HappyStk` happyRest}}
happyReduce_69 = happySpecReduce_2 27# happyReduction_69 happyReduce_70 = happySpecReduce_2 27# happyReduction_70
happyReduction_69 happy_x_2 happyReduction_70 happy_x_2
happy_x_1 happy_x_1
= case happyOut4 happy_x_2 of { happy_var_2 -> = case happyOut4 happy_x_2 of { happy_var_2 ->
happyIn31 happyIn31
(LI happy_var_2 (LI happy_var_2
)} )}
happyReduce_70 = happySpecReduce_3 27# happyReduction_70 happyReduce_71 = happySpecReduce_3 27# happyReduction_71
happyReduction_70 happy_x_3 happyReduction_71 happy_x_3
happy_x_2 happy_x_2
happy_x_1 happy_x_1
= case happyOut47 happy_x_2 of { happy_var_2 -> = case happyOut47 happy_x_2 of { happy_var_2 ->
@@ -1142,22 +1153,29 @@ happyReduction_70 happy_x_3
(R happy_var_2 (R happy_var_2
)} )}
happyReduce_71 = happySpecReduce_1 27# happyReduction_71 happyReduce_72 = happySpecReduce_1 27# happyReduction_72
happyReduction_71 happy_x_1 happyReduction_72 happy_x_1
= case happyOut6 happy_x_1 of { happy_var_1 ->
happyIn31
(EInt happy_var_1
)}
happyReduce_73 = happySpecReduce_1 27# happyReduction_73
happyReduction_73 happy_x_1
= case happyOut34 happy_x_1 of { happy_var_1 -> = case happyOut34 happy_x_1 of { happy_var_1 ->
happyIn31 happyIn31
(K happy_var_1 (K happy_var_1
)} )}
happyReduce_72 = happySpecReduce_2 27# happyReduction_72 happyReduce_74 = happySpecReduce_2 27# happyReduction_74
happyReduction_72 happy_x_2 happyReduction_74 happy_x_2
happy_x_1 happy_x_1
= happyIn31 = happyIn31
(E (E
) )
happyReduce_73 = happySpecReduce_3 27# happyReduction_73 happyReduce_75 = happySpecReduce_3 27# happyReduction_75
happyReduction_73 happy_x_3 happyReduction_75 happy_x_3
happy_x_2 happy_x_2
happy_x_1 happy_x_1
= case happyOut33 happy_x_2 of { happy_var_2 -> = case happyOut33 happy_x_2 of { happy_var_2 ->
@@ -1165,8 +1183,8 @@ happyReduction_73 happy_x_3
(happy_var_2 (happy_var_2
)} )}
happyReduce_74 = happySpecReduce_3 28# happyReduction_74 happyReduce_76 = happySpecReduce_3 28# happyReduction_76
happyReduction_74 happy_x_3 happyReduction_76 happy_x_3
happy_x_2 happy_x_2
happy_x_1 happy_x_1
= case happyOut31 happy_x_1 of { happy_var_1 -> = case happyOut31 happy_x_1 of { happy_var_1 ->
@@ -1175,8 +1193,8 @@ happyReduction_74 happy_x_3
(P happy_var_1 happy_var_3 (P happy_var_1 happy_var_3
)}} )}}
happyReduce_75 = happyReduce 5# 28# happyReduction_75 happyReduce_77 = happyReduce 5# 28# happyReduction_77
happyReduction_75 (happy_x_5 `HappyStk` happyReduction_77 (happy_x_5 `HappyStk`
happy_x_4 `HappyStk` happy_x_4 `HappyStk`
happy_x_3 `HappyStk` happy_x_3 `HappyStk`
happy_x_2 `HappyStk` happy_x_2 `HappyStk`
@@ -1188,8 +1206,8 @@ happyReduction_75 (happy_x_5 `HappyStk`
(T happy_var_2 happy_var_4 (T happy_var_2 happy_var_4
) `HappyStk` happyRest}} ) `HappyStk` happyRest}}
happyReduce_76 = happySpecReduce_3 28# happyReduction_76 happyReduce_78 = happySpecReduce_3 28# happyReduction_78
happyReduction_76 happy_x_3 happyReduction_78 happy_x_3
happy_x_2 happy_x_2
happy_x_1 happy_x_1
= case happyOut32 happy_x_1 of { happy_var_1 -> = case happyOut32 happy_x_1 of { happy_var_1 ->
@@ -1198,8 +1216,8 @@ happyReduction_76 happy_x_3
(S happy_var_1 happy_var_3 (S happy_var_1 happy_var_3
)}} )}}
happyReduce_77 = happyReduce 4# 28# happyReduction_77 happyReduce_79 = happyReduce 4# 28# happyReduction_79
happyReduction_77 (happy_x_4 `HappyStk` happyReduction_79 (happy_x_4 `HappyStk`
happy_x_3 `HappyStk` happy_x_3 `HappyStk`
happy_x_2 `HappyStk` happy_x_2 `HappyStk`
happy_x_1 `HappyStk` happy_x_1 `HappyStk`
@@ -1209,15 +1227,15 @@ happyReduction_77 (happy_x_4 `HappyStk`
(FV (reverse happy_var_3) (FV (reverse happy_var_3)
) `HappyStk` happyRest} ) `HappyStk` happyRest}
happyReduce_78 = happySpecReduce_1 28# happyReduction_78 happyReduce_80 = happySpecReduce_1 28# happyReduction_80
happyReduction_78 happy_x_1 happyReduction_80 happy_x_1
= case happyOut31 happy_x_1 of { happy_var_1 -> = case happyOut31 happy_x_1 of { happy_var_1 ->
happyIn32 happyIn32
(happy_var_1 (happy_var_1
)} )}
happyReduce_79 = happySpecReduce_3 29# happyReduction_79 happyReduce_81 = happySpecReduce_3 29# happyReduction_81
happyReduction_79 happy_x_3 happyReduction_81 happy_x_3
happy_x_2 happy_x_2
happy_x_1 happy_x_1
= case happyOut33 happy_x_1 of { happy_var_1 -> = case happyOut33 happy_x_1 of { happy_var_1 ->
@@ -1226,22 +1244,22 @@ happyReduction_79 happy_x_3
(C happy_var_1 happy_var_3 (C happy_var_1 happy_var_3
)}} )}}
happyReduce_80 = happySpecReduce_1 29# happyReduction_80 happyReduce_82 = happySpecReduce_1 29# happyReduction_82
happyReduction_80 happy_x_1 happyReduction_82 happy_x_1
= case happyOut32 happy_x_1 of { happy_var_1 -> = case happyOut32 happy_x_1 of { happy_var_1 ->
happyIn33 happyIn33
(happy_var_1 (happy_var_1
)} )}
happyReduce_81 = happySpecReduce_1 30# happyReduction_81 happyReduce_83 = happySpecReduce_1 30# happyReduction_83
happyReduction_81 happy_x_1 happyReduction_83 happy_x_1
= case happyOut5 happy_x_1 of { happy_var_1 -> = case happyOut5 happy_x_1 of { happy_var_1 ->
happyIn34 happyIn34
(KS happy_var_1 (KS happy_var_1
)} )}
happyReduce_82 = happyReduce 7# 30# happyReduction_82 happyReduce_84 = happyReduce 7# 30# happyReduction_84
happyReduction_82 (happy_x_7 `HappyStk` happyReduction_84 (happy_x_7 `HappyStk`
happy_x_6 `HappyStk` happy_x_6 `HappyStk`
happy_x_5 `HappyStk` happy_x_5 `HappyStk`
happy_x_4 `HappyStk` happy_x_4 `HappyStk`
@@ -1255,8 +1273,8 @@ happyReduction_82 (happy_x_7 `HappyStk`
(KP (reverse happy_var_3) happy_var_5 (KP (reverse happy_var_3) happy_var_5
) `HappyStk` happyRest}} ) `HappyStk` happyRest}}
happyReduce_83 = happySpecReduce_3 31# happyReduction_83 happyReduce_85 = happySpecReduce_3 31# happyReduction_85
happyReduction_83 happy_x_3 happyReduction_85 happy_x_3
happy_x_2 happy_x_2
happy_x_1 happy_x_1
= case happyOut38 happy_x_1 of { happy_var_1 -> = case happyOut38 happy_x_1 of { happy_var_1 ->
@@ -1265,8 +1283,8 @@ happyReduction_83 happy_x_3
(Ass happy_var_1 happy_var_3 (Ass happy_var_1 happy_var_3
)}} )}}
happyReduce_84 = happySpecReduce_3 32# happyReduction_84 happyReduce_86 = happySpecReduce_3 32# happyReduction_86
happyReduction_84 happy_x_3 happyReduction_86 happy_x_3
happy_x_2 happy_x_2
happy_x_1 happy_x_1
= case happyOut55 happy_x_1 of { happy_var_1 -> = case happyOut55 happy_x_1 of { happy_var_1 ->
@@ -1275,8 +1293,8 @@ happyReduction_84 happy_x_3
(Cas (reverse happy_var_1) happy_var_3 (Cas (reverse happy_var_1) happy_var_3
)}} )}}
happyReduce_85 = happySpecReduce_3 33# happyReduction_85 happyReduce_87 = happySpecReduce_3 33# happyReduction_87
happyReduction_85 happy_x_3 happyReduction_87 happy_x_3
happy_x_2 happy_x_2
happy_x_1 happy_x_1
= case happyOut52 happy_x_1 of { happy_var_1 -> = case happyOut52 happy_x_1 of { happy_var_1 ->
@@ -1285,23 +1303,23 @@ happyReduction_85 happy_x_3
(Var (reverse happy_var_1) (reverse happy_var_3) (Var (reverse happy_var_1) (reverse happy_var_3)
)}} )}}
happyReduce_86 = happySpecReduce_1 34# happyReduction_86 happyReduce_88 = happySpecReduce_1 34# happyReduction_88
happyReduction_86 happy_x_1 happyReduction_88 happy_x_1
= case happyOut4 happy_x_1 of { happy_var_1 -> = case happyOut4 happy_x_1 of { happy_var_1 ->
happyIn38 happyIn38
(L happy_var_1 (L happy_var_1
)} )}
happyReduce_87 = happySpecReduce_2 34# happyReduction_87 happyReduce_89 = happySpecReduce_2 34# happyReduction_89
happyReduction_87 happy_x_2 happyReduction_89 happy_x_2
happy_x_1 happy_x_1
= case happyOut6 happy_x_2 of { happy_var_2 -> = case happyOut6 happy_x_2 of { happy_var_2 ->
happyIn38 happyIn38
(LV happy_var_2 (LV happy_var_2
)} )}
happyReduce_88 = happySpecReduce_3 35# happyReduction_88 happyReduce_90 = happySpecReduce_3 35# happyReduction_90
happyReduction_88 happy_x_3 happyReduction_90 happy_x_3
happy_x_2 happy_x_2
happy_x_1 happy_x_1
= case happyOut4 happy_x_1 of { happy_var_1 -> = case happyOut4 happy_x_1 of { happy_var_1 ->
@@ -1310,8 +1328,8 @@ happyReduction_88 happy_x_3
(A happy_var_1 happy_var_3 (A happy_var_1 happy_var_3
)}} )}}
happyReduce_89 = happyReduce 5# 35# happyReduction_89 happyReduce_91 = happyReduce 5# 35# happyReduction_91
happyReduction_89 (happy_x_5 `HappyStk` happyReduction_91 (happy_x_5 `HappyStk`
happy_x_4 `HappyStk` happy_x_4 `HappyStk`
happy_x_3 `HappyStk` happy_x_3 `HappyStk`
happy_x_2 `HappyStk` happy_x_2 `HappyStk`
@@ -1324,8 +1342,8 @@ happyReduction_89 (happy_x_5 `HappyStk`
(AB happy_var_1 happy_var_3 happy_var_5 (AB happy_var_1 happy_var_3 happy_var_5
) `HappyStk` happyRest}}} ) `HappyStk` happyRest}}}
happyReduce_90 = happyReduce 4# 36# happyReduction_90 happyReduce_92 = happyReduce 4# 36# happyReduction_92
happyReduction_90 (happy_x_4 `HappyStk` happyReduction_92 (happy_x_4 `HappyStk`
happy_x_3 `HappyStk` happy_x_3 `HappyStk`
happy_x_2 `HappyStk` happy_x_2 `HappyStk`
happy_x_1 `HappyStk` happy_x_1 `HappyStk`
@@ -1336,21 +1354,21 @@ happyReduction_90 (happy_x_4 `HappyStk`
(PC happy_var_2 (reverse happy_var_3) (PC happy_var_2 (reverse happy_var_3)
) `HappyStk` happyRest}} ) `HappyStk` happyRest}}
happyReduce_91 = happySpecReduce_1 36# happyReduction_91 happyReduce_93 = happySpecReduce_1 36# happyReduction_93
happyReduction_91 happy_x_1 happyReduction_93 happy_x_1
= case happyOut4 happy_x_1 of { happy_var_1 -> = case happyOut4 happy_x_1 of { happy_var_1 ->
happyIn40 happyIn40
(PV happy_var_1 (PV happy_var_1
)} )}
happyReduce_92 = happySpecReduce_1 36# happyReduction_92 happyReduce_94 = happySpecReduce_1 36# happyReduction_94
happyReduction_92 happy_x_1 happyReduction_94 happy_x_1
= happyIn40 = happyIn40
(PW (PW
) )
happyReduce_93 = happySpecReduce_3 36# happyReduction_93 happyReduce_95 = happySpecReduce_3 36# happyReduction_95
happyReduction_93 happy_x_3 happyReduction_95 happy_x_3
happy_x_2 happy_x_2
happy_x_1 happy_x_1
= case happyOut54 happy_x_2 of { happy_var_2 -> = case happyOut54 happy_x_2 of { happy_var_2 ->
@@ -1358,8 +1376,15 @@ happyReduction_93 happy_x_3
(PR happy_var_2 (PR happy_var_2
)} )}
happyReduce_94 = happySpecReduce_3 37# happyReduction_94 happyReduce_96 = happySpecReduce_1 36# happyReduction_96
happyReduction_94 happy_x_3 happyReduction_96 happy_x_1
= case happyOut6 happy_x_1 of { happy_var_1 ->
happyIn40
(PI happy_var_1
)}
happyReduce_97 = happySpecReduce_3 37# happyReduction_97
happyReduction_97 happy_x_3
happy_x_2 happy_x_2
happy_x_1 happy_x_1
= case happyOut38 happy_x_1 of { happy_var_1 -> = case happyOut38 happy_x_1 of { happy_var_1 ->
@@ -1368,13 +1393,13 @@ happyReduction_94 happy_x_3
(PAss happy_var_1 happy_var_3 (PAss happy_var_1 happy_var_3
)}} )}}
happyReduce_95 = happySpecReduce_0 38# happyReduction_95 happyReduce_98 = happySpecReduce_0 38# happyReduction_98
happyReduction_95 = happyIn42 happyReduction_98 = happyIn42
([] ([]
) )
happyReduce_96 = happySpecReduce_3 38# happyReduction_96 happyReduce_99 = happySpecReduce_3 38# happyReduction_99
happyReduction_96 happy_x_3 happyReduction_99 happy_x_3
happy_x_2 happy_x_2
happy_x_1 happy_x_1
= case happyOut42 happy_x_1 of { happy_var_1 -> = case happyOut42 happy_x_1 of { happy_var_1 ->
@@ -1383,13 +1408,13 @@ happyReduction_96 happy_x_3
(flip (:) happy_var_1 happy_var_2 (flip (:) happy_var_1 happy_var_2
)}} )}}
happyReduce_97 = happySpecReduce_0 39# happyReduction_97 happyReduce_100 = happySpecReduce_0 39# happyReduction_100
happyReduction_97 = happyIn43 happyReduction_100 = happyIn43
([] ([]
) )
happyReduce_98 = happySpecReduce_3 39# happyReduction_98 happyReduce_101 = happySpecReduce_3 39# happyReduction_101
happyReduction_98 happy_x_3 happyReduction_101 happy_x_3
happy_x_2 happy_x_2
happy_x_1 happy_x_1
= case happyOut43 happy_x_1 of { happy_var_1 -> = case happyOut43 happy_x_1 of { happy_var_1 ->
@@ -1398,20 +1423,20 @@ happyReduction_98 happy_x_3
(flip (:) happy_var_1 happy_var_2 (flip (:) happy_var_1 happy_var_2
)}} )}}
happyReduce_99 = happySpecReduce_0 40# happyReduction_99 happyReduce_102 = happySpecReduce_0 40# happyReduction_102
happyReduction_99 = happyIn44 happyReduction_102 = happyIn44
([] ([]
) )
happyReduce_100 = happySpecReduce_1 40# happyReduction_100 happyReduce_103 = happySpecReduce_1 40# happyReduction_103
happyReduction_100 happy_x_1 happyReduction_103 happy_x_1
= case happyOut15 happy_x_1 of { happy_var_1 -> = case happyOut15 happy_x_1 of { happy_var_1 ->
happyIn44 happyIn44
((:[]) happy_var_1 ((:[]) happy_var_1
)} )}
happyReduce_101 = happySpecReduce_3 40# happyReduction_101 happyReduce_104 = happySpecReduce_3 40# happyReduction_104
happyReduction_101 happy_x_3 happyReduction_104 happy_x_3
happy_x_2 happy_x_2
happy_x_1 happy_x_1
= case happyOut15 happy_x_1 of { happy_var_1 -> = case happyOut15 happy_x_1 of { happy_var_1 ->
@@ -1420,13 +1445,13 @@ happyReduction_101 happy_x_3
((:) happy_var_1 happy_var_3 ((:) happy_var_1 happy_var_3
)}} )}}
happyReduce_102 = happySpecReduce_0 41# happyReduction_102 happyReduce_105 = happySpecReduce_0 41# happyReduction_105
happyReduction_102 = happyIn45 happyReduction_105 = happyIn45
([] ([]
) )
happyReduce_103 = happySpecReduce_2 41# happyReduction_103 happyReduce_106 = happySpecReduce_2 41# happyReduction_106
happyReduction_103 happy_x_2 happyReduction_106 happy_x_2
happy_x_1 happy_x_1
= case happyOut45 happy_x_1 of { happy_var_1 -> = case happyOut45 happy_x_1 of { happy_var_1 ->
case happyOut29 happy_x_2 of { happy_var_2 -> case happyOut29 happy_x_2 of { happy_var_2 ->
@@ -1434,13 +1459,13 @@ happyReduction_103 happy_x_2
(flip (:) happy_var_1 happy_var_2 (flip (:) happy_var_1 happy_var_2
)}} )}}
happyReduce_104 = happySpecReduce_0 42# happyReduction_104 happyReduce_107 = happySpecReduce_0 42# happyReduction_107
happyReduction_104 = happyIn46 happyReduction_107 = happyIn46
([] ([]
) )
happyReduce_105 = happySpecReduce_2 42# happyReduction_105 happyReduce_108 = happySpecReduce_2 42# happyReduction_108
happyReduction_105 happy_x_2 happyReduction_108 happy_x_2
happy_x_1 happy_x_1
= case happyOut46 happy_x_1 of { happy_var_1 -> = case happyOut46 happy_x_1 of { happy_var_1 ->
case happyOut17 happy_x_2 of { happy_var_2 -> case happyOut17 happy_x_2 of { happy_var_2 ->
@@ -1448,20 +1473,20 @@ happyReduction_105 happy_x_2
(flip (:) happy_var_1 happy_var_2 (flip (:) happy_var_1 happy_var_2
)}} )}}
happyReduce_106 = happySpecReduce_0 43# happyReduction_106 happyReduce_109 = happySpecReduce_0 43# happyReduction_109
happyReduction_106 = happyIn47 happyReduction_109 = happyIn47
([] ([]
) )
happyReduce_107 = happySpecReduce_1 43# happyReduction_107 happyReduce_110 = happySpecReduce_1 43# happyReduction_110
happyReduction_107 happy_x_1 happyReduction_110 happy_x_1
= case happyOut35 happy_x_1 of { happy_var_1 -> = case happyOut35 happy_x_1 of { happy_var_1 ->
happyIn47 happyIn47
((:[]) happy_var_1 ((:[]) happy_var_1
)} )}
happyReduce_108 = happySpecReduce_3 43# happyReduction_108 happyReduce_111 = happySpecReduce_3 43# happyReduction_111
happyReduction_108 happy_x_3 happyReduction_111 happy_x_3
happy_x_2 happy_x_2
happy_x_1 happy_x_1
= case happyOut35 happy_x_1 of { happy_var_1 -> = case happyOut35 happy_x_1 of { happy_var_1 ->
@@ -1470,20 +1495,20 @@ happyReduction_108 happy_x_3
((:) happy_var_1 happy_var_3 ((:) happy_var_1 happy_var_3
)}} )}}
happyReduce_109 = happySpecReduce_0 44# happyReduction_109 happyReduce_112 = happySpecReduce_0 44# happyReduction_112
happyReduction_109 = happyIn48 happyReduction_112 = happyIn48
([] ([]
) )
happyReduce_110 = happySpecReduce_1 44# happyReduction_110 happyReduce_113 = happySpecReduce_1 44# happyReduction_113
happyReduction_110 happy_x_1 happyReduction_113 happy_x_1
= case happyOut39 happy_x_1 of { happy_var_1 -> = case happyOut39 happy_x_1 of { happy_var_1 ->
happyIn48 happyIn48
((:[]) happy_var_1 ((:[]) happy_var_1
)} )}
happyReduce_111 = happySpecReduce_3 44# happyReduction_111 happyReduce_114 = happySpecReduce_3 44# happyReduction_114
happyReduction_111 happy_x_3 happyReduction_114 happy_x_3
happy_x_2 happy_x_2
happy_x_1 happy_x_1
= case happyOut39 happy_x_1 of { happy_var_1 -> = case happyOut39 happy_x_1 of { happy_var_1 ->
@@ -1492,20 +1517,20 @@ happyReduction_111 happy_x_3
((:) happy_var_1 happy_var_3 ((:) happy_var_1 happy_var_3
)}} )}}
happyReduce_112 = happySpecReduce_0 45# happyReduction_112 happyReduce_115 = happySpecReduce_0 45# happyReduction_115
happyReduction_112 = happyIn49 happyReduction_115 = happyIn49
([] ([]
) )
happyReduce_113 = happySpecReduce_1 45# happyReduction_113 happyReduce_116 = happySpecReduce_1 45# happyReduction_116
happyReduction_113 happy_x_1 happyReduction_116 happy_x_1
= case happyOut30 happy_x_1 of { happy_var_1 -> = case happyOut30 happy_x_1 of { happy_var_1 ->
happyIn49 happyIn49
((:[]) happy_var_1 ((:[]) happy_var_1
)} )}
happyReduce_114 = happySpecReduce_3 45# happyReduction_114 happyReduce_117 = happySpecReduce_3 45# happyReduction_117
happyReduction_114 happy_x_3 happyReduction_117 happy_x_3
happy_x_2 happy_x_2
happy_x_1 happy_x_1
= case happyOut30 happy_x_1 of { happy_var_1 -> = case happyOut30 happy_x_1 of { happy_var_1 ->
@@ -1514,20 +1539,20 @@ happyReduction_114 happy_x_3
((:) happy_var_1 happy_var_3 ((:) happy_var_1 happy_var_3
)}} )}}
happyReduce_115 = happySpecReduce_0 46# happyReduction_115 happyReduce_118 = happySpecReduce_0 46# happyReduction_118
happyReduction_115 = happyIn50 happyReduction_118 = happyIn50
([] ([]
) )
happyReduce_116 = happySpecReduce_1 46# happyReduction_116 happyReduce_119 = happySpecReduce_1 46# happyReduction_119
happyReduction_116 happy_x_1 happyReduction_119 happy_x_1
= case happyOut36 happy_x_1 of { happy_var_1 -> = case happyOut36 happy_x_1 of { happy_var_1 ->
happyIn50 happyIn50
((:[]) happy_var_1 ((:[]) happy_var_1
)} )}
happyReduce_117 = happySpecReduce_3 46# happyReduction_117 happyReduce_120 = happySpecReduce_3 46# happyReduction_120
happyReduction_117 happy_x_3 happyReduction_120 happy_x_3
happy_x_2 happy_x_2
happy_x_1 happy_x_1
= case happyOut36 happy_x_1 of { happy_var_1 -> = case happyOut36 happy_x_1 of { happy_var_1 ->
@@ -1536,13 +1561,13 @@ happyReduction_117 happy_x_3
((:) happy_var_1 happy_var_3 ((:) happy_var_1 happy_var_3
)}} )}}
happyReduce_118 = happySpecReduce_0 47# happyReduction_118 happyReduce_121 = happySpecReduce_0 47# happyReduction_121
happyReduction_118 = happyIn51 happyReduction_121 = happyIn51
([] ([]
) )
happyReduce_119 = happySpecReduce_2 47# happyReduction_119 happyReduce_122 = happySpecReduce_2 47# happyReduction_122
happyReduction_119 happy_x_2 happyReduction_122 happy_x_2
happy_x_1 happy_x_1
= case happyOut51 happy_x_1 of { happy_var_1 -> = case happyOut51 happy_x_1 of { happy_var_1 ->
case happyOut31 happy_x_2 of { happy_var_2 -> case happyOut31 happy_x_2 of { happy_var_2 ->
@@ -1550,13 +1575,13 @@ happyReduction_119 happy_x_2
(flip (:) happy_var_1 happy_var_2 (flip (:) happy_var_1 happy_var_2
)}} )}}
happyReduce_120 = happySpecReduce_0 48# happyReduction_120 happyReduce_123 = happySpecReduce_0 48# happyReduction_123
happyReduction_120 = happyIn52 happyReduction_123 = happyIn52
([] ([]
) )
happyReduce_121 = happySpecReduce_2 48# happyReduction_121 happyReduce_124 = happySpecReduce_2 48# happyReduction_124
happyReduction_121 happy_x_2 happyReduction_124 happy_x_2
happy_x_1 happy_x_1
= case happyOut52 happy_x_1 of { happy_var_1 -> = case happyOut52 happy_x_1 of { happy_var_1 ->
case happyOut5 happy_x_2 of { happy_var_2 -> case happyOut5 happy_x_2 of { happy_var_2 ->
@@ -1564,20 +1589,20 @@ happyReduction_121 happy_x_2
(flip (:) happy_var_1 happy_var_2 (flip (:) happy_var_1 happy_var_2
)}} )}}
happyReduce_122 = happySpecReduce_0 49# happyReduction_122 happyReduce_125 = happySpecReduce_0 49# happyReduction_125
happyReduction_122 = happyIn53 happyReduction_125 = happyIn53
([] ([]
) )
happyReduce_123 = happySpecReduce_1 49# happyReduction_123 happyReduce_126 = happySpecReduce_1 49# happyReduction_126
happyReduction_123 happy_x_1 happyReduction_126 happy_x_1
= case happyOut37 happy_x_1 of { happy_var_1 -> = case happyOut37 happy_x_1 of { happy_var_1 ->
happyIn53 happyIn53
((:[]) happy_var_1 ((:[]) happy_var_1
)} )}
happyReduce_124 = happySpecReduce_3 49# happyReduction_124 happyReduce_127 = happySpecReduce_3 49# happyReduction_127
happyReduction_124 happy_x_3 happyReduction_127 happy_x_3
happy_x_2 happy_x_2
happy_x_1 happy_x_1
= case happyOut37 happy_x_1 of { happy_var_1 -> = case happyOut37 happy_x_1 of { happy_var_1 ->
@@ -1586,20 +1611,20 @@ happyReduction_124 happy_x_3
((:) happy_var_1 happy_var_3 ((:) happy_var_1 happy_var_3
)}} )}}
happyReduce_125 = happySpecReduce_0 50# happyReduction_125 happyReduce_128 = happySpecReduce_0 50# happyReduction_128
happyReduction_125 = happyIn54 happyReduction_128 = happyIn54
([] ([]
) )
happyReduce_126 = happySpecReduce_1 50# happyReduction_126 happyReduce_129 = happySpecReduce_1 50# happyReduction_129
happyReduction_126 happy_x_1 happyReduction_129 happy_x_1
= case happyOut41 happy_x_1 of { happy_var_1 -> = case happyOut41 happy_x_1 of { happy_var_1 ->
happyIn54 happyIn54
((:[]) happy_var_1 ((:[]) happy_var_1
)} )}
happyReduce_127 = happySpecReduce_3 50# happyReduction_127 happyReduce_130 = happySpecReduce_3 50# happyReduction_130
happyReduction_127 happy_x_3 happyReduction_130 happy_x_3
happy_x_2 happy_x_2
happy_x_1 happy_x_1
= case happyOut41 happy_x_1 of { happy_var_1 -> = case happyOut41 happy_x_1 of { happy_var_1 ->
@@ -1608,13 +1633,13 @@ happyReduction_127 happy_x_3
((:) happy_var_1 happy_var_3 ((:) happy_var_1 happy_var_3
)}} )}}
happyReduce_128 = happySpecReduce_0 51# happyReduction_128 happyReduce_131 = happySpecReduce_0 51# happyReduction_131
happyReduction_128 = happyIn55 happyReduction_131 = happyIn55
([] ([]
) )
happyReduce_129 = happySpecReduce_2 51# happyReduction_129 happyReduce_132 = happySpecReduce_2 51# happyReduction_132
happyReduction_129 happy_x_2 happyReduction_132 happy_x_2
happy_x_1 happy_x_1
= case happyOut55 happy_x_1 of { happy_var_1 -> = case happyOut55 happy_x_1 of { happy_var_1 ->
case happyOut40 happy_x_2 of { happy_var_2 -> case happyOut40 happy_x_2 of { happy_var_2 ->
@@ -1622,20 +1647,20 @@ happyReduction_129 happy_x_2
(flip (:) happy_var_1 happy_var_2 (flip (:) happy_var_1 happy_var_2
)}} )}}
happyReduce_130 = happySpecReduce_0 52# happyReduction_130 happyReduce_133 = happySpecReduce_0 52# happyReduction_133
happyReduction_130 = happyIn56 happyReduction_133 = happyIn56
([] ([]
) )
happyReduce_131 = happySpecReduce_1 52# happyReduction_131 happyReduce_134 = happySpecReduce_1 52# happyReduction_134
happyReduction_131 happy_x_1 happyReduction_134 happy_x_1
= case happyOut4 happy_x_1 of { happy_var_1 -> = case happyOut4 happy_x_1 of { happy_var_1 ->
happyIn56 happyIn56
((:[]) happy_var_1 ((:[]) happy_var_1
)} )}
happyReduce_132 = happySpecReduce_3 52# happyReduction_132 happyReduce_135 = happySpecReduce_3 52# happyReduction_135
happyReduction_132 happy_x_3 happyReduction_135 happy_x_3
happy_x_2 happy_x_2
happy_x_1 happy_x_1
= case happyOut4 happy_x_1 of { happy_var_1 -> = case happyOut4 happy_x_1 of { happy_var_1 ->
@@ -1645,7 +1670,7 @@ happyReduction_132 happy_x_3
)}} )}}
happyNewToken action sts stk [] = happyNewToken action sts stk [] =
happyDoAction 52# (error "reading EOF!") action sts stk [] happyDoAction 53# (error "reading EOF!") action sts stk []
happyNewToken action sts stk (tk:tks) = happyNewToken action sts stk (tk:tks) =
let cont i = happyDoAction i tk action sts stk tks in let cont i = happyDoAction i tk action sts stk tks in
@@ -1676,31 +1701,32 @@ happyNewToken action sts stk (tk:tks) =
PT _ (TS "+") -> cont 24#; PT _ (TS "+") -> cont 24#;
PT _ (TS "|") -> cont 25#; PT _ (TS "|") -> cont 25#;
PT _ (TS ",") -> cont 26#; PT _ (TS ",") -> cont 26#;
PT _ (TS "Str") -> cont 27#; PT _ (TS "Ints") -> cont 27#;
PT _ (TS "Type") -> cont 28#; PT _ (TS "Str") -> cont 28#;
PT _ (TS "abstract") -> cont 29#; PT _ (TS "Type") -> cont 29#;
PT _ (TS "cat") -> cont 30#; PT _ (TS "abstract") -> cont 30#;
PT _ (TS "concrete") -> cont 31#; PT _ (TS "cat") -> cont 31#;
PT _ (TS "data") -> cont 32#; PT _ (TS "concrete") -> cont 32#;
PT _ (TS "flags") -> cont 33#; PT _ (TS "data") -> cont 33#;
PT _ (TS "fun") -> cont 34#; PT _ (TS "flags") -> cont 34#;
PT _ (TS "grammar") -> cont 35#; PT _ (TS "fun") -> cont 35#;
PT _ (TS "in") -> cont 36#; PT _ (TS "grammar") -> cont 36#;
PT _ (TS "lin") -> cont 37#; PT _ (TS "in") -> cont 37#;
PT _ (TS "lincat") -> cont 38#; PT _ (TS "lin") -> cont 38#;
PT _ (TS "of") -> cont 39#; PT _ (TS "lincat") -> cont 39#;
PT _ (TS "open") -> cont 40#; PT _ (TS "of") -> cont 40#;
PT _ (TS "oper") -> cont 41#; PT _ (TS "open") -> cont 41#;
PT _ (TS "param") -> cont 42#; PT _ (TS "oper") -> cont 42#;
PT _ (TS "pre") -> cont 43#; PT _ (TS "param") -> cont 43#;
PT _ (TS "resource") -> cont 44#; PT _ (TS "pre") -> cont 44#;
PT _ (TS "table") -> cont 45#; PT _ (TS "resource") -> cont 45#;
PT _ (TS "transfer") -> cont 46#; PT _ (TS "table") -> cont 46#;
PT _ (TS "variants") -> cont 47#; PT _ (TS "transfer") -> cont 47#;
PT _ (TV happy_dollar_dollar) -> cont 48#; PT _ (TS "variants") -> cont 48#;
PT _ (TL happy_dollar_dollar) -> cont 49#; PT _ (TV happy_dollar_dollar) -> cont 49#;
PT _ (TI happy_dollar_dollar) -> cont 50#; PT _ (TL happy_dollar_dollar) -> cont 50#;
_ -> cont 51#; PT _ (TI happy_dollar_dollar) -> cont 51#;
_ -> cont 52#;
_ -> happyError tks _ -> happyError tks
} }
@@ -1727,7 +1753,7 @@ happyError ts =
myLexer = tokens myLexer = tokens
{-# LINE 1 "GenericTemplate.hs" #-} {-# LINE 1 "GenericTemplate.hs" #-}
-- $Id: ParGFC.hs,v 1.3 2004/09/15 15:36:32 aarne Exp $ -- $Id: ParGFC.hs,v 1.4 2004/09/23 15:41:45 aarne Exp $
+3
View File
@@ -234,6 +234,7 @@ instance Print CType where
Table ctype0 ctype -> prPrec i 0 (concatD [doc (showString "(") , prt 0 ctype0 , doc (showString "=>") , prt 0 ctype , doc (showString ")")]) Table ctype0 ctype -> prPrec i 0 (concatD [doc (showString "(") , prt 0 ctype0 , doc (showString "=>") , prt 0 ctype , doc (showString ")")])
Cn cident -> prPrec i 0 (concatD [prt 0 cident]) Cn cident -> prPrec i 0 (concatD [prt 0 cident])
TStr -> prPrec i 0 (concatD [doc (showString "Str")]) TStr -> prPrec i 0 (concatD [doc (showString "Str")])
TInts n -> prPrec i 0 (concatD [doc (showString "Ints") , prt 0 n])
prtList es = case es of prtList es = case es of
[] -> (concatD []) [] -> (concatD [])
@@ -260,6 +261,7 @@ instance Print Term where
S term0 term -> prPrec i 1 (concatD [prt 1 term0 , doc (showString "!") , prt 2 term]) S term0 term -> prPrec i 1 (concatD [prt 1 term0 , doc (showString "!") , prt 2 term])
C term0 term -> prPrec i 0 (concatD [prt 0 term0 , doc (showString "++") , prt 1 term]) C term0 term -> prPrec i 0 (concatD [prt 0 term0 , doc (showString "++") , prt 1 term])
FV terms -> prPrec i 1 (concatD [doc (showString "variants") , doc (showString "{") , prt 2 terms , doc (showString "}")]) FV terms -> prPrec i 1 (concatD [doc (showString "variants") , doc (showString "{") , prt 2 terms , doc (showString "}")])
EInt n -> prPrec i 2 (concatD [prt 0 n])
K tokn -> prPrec i 2 (concatD [prt 0 tokn]) K tokn -> prPrec i 2 (concatD [prt 0 tokn])
E -> prPrec i 2 (concatD [doc (showString "[") , doc (showString "]")]) E -> prPrec i 2 (concatD [doc (showString "[") , doc (showString "]")])
@@ -322,6 +324,7 @@ instance Print Patt where
PV id -> prPrec i 0 (concatD [prt 0 id]) PV id -> prPrec i 0 (concatD [prt 0 id])
PW -> prPrec i 0 (concatD [doc (showString "_")]) PW -> prPrec i 0 (concatD [doc (showString "_")])
PR pattassigns -> prPrec i 0 (concatD [doc (showString "{") , prt 0 pattassigns , doc (showString "}")]) PR pattassigns -> prPrec i 0 (concatD [doc (showString "{") , prt 0 pattassigns , doc (showString "}")])
PI n -> prPrec i 0 (concatD [prt 0 n])
prtList es = case es of prtList es = case es of
[] -> (concatD []) [] -> (concatD [])
+4 -1
View File
@@ -35,7 +35,7 @@ transModType x = case x of
transExtend :: Extend -> Result transExtend :: Extend -> Result
transExtend x = case x of transExtend x = case x of
Ext id -> failure x Ext ids -> failure x
NoExt -> failure x NoExt -> failure x
@@ -129,6 +129,7 @@ transCType x = case x of
Table ctype0 ctype -> failure x Table ctype0 ctype -> failure x
Cn cident -> failure x Cn cident -> failure x
TStr -> failure x TStr -> failure x
TInts n -> failure x
transLabelling :: Labelling -> Result transLabelling :: Labelling -> Result
@@ -148,6 +149,7 @@ transTerm x = case x of
S term0 term -> failure x S term0 term -> failure x
C term0 term -> failure x C term0 term -> failure x
FV terms -> failure x FV terms -> failure x
EInt n -> failure x
K tokn -> failure x K tokn -> failure x
E -> failure x E -> failure x
@@ -191,6 +193,7 @@ transPatt x = case x of
PV id -> failure x PV id -> failure x
PW -> failure x PW -> failure x
PR pattassigns -> failure x PR pattassigns -> failure x
PI n -> failure x
transPattAssign :: PattAssign -> Result transPattAssign :: PattAssign -> Result
+12
View File
@@ -233,6 +233,9 @@ computeLType gr t = do
where where
comp ty = case ty of comp ty = case ty of
App (Q (IC "Predef") (IC "Ints")) _ -> return ty ---- shouldn't be needed
Q (IC "Predef") (IC "Int") -> return ty ---- shouldn't be needed
Q m c | elem c [cPredef,cPredefAbs] -> return ty Q m c | elem c [cPredef,cPredefAbs] -> return ty
Q m ident -> checkIn ("Q" +++ show m) $ do Q m ident -> checkIn ("Q" +++ show m) $ do
@@ -664,6 +667,15 @@ checkEqLType env t u trm = do
all (\ (l,a) -> all (\ (l,a) ->
any (\ (k,b) -> alpha g a b && l == k) ts) rs any (\ (k,b) -> alpha g a b && l == k) ts) rs
-- the following say that Ints n is a subset of Int and of Ints m
(App (Q (IC "Predef") (IC "Ints")) (EInt n),
App (Q (IC "Predef") (IC "Ints")) (EInt m)) -> m >= n
(App (Q (IC "Predef") (IC "Ints")) (EInt n),
Q (IC "Predef") (IC "Int")) -> True ---- should check size
(Q (IC "Predef") (IC "Int"),
App (Q (IC "Predef") (IC "Ints")) (EInt n)) -> True
(Table a b, Table c d) -> alpha g a c && alpha g b d (Table a b, Table c d) -> alpha g a c && alpha g b d
(Vr x, Vr y) -> x == y || elem (x,y) g || elem (y,x) g (Vr x, Vr y) -> x == y || elem (x,y) g || elem (y,x) g
_ -> t == u _ -> t == u
+5
View File
@@ -165,6 +165,9 @@ redCType t = case t of
Table p v -> liftM2 G.Table (redCType p) (redCType v) Table p v -> liftM2 G.Table (redCType p) (redCType v)
Q m c -> liftM G.Cn $ redQIdent (m,c) Q m c -> liftM G.Cn $ redQIdent (m,c)
QC m c -> liftM G.Cn $ redQIdent (m,c) QC m c -> liftM G.Cn $ redQIdent (m,c)
App (Q (IC "Predef") (IC "Ints")) (EInt n) -> return $ G.TInts (toInteger n)
Sort "Str" -> return $ G.TStr Sort "Str" -> return $ G.TStr
_ -> prtBad "cannot reduce to canonical the type" t _ -> prtBad "cannot reduce to canonical the type" t
@@ -197,6 +200,7 @@ redCTerm t = case t of
return $ G.T ty' $ map (uncurry G.Cas) $ zip (map singleton ps') ts' return $ G.T ty' $ map (uncurry G.Cas) $ zip (map singleton ps') ts'
S u v -> liftM2 G.S (redCTerm u) (redCTerm v) S u v -> liftM2 G.S (redCTerm u) (redCTerm v)
K s -> return $ G.K (G.KS s) K s -> return $ G.K (G.KS s)
EInt i -> return $ G.EInt $ toInteger i
C u v -> liftM2 G.C (redCTerm u) (redCTerm v) C u v -> liftM2 G.C (redCTerm u) (redCTerm v)
FV ts -> liftM G.FV $ mapM redCTerm ts FV ts -> liftM G.FV $ mapM redCTerm ts
--- Ready ss -> return $ G.Ready [redStr ss] --- obsolete --- Ready ss -> return $ G.Ready [redStr ss] --- obsolete
@@ -224,6 +228,7 @@ redPatt p = case p of
ts <- mapM redPatt tts ts <- mapM redPatt tts
return $ G.PR $ map (uncurry G.PAss) $ zip ls' ts return $ G.PR $ map (uncurry G.PAss) $ zip ls' ts
PT _ q -> redPatt q PT _ q -> redPatt q
PInt i -> return $ G.PI (toInteger i)
_ -> prtBad "cannot reduce pattern" p _ -> prtBad "cannot reduce pattern" p
redLabel :: Label -> G.Label redLabel :: Label -> G.Label
+12 -4
View File
@@ -6,6 +6,7 @@ import Option
import ShellState import ShellState
import ShellCommands import ShellCommands
import Shell import Shell
import CommandL (execCommandHistory)
import SubShell import SubShell
import PShell import PShell
import JGF import JGF
@@ -14,14 +15,14 @@ import Char (isSpace)
-- separated from GF Main 24/6/2003 -- separated from GF Main 24/6/2003
gfInteract :: HState -> IO HState gfInteract :: HState -> IO HState
gfInteract st@(env,_) = do gfInteract st@(env,hist) = do
-- putStrFlush "> " M.F 25/01-02 prompt moved to Arch. -- putStrFlush "> " M.F 25/01-02 prompt moved to Arch.
(s,cs) <- getCommandLines (s,cs) <- getCommandLines
case ifImpure cs of case ifImpure cs of
-- these are the three impure commands -- these are the three impure commands
Just (ICQuit,_) -> do Just (ICQuit,_) -> do
putStrLnFlush "See you." ifNotSilent "See you."
return st return st
Just (ICExecuteHistory file,_) -> do Just (ICExecuteHistory file,_) -> do
ss <- readFileIf file ss <- readFileIf file
@@ -34,8 +35,13 @@ gfInteract st@(env,_) = do
st' <- execLinesH line [co] st -- s would not work in execLinesH st' <- execLinesH line [co] st -- s would not work in execLinesH
gfInteract st' gfInteract st'
Just (ICEditSession,os) -> Just (ICEditSession,os) -> case getOptVal os useFile of
editSession (addOptions os opts) env >> gfInteract st Just file -> do
s <- readFileIf file
(env',tree) <- execCommandHistory env s
gfInteract st
_ ->
editSession (addOptions os opts) env >> gfInteract st
Just (ICTranslateSession,os) -> Just (ICTranslateSession,os) ->
translateSession (addOptions os opts) env >> gfInteract st translateSession (addOptions os opts) env >> gfInteract st
@@ -45,6 +51,8 @@ gfInteract st@(env,_) = do
gfInteract st' gfInteract st'
where where
opts = globalOptions env opts = globalOptions env
ifNotSilent c =
if oElem beSilent opts then return () else putStrLnFlush c
gfBatch :: HState -> IO HState gfBatch :: HState -> IO HState
gfBatch st@(sh,_) = do gfBatch st@(sh,_) = do
+4 -1
View File
@@ -15,16 +15,18 @@ isInPredefined = err (const True) (const False) . typPredefined
typPredefined :: Ident -> Err Type typPredefined :: Ident -> Err Type
typPredefined c@(IC f) = case f of typPredefined c@(IC f) = case f of
"Int" -> return typePType "Int" -> return typePType
"Ints" -> return $ mkFunType [cnPredef "Int"] typePType
"PBool" -> return typePType "PBool" -> return typePType
"PFalse" -> return $ cnPredef "PBool" "PFalse" -> return $ cnPredef "PBool"
"PTrue" -> return $ cnPredef "PBool" "PTrue" -> return $ cnPredef "PBool"
"dp" -> return $ mkFunType [cnPredef "Int",typeTok] typeTok "dp" -> return $ mkFunType [cnPredef "Int",typeTok] typeTok
"drop" -> return $ mkFunType [cnPredef "Int",typeTok] typeTok "drop" -> return $ mkFunType [cnPredef "Int",typeTok] typeTok
"eqInt" -> return $ mkFunType [cnPredef "Int",cnPredef "Int"] (cnPredef "PBool") "eqInt" -> return $ mkFunType [cnPredef "Int",cnPredef "Int"] (cnPredef "PBool")
"lessInt"-> return $ mkFunType [cnPredef "Int",cnPredef "Int"] (cnPredef "PBool")
"eqStr" -> return $ mkFunType [typeTok,typeTok] (cnPredef "PBool") "eqStr" -> return $ mkFunType [typeTok,typeTok] (cnPredef "PBool")
"length" -> return $ mkFunType [typeTok] (cnPredef "Int") "length" -> return $ mkFunType [typeTok] (cnPredef "Int")
"occur" -> return $ mkFunType [typeTok,typeTok] (cnPredef "PBool") "occur" -> return $ mkFunType [typeTok,typeTok] (cnPredef "PBool")
"plus" -> return $ mkFunType [cnPredef "Int",cnPredef "Int"] (cnPredef "PInt") "plus" -> return $ mkFunType [cnPredef "Int",cnPredef "Int"] (cnPredef "Int")
---- "read" -> (P : Type) -> Tok -> P ---- "read" -> (P : Type) -> Tok -> P
---- "show" -> (P : Type) -> P -> Tok ---- "show" -> (P : Type) -> P -> Tok
"take" -> return $ mkFunType [cnPredef "Int",typeTok] typeTok "take" -> return $ mkFunType [cnPredef "Int",typeTok] typeTok
@@ -51,6 +53,7 @@ appPredefined t = case t of
("eqStr",K s, K t) -> if s == t then predefTrue else predefFalse ("eqStr",K s, K t) -> if s == t then predefTrue else predefFalse
("occur",K s, K t) -> if substring s t then predefTrue else predefFalse ("occur",K s, K t) -> if substring s t then predefTrue else predefFalse
("eqInt",EInt i, EInt j) -> if i==j then predefTrue else predefFalse ("eqInt",EInt i, EInt j) -> if i==j then predefTrue else predefFalse
("lessInt",EInt i, EInt j) -> if i<j then predefTrue else predefFalse
("plus", EInt i, EInt j) -> EInt $ i+j ("plus", EInt i, EInt j) -> EInt $ i+j
("show", _, t) -> K $ prt t ("show", _, t) -> K $ prt t
("read", _, K s) -> str2tag s --- because of K, only works for atomic tags ("read", _, K s) -> str2tag s --- because of K, only works for atomic tags
+2
View File
@@ -78,6 +78,8 @@ lookupFirstTag gr m c = do
allParamValues :: SourceGrammar -> Type -> Err [Term] allParamValues :: SourceGrammar -> Type -> Err [Term]
allParamValues cnc ptyp = case ptyp of allParamValues cnc ptyp = case ptyp of
App (Q (IC "Predef") (IC "Ints")) (EInt n) ->
return [EInt i | i <- [0..n]]
QC p c -> lookupParamValues cnc p c QC p c -> lookupParamValues cnc p c
RecType r -> do RecType r -> do
let (ls,tys) = unzip r let (ls,tys) = unzip r
+12
View File
@@ -272,3 +272,15 @@ string2var :: String -> Ident
string2var s = case s of string2var s = case s of
c:'_':i -> identV (readIntArg i,[c]) --- c:'_':i -> identV (readIntArg i,[c]) ---
_ -> zIdent s _ -> zIdent s
-- reindex variables so that they tell nesting depth level
reindexTerm :: Term -> Term
reindexTerm = qualif (0,[]) where
qualif dg@(d,g) t = case t of
Abs x b -> let x' = ind x d in Abs x' $ qualif (d+1, (x,x'):g) b
Prod x a b -> let x' = ind x d in Prod x' (qualif dg a) $ qualif (d+1, (x,x'):g) b
Vr x -> Vr $ look x g
_ -> composSafeOp (qualif dg) t
look x = maybe x id . lookup x --- if x is not in scope it is unchanged
ind x d = identC $ prIdent x ++ "_" ++ show d
+1
View File
@@ -271,6 +271,7 @@ typeStrs = srt "Strs"
typeString = constPredefRes "String" typeString = constPredefRes "String"
typeInt = constPredefRes "Int" typeInt = constPredefRes "Int"
typeInts i = App (constPredefRes "Ints") (EInt i)
constPredefRes s = Q (IC "Predef") (zIdent s) constPredefRes s = Q (IC "Predef") (zIdent s)
+1
View File
@@ -79,6 +79,7 @@ isInConstantForm trm = case trm of
R r -> all (isInConstantForm . snd . snd) r R r -> all (isInConstantForm . snd . snd) r
K _ -> True K _ -> True
Alias _ _ t -> isInConstantForm t Alias _ _ t -> isInConstantForm t
EInt _ -> True
_ -> False ---- isInArgVarForm trm _ -> False ---- isInArgVarForm trm
varsOfPatt :: Patt -> [Ident] varsOfPatt :: Patt -> [Ident]
+1
View File
@@ -208,6 +208,7 @@ useName = aOpt "name"
useAbsName = aOpt "abs" useAbsName = aOpt "abs"
useCncName = aOpt "cnc" useCncName = aOpt "cnc"
useResName = aOpt "res" useResName = aOpt "res"
useFile = aOpt "file"
markLin = aOpt "mark" markLin = aOpt "mark"
markOptXML = oArg "xml" markOptXML = oArg "xml"
+20
View File
@@ -4,6 +4,7 @@ import Operations
import UseIO import UseIO
import CMacros import CMacros
import Values (Tree)
import GetTree import GetTree
import ShellState import ShellState
@@ -13,6 +14,7 @@ import Commands
import Char import Char
import List (intersperse) import List (intersperse)
import Monad (foldM)
import UTF8 import UTF8
@@ -39,6 +41,23 @@ editLoop env state resume = do
editLoop env' state' resume editLoop env' state' resume
-- execute a command script and return a tree
execCommandHistory :: CEnv -> String -> IO (CEnv,Tree)
execCommandHistory env s = do
let env' = startEditEnv env
let state = initSStateEnv env'
(env',state') <- foldM exec (env,state) $ lines s
return $ (env',treeSState state')
where
exec (env,state) l = do
let c = pCommand l
execCommand env c state
getCommand :: IO Command getCommand :: IO Command
getCommand = do getCommand = do
s <- getLine s <- getLine
@@ -101,6 +120,7 @@ pCommand = pCommandWords . words where
"off":lang: _ -> CCEnvOff lang "off":lang: _ -> CCEnvOff lang
"pfile" :f:_ -> CCEnvRefineParse f "pfile" :f:_ -> CCEnvRefineParse f
"tfile" :f:_ -> CCEnvRefineWithTree f "tfile" :f:_ -> CCEnvRefineWithTree f
"save":l:f:_ -> CCEnvSave l f
-- openstring file -- openstring file
-- pfile file -- pfile file
+7
View File
@@ -96,6 +96,7 @@ data Command =
-- other commands using IO -- other commands using IO
| CCEnvRefineWithTree String | CCEnvRefineWithTree String
| CCEnvRefineParse String | CCEnvRefineParse String
| CCEnvSave String FilePath
isQuit CQuit = True isQuit CQuit = True
isQuit _ = False isQuit _ = False
@@ -160,6 +161,12 @@ execCommand env c s = case c of
CCEnvOn name -> return (languageOn (language name) env,s) CCEnvOn name -> return (languageOn (language name) env,s)
CCEnvOff name -> return (languageOff (language name) env,s) CCEnvOff name -> return (languageOff (language name) env,s)
CCEnvSave lang file -> do
let str = optLinearizeTreeVal opts (stateGrammarOfLang env (language lang)) $ treeSState s
writeFile file str
let msg = ["wrote file" +++ file]
return (env,changeMsg msg s)
-- this command is improved by the use of IO -- this command is improved by the use of IO
CRefineRandom -> do CRefineRandom -> do
g <- newStdGen g <- newStdGen
+1 -1
View File
@@ -167,7 +167,7 @@ optionsOfCommand co = case co of
CHelp _ -> opts "all filter length lexer unlexer printer transform depth number" CHelp _ -> opts "all filter length lexer unlexer printer transform depth number"
CImpure ICEditSession -> opts "f" CImpure ICEditSession -> both "f" "file"
CImpure ICTranslateSession -> both "f langs" "cat" CImpure ICTranslateSession -> both "f langs" "cat"
_ -> none _ -> none
+3
View File
@@ -267,6 +267,9 @@ customTermCommand =
(uniqueRefinements (grammar g) (tree2loc t))) (uniqueRefinements (grammar g) (tree2loc t)))
,(strCI "context", \g t -> err (const [t]) (return . loc2tree) ,(strCI "context", \g t -> err (const [t]) (return . loc2tree)
(contextRefinements (grammar g) (tree2loc t))) (contextRefinements (grammar g) (tree2loc t)))
,(strCI "reindex", \g t -> let gr = grammar g in
err (const [t]) return
(exp2termCommand gr (return . MM.reindexTerm) t))
--- ,(strCI "delete", \g t -> [MM.mExp0]) --- ,(strCI "delete", \g t -> [MM.mExp0])
-- add your own term commands here -- add your own term commands here
] ]