diff --git a/Eval.hs b/Eval.hs index 7d41beca39e1e589d65c4a4d7c770d3a0d855733..8abd2948ae7220f8401b8870d0b1ebebb924003c 100644 --- a/Eval.hs +++ b/Eval.hs @@ -19,14 +19,43 @@ eval env expr = let (eval', evalFull') = (eval env, evalFull env) in case expr o Filter -> let (Set inputRecords,predicate) = (eval' $ head inputSets, eval' $ head args) in Set $ filter ((==Boolean True).(\r -> eval' $ FuncCall predicate [] [r])) $ map eval' inputRecords + Map -> Set (map (\record -> FuncCall lambda [] [record]) records) + where + (Set records:_) = inputSets + (lambda:_) = args + IsEqual -> let (e1:e2:_) = args in -- TODO not sufficent. Boolean (eval' e1 == eval' e2) + + XProduct -> let ((Set l1): (Set l2):_) = map eval' inputSets in + Set $ [ x `concatRecord` y | x <- l1, y <- l2] RecordIndex -> let (Record recordData:Int index:_) = (map eval' args) in recordData !! index - XProduct -> debug (show env) $ let ((Set l1): (Set l2):_) = map eval' inputSets in - Set $ [ x `concatRecord` y | x <- l1, y <- l2] + RecordSelect -> Record filteredList + where + (Record recordData: indexes) = args + indexesRaw = map (\(Int i) -> i) indexes + + filteredList = map (recordData!!) indexesRaw + + {-numberedElems = zip [1..] recordData :: [(Int, Expr)] + filtered = filter ((`elem` indexesRaw).fst) numberedElems :: [(Int, Expr)] + filteredList = map snd filtered :: [Expr]-} + + IsEmpty -> case eval' (head args) of + (String a) -> Boolean $ null a + + Contains -> case args of + (mainString:containsWhat:_) -> case (eval' mainString , eval' containsWhat) of + (String a, String b) -> a `beginsWith` b + + Plus -> let (e1:e2:_) = args in case (eval' e1, eval' e2) of + (String a, String b) -> String (a ++ b) + (Record a, Record b) -> Record (a ++ b) + _ -> error "eval error" + --implement later --(Map) -> Set $ (map (\r -> FuncCall predicate [] [r]) inputRecords) @@ -37,6 +66,11 @@ eval env expr = let (eval', evalFull') = (eval env, evalFull env) in case expr o -- TODO FIX (Var name) -> eval' $ findVar env name + + + + + control@(Control lastResult exprs) -> if null exprs then lastResult else eval' $ evalControl1 env control _ -> expr @@ -52,4 +86,5 @@ evalFull = eval --evalFull env (Set xs) = Set (map (eval env) xs) -- evaluates expression fully (not just weak head normal form) --evalFull _ e = e --TODO implement properly -concatRecord (Record r1) (Record r2) = Record (r1 ++ r2) \ No newline at end of file +concatRecord (Record r1) (Record r2) = Record (r1 ++ r2) +beginsWith = notImplemented \ No newline at end of file diff --git a/Lexer.hs b/Lexer.hs index 7b219d60bdc737444b240d256a1a8ac07eb845c7..b82aa948d0bd41cbb67ba81b4da033578c8e18a1 100644 --- a/Lexer.hs +++ b/Lexer.hs @@ -81,23 +81,23 @@ type Byte = Word8 -- The input type +type AlexInput = (AlexPosn, -- current position, + Char, -- previous char + [Byte], -- pending bytes on current char + String) -- current input string +ignorePendingBytes :: AlexInput -> AlexInput +ignorePendingBytes (p,c,_ps,s) = (p,c,[],s) +alexInputPrevChar :: AlexInput -> Char +alexInputPrevChar (_p,c,_bs,_s) = c - - - - - - - - - - - - - - +alexGetByte :: AlexInput -> Maybe (Byte,AlexInput) +alexGetByte (p,c,(b:bs),s) = Just (b,(p,c,bs,s)) +alexGetByte (_,_,[],[]) = Nothing +alexGetByte (p,_,[],(c:s)) = let p' = alexMove p c + in case utf8Encode' c of + (b, bs) -> p' `seq` Just (b, (p', c, bs, s)) @@ -170,10 +170,20 @@ type Byte = Word8 -- assuming the usual eight character tab stops. +data AlexPosn = AlexPn !Int !Int !Int + deriving (Eq,Show) +alexStartPos :: AlexPosn +alexStartPos = AlexPn 0 1 1 +alexMove :: AlexPosn -> Char -> AlexPosn +alexMove (AlexPn a l c) '\t' = AlexPn (a+1) l (c+alex_tab_size-((c-1) `mod` alex_tab_size)) +alexMove (AlexPn a l _) '\n' = AlexPn (a+1) (l+1) 1 +alexMove (AlexPn a l c) _ = AlexPn (a+1) l (c+1) +-- ----------------------------------------------------------------------------- +-- Monad (default and with ByteString input) @@ -182,8 +192,6 @@ type Byte = Word8 --- ----------------------------------------------------------------------------- --- Monad (default and with ByteString input) @@ -329,6 +337,8 @@ type Byte = Word8 +-- ----------------------------------------------------------------------------- +-- Basic wrapper @@ -337,34 +347,14 @@ type Byte = Word8 --- ----------------------------------------------------------------------------- --- Basic wrapper -type AlexInput = (Char,[Byte],String) -alexInputPrevChar :: AlexInput -> Char -alexInputPrevChar (c,_,_) = c --- alexScanTokens :: String -> [token] -alexScanTokens str = go ('\n',[],str) - where go inp__@(_,_bs,s) = - case alexScan inp__ 0 of - AlexEOF -> [] - AlexError _ -> error "lexical error" - AlexSkip inp__' _ln -> go inp__' - AlexToken inp__' len act -> act (take len s) : go inp__' -alexGetByte :: AlexInput -> Maybe (Byte,AlexInput) -alexGetByte (c,(b:bs),s) = Just (b,(c,bs,s)) -alexGetByte (_,[],[]) = Nothing -alexGetByte (_,[],(c:s)) = case utf8Encode' c of - (b, bs) -> Just (b, (c, bs, s)) --- ----------------------------------------------------------------------------- --- Basic wrapper, ByteString version @@ -373,6 +363,8 @@ alexGetByte (_,[],(c:s)) = case utf8Encode' c of +-- ----------------------------------------------------------------------------- +-- Basic wrapper, ByteString version @@ -397,10 +389,7 @@ alexGetByte (_,[],(c:s)) = case utf8Encode' c of --- ----------------------------------------------------------------------------- --- Posn wrapper --- Adds text positions to the basic model. @@ -408,9 +397,20 @@ alexGetByte (_,[],(c:s)) = case utf8Encode' c of +-- ----------------------------------------------------------------------------- +-- Posn wrapper +-- Adds text positions to the basic model. +--alexScanTokens :: String -> [token] +alexScanTokens str0 = go (alexStartPos,'\n',[],str0) + where go inp__@(pos,_,_,str) = + case alexScan inp__ 0 of + AlexEOF -> [] + AlexError ((AlexPn _ line column),_,_,_) -> error $ "lexical error at line " ++ (show line) ++ ", column " ++ (show column) + AlexSkip inp__' _ln -> go inp__' + AlexToken inp__' len act -> act pos (take len str) : go inp__' @@ -451,489 +451,1817 @@ alexGetByte (_,[],(c:s)) = case utf8Encode' c of alex_tab_size :: Int alex_tab_size = 8 alex_base :: Array Int Int -alex_base = listArray (0 :: Int, 39) +alex_base = listArray (0 :: Int, 73) [ -8 - , -55 + , -115 , -54 - , -109 - , 67 - , 156 , -53 - , -106 + , -13 + , -108 + , 115 , -99 - , 3 - , 240 - , 268 - , 352 - , 0 + , -101 , 0 + , 228 + , 436 + , -104 , 0 + , 368 + , 590 + , -49 + , -102 + , -95 + , 713 + , 649 , 0 + , 616 + , 895 + , 867 , 0 + , 896 + , 1112 + , 1140 , 0 , 0 , 0 , 0 , 0 , 0 - , -88 - , 380 - , 464 - , 492 - , 576 - , 604 - , 688 - , 716 - , 800 - , 828 - , 912 - , 940 - , 1024 - , 1082 - , 143 - , 0 - ] - -alex_table :: Array Int Int -alex_table = listArray (0 :: Int, 1337) - [ 0 - , 9 - , 9 - , 9 - , 9 - , 9 - , 18 - , 19 - , 7 - , 17 - , 14 - , 13 - , 9 - , 9 - , 9 - , 9 - , 9 - , 8 - , 0 - , 0 - , 0 - , 0 - , 0 - , 3 - , 9 , 0 - , 4 , 0 , 0 , 0 , 0 , 0 - , 20 - , 21 , 0 - , 9 , 0 - , 6 - , 24 - , 2 - , 38 - , 38 - , 38 - , 38 - , 38 - , 38 - , 38 - , 38 - , 38 - , 38 + , -89 + , 1224 + , 1252 + , 1336 + , 1364 + , 1448 + , 1476 + , 1560 + , 1588 + , 1672 + , 1700 + , 1784 + , 1812 + , 1896 + , 1924 + , 2008 + , 2036 + , 2120 + , 2148 + , 2232 + , 2260 + , 2344 + , 2372 + , 2456 + , 2484 + , 2568 + , 2596 + , 2654 + , 877 + , 2729 , 0 + ] + +alex_table :: Array Int Int +alex_table = listArray (0 :: Int, 2984) + [ 0 , 22 - , 0 + , 22 + , 22 + , 22 + , 22 + , 25 + , 34 + , 35 + , 17 + , 8 + , 12 , 1 + , 33 + , 30 + , 29 + , 18 , 0 , 0 , 0 - , 37 - , 37 - , 37 - , 37 - , 37 - , 37 - , 37 - , 37 - , 37 - , 37 - , 37 - , 37 - , 37 - , 37 - , 37 - , 37 - , 37 - , 37 - , 37 - , 37 - , 37 - , 37 - , 37 - , 37 - , 37 - , 37 - , 15 - , 23 - , 16 - , 0 , 0 , 0 - , 31 - , 31 - , 31 - , 31 - , 31 - , 30 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 34 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 5 - , 5 - , 5 - , 5 - , 5 - , 5 - , 5 - , 5 - , 5 , 5 , 0 + , 22 , 0 + , 11 + , 23 , 0 , 0 , 0 , 0 + , 37 + , 38 , 0 - , 5 - , 5 - , 5 - , 5 - , 5 - , 5 - , 5 - , 5 - , 5 - , 5 - , 5 - , 5 - , 5 - , 5 - , 5 - , 5 - , 5 - , 5 - , 5 - , 5 - , 5 - , 5 - , 5 - , 5 - , 5 - , 5 + , 36 + , 42 + , 16 + , 43 + , 3 + , 72 + , 71 + , 71 + , 71 + , 71 + , 71 + , 71 + , 71 + , 71 + , 71 + , 39 + , 40 , 0 + , 2 , 0 , 0 , 0 + , 70 + , 70 + , 70 + , 70 + , 70 + , 70 + , 70 + , 70 + , 70 + , 70 + , 70 + , 70 + , 70 + , 70 + , 70 + , 70 + , 70 + , 70 + , 70 + , 70 + , 70 + , 70 + , 70 + , 70 + , 70 + , 70 + , 31 + , 41 + , 32 + , 0 + , 0 + , 0 + , 60 + , 60 + , 57 + , 60 + , 60 + , 56 + , 60 + , 60 + , 59 + , 60 + , 60 + , 60 + , 53 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 65 + , 60 + , 60 + , 60 + , 44 + , 60 + , 60 + , 19 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 4 + , 13 + , 13 + , 13 + , 13 + , 13 + , 13 + , 13 + , 13 + , 13 + , 13 + , 13 + , 13 + , 13 + , 13 + , 13 + , 13 + , 13 + , 13 + , 13 + , 13 + , 13 + , 13 + , 13 + , 13 + , 13 + , 13 + , 13 + , 13 + , 13 + , 13 + , 13 + , 13 + , 13 + , 13 + , 13 + , 13 + , 13 + , 13 + , 13 + , 13 + , 13 + , 13 + , 13 + , 13 + , 13 + , 13 + , 13 + , 13 + , 13 + , 13 + , 13 + , 13 + , 13 + , 13 + , 13 + , 13 + , 13 + , 13 + , 13 + , 13 + , 13 + , 13 + , 13 + , 13 + , 13 + , 13 + , 13 + , 13 + , 13 + , 13 + , 13 + , 13 + , 13 + , 13 + , 13 + , 13 + , 13 + , 13 + , 13 + , 13 + , 13 + , 13 + , 13 + , 13 + , 13 + , 13 + , 13 + , 13 + , 13 + , 13 + , 13 + , 13 + , 13 + , 13 + , 13 + , 13 + , 13 + , 13 + , 13 + , 13 + , 13 + , 13 + , 13 + , 13 + , 13 + , 13 + , 13 + , 13 + , 13 + , 13 + , 13 + , 13 + , 13 + , 13 + , 13 + , 13 + , 13 + , 13 + , 13 + , 13 + , 13 + , 13 + , 13 + , 13 + , 13 + , 13 + , 13 + , 14 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , 15 + , 15 + , 15 + , 15 + , 15 + , 15 + , 15 + , 15 + , 15 + , 15 + , 0 + , 0 + , 0 + , 0 + , 0 + , 0 + , 0 + , 15 + , 15 + , 15 + , 15 + , 15 + , 15 + , 15 + , 15 + , 15 + , 15 + , 15 + , 15 + , 15 + , 15 + , 15 + , 15 + , 15 + , 15 + , 15 + , 15 + , 15 + , 15 + , 15 + , 15 + , 15 + , 15 + , 0 + , 0 + , 0 + , 0 + , 0 + , 0 + , 15 + , 15 + , 15 + , 15 + , 15 + , 15 + , 15 + , 15 + , 15 + , 15 + , 15 + , 15 + , 15 + , 15 + , 15 + , 15 + , 15 + , 15 + , 15 + , 15 + , 15 + , 15 + , 15 + , 15 + , 15 + , 15 + , 20 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , 73 + , 22 + , 22 + , 22 + , 22 + , 22 + , 0 + , 0 + , 0 + , 0 + , 0 + , 0 + , 0 + , 0 + , 15 + , 15 + , 15 + , 15 + , 15 + , 15 + , 15 + , 15 + , 15 + , 15 + , 22 + , 0 + , 0 + , 0 + , 0 + , 0 + , 0 + , 15 + , 15 + , 15 + , 15 + , 15 + , 15 + , 15 + , 15 + , 15 + , 15 + , 15 + , 15 + , 15 + , 15 + , 15 + , 15 + , 15 + , 15 + , 15 + , 15 + , 15 + , 15 + , 15 + , 15 + , 15 + , 15 + , 0 + , 0 + , 0 + , 0 + , 0 + , 0 + , 15 + , 15 + , 15 + , 15 + , 15 + , 15 + , 15 + , 15 + , 15 + , 15 + , 15 + , 15 + , 15 + , 15 + , 15 + , 15 + , 15 + , 15 + , 15 + , 15 + , 15 + , 15 + , 15 + , 15 + , 15 + , 15 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , 60 + , 0 + , 0 + , 0 + , 0 + , 0 + , 0 + , 0 + , 0 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 71 + , 71 + , 71 + , 71 + , 71 + , 71 + , 71 + , 71 + , 71 + , 71 + , 60 + , 0 + , 0 + , 0 + , 0 + , 0 + , 0 + , 0 + , 0 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 0 + , 0 + , 0 + , 0 + , 0 + , 0 + , 0 + , 0 + , 60 + , 0 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 0 + , 60 + , 0 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 0 + , 0 + , 0 + , 0 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , 19 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 21 + , 20 + , 4 + , 13 + , 13 + , 13 + , 13 + , 13 + , 13 + , 13 + , 13 + , 13 + , 13 + , 13 + , 13 + , 13 + , 13 + , 14 + , 6 + , 9 + , 9 + , 9 + , 10 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , 60 + , 0 + , 0 + , 0 + , 0 + , 0 + , 0 + , 0 + , 0 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 0 + , 0 + , 0 + , 0 + , 0 + , 0 + , 0 + , 0 + , 0 + , 60 + , 0 + , 0 + , 0 + , 0 + , 0 + , 0 + , 0 + , 0 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 0 + , 0 + , 0 + , 0 + , 0 + , 0 + , 0 + , 0 + , 0 + , 60 + , 0 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 0 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 0 + , 0 + , 0 + , 0 + , 0 + , 0 + , 0 + , 0 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 0 + , 0 + , 0 + , 0 + , 0 + , 0 + , 0 + , 0 + , 0 + , 60 + , 0 + , 0 + , 0 + , 0 + , 0 + , 0 + , 0 + , 0 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 0 + , 0 + , 0 + , 0 + , 0 + , 0 + , 0 + , 0 + , 0 + , 60 + , 0 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 45 + , 60 + , 60 + , 60 + , 0 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 0 + , 0 + , 0 + , 0 + , 0 + , 0 + , 0 + , 0 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 0 + , 0 + , 0 + , 0 + , 0 + , 0 + , 0 + , 0 + , 0 + , 60 + , 0 + , 0 + , 0 + , 0 + , 0 + , 0 + , 0 + , 0 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 0 + , 0 + , 0 + , 0 + , 0 + , 0 + , 0 + , 0 + , 0 + , 60 + , 0 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 0 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 24 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 0 + , 0 + , 0 + , 0 + , 0 + , 0 + , 0 + , 0 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 0 + , 0 + , 0 + , 0 + , 0 + , 0 + , 0 + , 0 + , 0 + , 60 + , 0 + , 0 + , 0 + , 0 + , 0 + , 0 + , 0 + , 0 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 0 + , 0 + , 0 + , 0 + , 0 + , 0 + , 0 + , 0 + , 0 + , 60 + , 0 + , 60 + , 60 + , 60 + , 60 + , 27 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 0 + , 60 + , 60 + , 60 + , 60 + , 28 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 0 + , 0 + , 0 + , 0 + , 0 + , 0 + , 0 + , 0 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 0 + , 0 + , 0 + , 0 + , 0 + , 0 + , 0 + , 0 + , 0 + , 60 + , 0 + , 0 + , 0 + , 0 + , 0 + , 0 + , 0 + , 0 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 0 + , 0 + , 0 + , 0 + , 0 + , 0 + , 0 + , 0 + , 0 + , 60 + , 0 + , 60 + , 60 + , 60 + , 60 + , 69 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 0 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 48 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 0 , 0 , 0 - , 5 - , 5 - , 5 - , 5 - , 5 - , 5 - , 5 - , 5 - , 5 - , 5 - , 5 - , 5 - , 5 - , 5 - , 5 - , 5 - , 5 - , 5 - , 5 - , 5 - , 5 - , 5 - , 5 - , 5 - , 5 - , 5 - , 39 - , 38 - , 38 - , 38 - , 38 - , 38 - , 38 - , 38 - , 38 - , 38 - , 38 - , 0 - , 0 - , 0 - , 5 - , 5 - , 5 - , 5 - , 5 - , 5 - , 5 - , 5 - , 5 - , 5 - , 0 - , 0 - , 0 - , 0 - , 0 - , 0 - , 0 - , 5 - , 5 - , 5 - , 5 - , 5 - , 5 - , 5 - , 5 - , 5 - , 5 - , 5 - , 5 - , 5 - , 5 - , 5 - , 5 - , 5 - , 5 - , 5 - , 5 - , 5 - , 5 - , 5 - , 5 - , 5 - , 5 - , 0 - , 0 - , 0 - , 0 - , 0 - , 0 - , 5 - , 5 - , 5 - , 5 - , 5 - , 5 - , 5 - , 5 - , 5 - , 5 - , 5 - , 5 - , 5 - , 5 - , 5 - , 5 - , 5 - , 5 - , 5 - , 5 - , 5 - , 5 - , 5 - , 5 - , 5 - , 5 - , 31 - , 0 - , 0 - , 0 - , 0 - , 0 - , 0 - , 0 - , 0 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 0 - , 0 - , 0 - , 0 - , 0 - , 0 - , 0 - , 0 - , 0 - , 31 - , 0 - , 0 - , 0 - , 0 - , 0 - , 0 - , 0 - , 0 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 0 - , 0 - , 0 - , 0 - , 0 - , 0 - , 0 - , 0 - , 0 - , 31 - , 0 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 0 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 0 - , 0 - , 0 - , 0 - , 0 - , 0 - , 0 - , 0 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 0 - , 0 - , 0 - , 0 - , 0 - , 0 - , 0 - , 0 - , 0 - , 31 - , 0 , 0 , 0 , 0 , 0 , 0 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 , 0 , 0 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 , 0 , 0 , 0 @@ -941,111 +2269,111 @@ alex_table = listArray (0 :: Int, 1337) , 0 , 0 , 0 + , 60 , 0 , 0 - , 31 , 0 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 , 0 - , 31 - , 31 - , 31 - , 31 - , 11 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 , 0 , 0 , 0 , 0 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 , 0 , 0 , 0 , 0 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 , 0 , 0 , 0 , 0 , 0 + , 60 , 0 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 49 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 , 0 + , 68 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 , 0 , 0 - , 31 , 0 , 0 , 0 , 0 , 0 , 0 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 , 0 , 0 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 , 0 , 0 , 0 @@ -1053,178 +2381,473 @@ alex_table = listArray (0 :: Int, 1337) , 0 , 0 , 0 + , 60 + , 0 + , 0 + , 0 + , 0 + , 0 + , 0 + , 0 + , 0 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 0 + , 0 + , 0 + , 0 + , 0 + , 0 + , 0 + , 0 + , 0 + , 60 + , 0 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 67 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 0 + , 54 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 0 + , 0 + , 0 + , 0 + , 0 + , 0 + , 0 + , 0 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 0 + , 0 + , 0 + , 0 + , 0 + , 0 + , 0 + , 0 + , 0 + , 60 + , 0 + , 0 + , 0 + , 0 + , 0 + , 0 + , 0 + , 0 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 0 + , 0 + , 0 + , 0 + , 0 + , 0 + , 0 + , 0 + , 0 + , 60 + , 0 + , 64 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 63 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 0 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 61 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 0 + , 0 + , 0 + , 0 + , 0 + , 0 + , 0 + , 0 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 0 + , 0 + , 0 + , 0 + , 0 + , 0 + , 0 + , 0 + , 0 + , 60 + , 0 + , 7 + , 0 + , 0 + , 0 + , 0 + , 0 + , 0 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 0 + , 0 + , 0 + , 0 + , 0 + , 0 + , 0 + , 0 + , 0 + , 60 + , 0 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 0 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 58 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 0 + , 0 + , 0 + , 0 + , 0 + , 0 + , 0 + , 0 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 0 + , 0 + , 0 + , 0 + , 0 + , 0 + , 0 + , 0 + , 0 + , 60 + , 0 + , 0 , 0 , 0 - , 31 , 0 - , 31 - , 31 - , 31 - , 31 - , 12 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 , 0 - , 31 - , 31 - , 31 - , 31 - , 36 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 , 0 , 0 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 0 , 0 , 0 , 0 , 0 , 0 , 0 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 , 0 , 0 + , 60 , 0 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 , 0 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 62 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 , 0 , 0 , 0 , 0 , 0 - , 31 , 0 , 0 , 0 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 , 0 , 0 , 0 , 0 , 0 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 , 0 , 0 , 0 , 0 + , 60 , 0 , 0 , 0 , 0 , 0 - , 31 , 0 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 25 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 , 0 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 26 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 , 0 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 , 0 , 0 , 0 @@ -1232,110 +2855,111 @@ alex_table = listArray (0 :: Int, 1337) , 0 , 0 , 0 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 , 0 , 0 + , 60 , 0 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 55 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 0 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 66 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 , 0 , 0 , 0 , 0 , 0 , 0 - , 31 , 0 , 0 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 , 0 , 0 , 0 , 0 , 0 , 0 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 , 0 , 0 , 0 + , 60 , 0 , 0 , 0 , 0 , 0 , 0 - , 31 , 0 - , 33 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 32 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 , 0 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 , 0 , 0 , 0 @@ -1344,18 +2968,64 @@ alex_table = listArray (0 :: Int, 1337) , 0 , 0 , 0 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 , 0 + , 60 , 0 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 52 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 0 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 51 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 , 0 , 0 , 0 @@ -1363,8 +3033,17 @@ alex_table = listArray (0 :: Int, 1337) , 0 , 0 , 0 - , 31 , 0 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 , 0 , 0 , 0 @@ -1372,18 +3051,9 @@ alex_table = listArray (0 :: Int, 1337) , 0 , 0 , 0 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 , 0 , 0 + , 60 , 0 , 0 , 0 @@ -1391,175 +3061,272 @@ alex_table = listArray (0 :: Int, 1337) , 0 , 0 , 0 - , 31 , 0 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 35 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 0 + , 0 + , 0 + , 0 + , 0 + , 0 + , 0 + , 0 + , 0 + , 60 + , 0 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 50 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 0 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 47 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 0 + , 0 + , 0 + , 0 + , 0 + , 0 + , 0 + , 0 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 0 + , 0 + , 0 , 0 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 29 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 , 0 , 0 , 0 , 0 , 0 + , 60 , 0 , 0 , 0 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 , 0 , 0 , 0 , 0 , 0 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 , 0 , 0 , 0 , 0 - , 31 , 0 , 0 , 0 , 0 , 0 + , 60 , 0 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 46 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 0 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 26 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 60 + , 70 + , 70 + , 70 + , 70 + , 70 + , 70 + , 70 + , 70 + , 70 + , 70 + , 70 + , 70 + , 70 + , 70 + , 70 + , 70 + , 70 + , 70 + , 70 + , 70 + , 70 + , 70 + , 70 + , 70 + , 70 + , 70 , 0 , 0 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 , 0 , 0 , 0 , 0 + , 70 + , 70 + , 70 + , 70 + , 70 + , 70 + , 70 + , 70 + , 70 + , 70 + , 70 + , 70 + , 70 + , 70 + , 70 + , 70 + , 70 + , 70 + , 70 + , 70 + , 70 + , 70 + , 70 + , 70 + , 70 + , 70 + , 72 + , 72 + , 72 + , 72 + , 72 + , 72 + , 72 + , 72 + , 72 + , 72 + , 0 + , 0 + , 0 , 0 , 0 , 0 , 0 , 0 - , 31 , 0 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 28 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 , 0 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 27 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 , 0 , 0 , 0 @@ -1568,16 +3335,6 @@ alex_table = listArray (0 :: Int, 1337) , 0 , 0 , 0 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 , 0 , 0 , 0 @@ -1615,92 +3372,13 @@ alex_table = listArray (0 :: Int, 1337) , 0 , 0 , 0 - , 31 , 0 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 10 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 31 - , 37 - , 37 - , 37 - , 37 - , 37 - , 37 - , 37 - , 37 - , 37 - , 37 - , 37 - , 37 - , 37 - , 37 - , 37 - , 37 - , 37 - , 37 - , 37 - , 37 - , 37 - , 37 - , 37 - , 37 - , 37 - , 37 , 0 , 0 , 0 , 0 , 0 , 0 - , 37 - , 37 - , 37 - , 37 - , 37 - , 37 - , 37 - , 37 - , 37 - , 37 - , 37 - , 37 - , 37 - , 37 - , 37 - , 37 - , 37 - , 37 - , 37 - , 37 - , 37 - , 37 - , 37 - , 37 - , 37 - , 37 , 0 , 0 , 0 @@ -1834,50 +3512,1537 @@ alex_table = listArray (0 :: Int, 1337) , 0 , 0 , 0 - ] - -alex_check :: Array Int Int -alex_check = listArray (0 :: Int, 1337) - [ -1 + , 0 + , 0 + , 0 + ] + +alex_check :: Array Int Int +alex_check = listArray (0 :: Int, 2984) + [ -1 + , 9 + , 10 + , 11 + , 12 + , 13 + , 121 + , 61 + , 61 + , 117 + , 109 + , 112 + , 116 + , 62 + , 116 + , 110 + , 105 + , -1 + , -1 + , -1 + , -1 + , -1 + , 111 + , -1 + , 32 + , -1 + , 34 + , 35 + , -1 + , -1 + , -1 + , -1 + , 40 + , 41 + , -1 + , 43 + , 44 + , 45 + , 46 + , 47 + , 48 + , 49 + , 50 + , 51 + , 52 + , 53 + , 54 + , 55 + , 56 + , 57 + , 58 + , 59 + , -1 + , 61 + , -1 + , -1 + , -1 + , 65 + , 66 + , 67 + , 68 + , 69 + , 70 + , 71 + , 72 + , 73 + , 74 + , 75 + , 76 + , 77 + , 78 + , 79 + , 80 + , 81 + , 82 + , 83 + , 84 + , 85 + , 86 + , 87 + , 88 + , 89 + , 90 + , 91 + , 92 + , 93 + , -1 + , -1 + , -1 + , 97 + , 98 + , 99 + , 100 + , 101 + , 102 + , 103 + , 104 + , 105 + , 106 + , 107 + , 108 + , 109 + , 110 + , 111 + , 112 + , 113 + , 114 + , 115 + , 116 + , 117 + , 118 + , 119 + , 120 + , 121 + , 122 + , 128 + , 129 + , 130 + , 131 + , 132 + , 133 + , 134 + , 135 + , 136 + , 137 + , 138 + , 139 + , 140 + , 141 + , 142 + , 143 + , 144 + , 145 + , 146 + , 147 + , 148 + , 149 + , 150 + , 151 + , 152 + , 153 + , 154 + , 155 + , 156 + , 157 + , 158 + , 159 + , 160 + , 161 + , 162 + , 163 + , 164 + , 165 + , 166 + , 167 + , 168 + , 169 + , 170 + , 171 + , 172 + , 173 + , 174 + , 175 + , 176 + , 177 + , 178 + , 179 + , 180 + , 181 + , 182 + , 183 + , 184 + , 185 + , 186 + , 187 + , 188 + , 189 + , 190 + , 191 + , 192 + , 193 + , 194 + , 195 + , 196 + , 197 + , 198 + , 199 + , 200 + , 201 + , 202 + , 203 + , 204 + , 205 + , 206 + , 207 + , 208 + , 209 + , 210 + , 211 + , 212 + , 213 + , 214 + , 215 + , 216 + , 217 + , 218 + , 219 + , 220 + , 221 + , 222 + , 223 + , 224 + , 225 + , 226 + , 227 + , 228 + , 229 + , 230 + , 231 + , 232 + , 233 + , 234 + , 235 + , 236 + , 237 + , 238 + , 239 + , 240 + , 241 + , 242 + , 243 + , 244 + , 245 + , 246 + , 247 + , 248 + , 249 + , 250 + , 251 + , 252 + , 253 + , 254 + , 255 + , 128 + , 129 + , 130 + , 131 + , 132 + , 133 + , 134 + , 135 + , 136 + , 137 + , 138 + , 139 + , 140 + , 141 + , 142 + , 143 + , 144 + , 145 + , 146 + , 147 + , 148 + , 149 + , 150 + , 151 + , 152 + , 153 + , 154 + , 155 + , 156 + , 157 + , 158 + , 159 + , 160 + , 161 + , 162 + , 163 + , 164 + , 165 + , 166 + , 167 + , 168 + , 169 + , 170 + , 171 + , 172 + , 173 + , 174 + , 175 + , 176 + , 177 + , 178 + , 179 + , 180 + , 181 + , 182 + , 183 + , 184 + , 185 + , 186 + , 187 + , 188 + , 189 + , 190 + , 191 + , 192 + , 193 + , 194 + , 195 + , 196 + , 197 + , 198 + , 199 + , 200 + , 201 + , 202 + , 203 + , 204 + , 205 + , 206 + , 207 + , 208 + , 209 + , 210 + , 211 + , 212 + , 213 + , 214 + , 215 + , 216 + , 217 + , 218 + , 219 + , 220 + , 221 + , 222 + , 223 + , 224 + , 225 + , 226 + , 227 + , 228 + , 229 + , 230 + , 231 + , 232 + , 233 + , 234 + , 235 + , 236 + , 237 + , 238 + , 239 + , 240 + , 241 + , 242 + , 243 + , 244 + , 245 + , 246 + , 247 + , 248 + , 249 + , 250 + , 251 + , 252 + , 253 + , 254 + , 255 + , 143 + , 144 + , 145 + , 146 + , 147 + , 148 + , 149 + , 150 + , 151 + , 152 + , 153 + , 154 + , 155 + , 156 + , 157 + , 158 + , 159 + , 160 + , 161 + , 162 + , 163 + , 164 + , 165 + , 166 + , 167 + , 168 + , 169 + , 170 + , 171 + , 172 + , 173 + , 174 + , 175 + , 176 + , 177 + , 178 + , 179 + , 180 + , 181 + , 182 + , 183 + , 184 + , 185 + , 186 + , 187 + , 188 + , 189 + , 190 + , 191 + , 192 + , 193 + , 194 + , 195 + , 196 + , 197 + , 198 + , 199 + , 200 + , 201 + , 202 + , 203 + , 204 + , 205 + , 206 + , 207 + , 208 + , 209 + , 210 + , 211 + , 212 + , 213 + , 214 + , 215 + , 216 + , 217 + , 218 + , 219 + , 220 + , 221 + , 222 + , 223 + , 224 + , 225 + , 226 + , 227 + , 228 + , 229 + , 230 + , 231 + , 232 + , 233 + , 234 + , 235 + , 236 + , 237 + , 238 + , 239 + , 240 + , 241 + , 242 + , 243 + , 244 + , 245 + , 246 + , 247 + , 248 + , 249 + , 250 + , 251 + , 252 + , 253 + , 254 + , 255 + , 48 + , 49 + , 50 + , 51 + , 52 + , 53 + , 54 + , 55 + , 56 + , 57 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , 65 + , 66 + , 67 + , 68 + , 69 + , 70 + , 71 + , 72 + , 73 + , 74 + , 75 + , 76 + , 77 + , 78 + , 79 + , 80 + , 81 + , 82 + , 83 + , 84 + , 85 + , 86 + , 87 + , 88 + , 89 + , 90 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , 97 + , 98 + , 99 + , 100 + , 101 + , 102 + , 103 + , 104 + , 105 + , 106 + , 107 + , 108 + , 109 + , 110 + , 111 + , 112 + , 113 + , 114 + , 115 + , 116 + , 117 + , 118 + , 119 + , 120 + , 121 + , 122 + , 191 + , 192 + , 193 + , 194 + , 195 + , 196 + , 197 + , 198 + , 199 + , 200 + , 201 + , 202 + , 203 + , 204 + , 205 + , 206 + , 207 + , 208 + , 209 + , 210 + , 211 + , 212 + , 213 + , 214 + , 215 + , 216 + , 217 + , 218 + , 219 + , 220 + , 221 + , 222 + , 223 + , 224 + , 225 + , 226 + , 227 + , 228 + , 229 + , 230 + , 231 + , 232 + , 233 + , 234 + , 235 + , 236 + , 237 + , 238 + , 239 + , 240 + , 241 + , 242 + , 243 + , 244 + , 245 + , 246 + , 247 + , 248 + , 249 + , 250 + , 251 + , 252 + , 253 + , 254 + , 255 + , 34 + , 9 + , 10 + , 11 + , 12 + , 13 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , 48 + , 49 + , 50 + , 51 + , 52 + , 53 + , 54 + , 55 + , 56 + , 57 + , 32 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , 65 + , 66 + , 67 + , 68 + , 69 + , 70 + , 71 + , 72 + , 73 + , 74 + , 75 + , 76 + , 77 + , 78 + , 79 + , 80 + , 81 + , 82 + , 83 + , 84 + , 85 + , 86 + , 87 + , 88 + , 89 + , 90 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , 97 + , 98 + , 99 + , 100 + , 101 + , 102 + , 103 + , 104 + , 105 + , 106 + , 107 + , 108 + , 109 + , 110 + , 111 + , 112 + , 113 + , 114 + , 115 + , 116 + , 117 + , 118 + , 119 + , 120 + , 121 + , 122 + , 0 + , 1 + , 2 + , 3 + , 4 + , 5 + , 6 + , 7 + , 8 , 9 , 10 , 11 , 12 , 13 + , 14 + , 15 + , 16 + , 17 + , 18 + , 19 + , 20 + , 21 + , 22 + , 23 + , 24 + , 25 + , 26 + , 27 + , 28 + , 29 + , 30 + , 31 + , 32 + , 33 + , 34 + , 35 + , 36 + , 37 + , 38 + , 39 + , 40 + , 41 + , 42 + , 43 + , 44 + , 45 + , 46 + , 47 + , 48 + , 49 + , 50 + , 51 + , 52 + , 53 + , 54 + , 55 + , 56 + , 57 + , 58 + , 59 + , 60 , 61 - , 61 + , 62 + , 63 + , 64 + , 65 + , 66 + , 67 + , 68 + , 69 + , 70 + , 71 + , 72 + , 73 + , 74 + , 75 + , 76 + , 77 + , 78 + , 79 + , 80 + , 81 + , 82 + , 83 + , 84 + , 85 + , 86 + , 87 + , 88 + , 89 + , 90 + , 91 + , 92 + , 93 + , 94 + , 95 + , 96 + , 97 + , 98 + , 99 + , 100 + , 101 + , 102 + , 103 + , 104 + , 105 + , 106 + , 107 + , 108 + , 109 + , 110 + , 111 + , 112 + , 113 + , 114 + , 115 + , 116 + , 117 + , 118 + , 119 + , 120 + , 121 + , 122 + , 123 + , 124 + , 125 + , 126 + , 127 + , 192 + , 193 + , 194 + , 195 + , 196 + , 197 + , 198 + , 199 + , 200 + , 201 + , 202 + , 203 + , 204 + , 205 + , 206 + , 207 + , 208 + , 209 + , 210 + , 211 + , 212 + , 213 + , 214 + , 215 + , 216 + , 217 + , 218 + , 219 + , 220 + , 221 + , 222 + , 223 + , 224 + , 225 + , 226 + , 227 + , 228 + , 229 + , 230 + , 231 + , 232 + , 233 + , 234 + , 235 + , 236 + , 237 + , 238 + , 239 + , 240 + , 241 + , 242 + , 243 + , 244 + , 245 + , 246 + , 247 + , 248 + , 249 + , 250 + , 251 + , 252 + , 253 + , 254 + , 255 + , 10 + , 39 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , 48 + , 49 + , 50 + , 51 + , 52 + , 53 + , 54 + , 55 + , 56 + , 57 + , 48 + , 49 + , 50 + , 51 + , 52 + , 53 + , 54 + , 55 + , 56 + , 57 + , 39 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , 48 + , 49 + , 50 + , 51 + , 52 + , 53 + , 54 + , 55 + , 56 + , 57 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , 95 + , -1 + , 97 + , 98 + , 99 + , 100 + , 101 + , 102 + , 103 + , 104 + , 105 + , 106 + , 107 + , 108 + , 109 + , 110 + , 111 + , 112 + , 113 + , 114 + , 115 + , 116 + , 117 + , 118 + , 119 + , 120 + , 121 + , 122 + , -1 + , 95 + , -1 + , 97 + , 98 + , 99 + , 100 + , 101 + , 102 + , 103 + , 104 + , 105 + , 106 + , 107 + , 108 + , 109 + , 110 + , 111 + , 112 + , 113 + , 114 + , 115 + , 116 + , 117 + , 118 + , 119 + , 120 + , 121 + , 122 + , -1 + , -1 + , -1 + , -1 + , 128 + , 129 + , 130 + , 131 + , 132 + , 133 + , 134 + , 135 + , 136 + , 137 + , 138 + , 139 + , 140 + , 141 + , 142 + , 143 + , 144 + , 145 + , 146 + , 147 + , 148 + , 149 + , 150 + , 151 + , 152 + , 153 + , 154 + , 155 + , 156 + , 157 + , 158 + , 159 + , 160 + , 161 + , 162 + , 163 + , 164 + , 165 + , 166 + , 167 + , 168 + , 169 + , 170 + , 171 + , 172 + , 173 + , 174 + , 175 + , 176 + , 177 + , 178 + , 179 + , 180 + , 181 + , 182 + , 183 + , 184 + , 185 + , 186 + , 187 + , 188 + , 189 + , 190 + , 191 + , 192 + , 193 + , 194 + , 195 + , 196 + , 197 + , 198 + , 199 + , 200 + , 201 + , 202 + , 203 + , 204 + , 205 + , 206 + , 207 + , 208 + , 209 + , 210 + , 211 + , 212 + , 213 + , 214 + , 215 + , 216 + , 217 + , 218 + , 219 + , 220 + , 221 + , 222 + , 223 + , 224 + , 225 + , 226 + , 227 + , 228 + , 229 + , 230 + , 231 + , 232 + , 233 + , 234 + , 235 + , 236 + , 237 + , 238 + , 239 + , 240 + , 241 + , 242 + , 243 + , 244 + , 245 + , 246 + , 247 + , 248 + , 249 + , 250 + , 251 + , 252 + , 253 + , 254 + , 255 + , 39 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , 48 + , 49 + , 50 + , 51 + , 52 + , 53 + , 54 + , 55 + , 56 + , 57 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , 39 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , 48 + , 49 + , 50 + , 51 + , 52 + , 53 + , 54 + , 55 + , 56 + , 57 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , 95 + , -1 + , 97 + , 98 + , 99 + , 100 + , 101 + , 102 + , 103 + , 104 + , 105 + , 106 + , 107 + , 108 + , 109 + , 110 + , 111 + , 112 + , 113 + , 114 + , 115 + , 116 , 117 - , 62 + , 118 + , 119 + , 120 + , 121 + , 122 + , 95 + , -1 + , 97 + , 98 + , 99 + , 100 + , 101 + , 102 + , 103 + , 104 + , 105 + , 106 + , 107 + , 108 + , 109 + , 110 + , 111 + , 112 + , 113 + , 114 + , 115 + , 116 + , 117 + , 118 + , 119 + , 120 + , 121 + , 122 + , 39 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , 48 + , 49 + , 50 + , 51 + , 52 + , 53 + , 54 + , 55 + , 56 + , 57 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , 39 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , 48 + , 49 + , 50 + , 51 + , 52 + , 53 + , 54 + , 55 + , 56 + , 57 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , 95 + , -1 + , 97 + , 98 + , 99 + , 100 + , 101 + , 102 + , 103 + , 104 + , 105 + , 106 + , 107 + , 108 + , 109 + , 110 + , 111 + , 112 + , 113 + , 114 + , 115 + , 116 + , 117 + , 118 + , 119 + , 120 + , 121 + , 122 + , 95 + , -1 + , 97 + , 98 + , 99 + , 100 + , 101 + , 102 + , 103 + , 104 + , 105 + , 106 + , 107 + , 108 + , 109 + , 110 + , 111 + , 112 + , 113 + , 114 + , 115 , 116 + , 117 + , 118 + , 119 + , 120 + , 121 + , 122 + , 39 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , 48 + , 49 + , 50 + , 51 + , 52 + , 53 + , 54 + , 55 + , 56 + , 57 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , 39 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , 48 + , 49 + , 50 + , 51 + , 52 + , 53 + , 54 + , 55 + , 56 + , 57 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , 95 + , -1 + , 97 + , 98 + , 99 + , 100 + , 101 + , 102 + , 103 + , 104 + , 105 + , 106 + , 107 + , 108 + , 109 , 110 - , 9 - , 10 - , 11 - , 12 - , 13 + , 111 + , 112 + , 113 + , 114 + , 115 + , 116 + , 117 + , 118 + , 119 + , 120 + , 121 + , 122 + , 95 + , -1 + , 97 + , 98 + , 99 + , 100 + , 101 + , 102 + , 103 + , 104 , 105 + , 106 + , 107 + , 108 + , 109 + , 110 + , 111 + , 112 + , 113 + , 114 + , 115 + , 116 + , 117 + , 118 + , 119 + , 120 + , 121 + , 122 + , 39 , -1 , -1 , -1 , -1 , -1 - , 111 - , 32 , -1 - , 34 + , -1 + , -1 + , 48 + , 49 + , 50 + , 51 + , 52 + , 53 + , 54 + , 55 + , 56 + , 57 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , 39 + , -1 , -1 , -1 , -1 , -1 , -1 - , 40 - , 41 , -1 - , 32 , -1 - , 45 - , 46 - , 47 , 48 , 49 , 50 @@ -1889,44 +5054,44 @@ alex_check = listArray (0 :: Int, 1337) , 56 , 57 , -1 - , 59 , -1 - , 61 , -1 , -1 , -1 - , 65 - , 66 - , 67 - , 68 - , 69 - , 70 - , 71 - , 72 - , 73 - , 74 - , 75 - , 76 - , 77 - , 78 - , 79 - , 80 - , 81 - , 82 - , 83 - , 84 - , 85 - , 86 - , 87 - , 88 - , 89 - , 90 - , 91 - , 92 - , 93 , -1 , -1 , -1 + , -1 + , 95 + , -1 + , 97 + , 98 + , 99 + , 100 + , 101 + , 102 + , 103 + , 104 + , 105 + , 106 + , 107 + , 108 + , 109 + , 110 + , 111 + , 112 + , 113 + , 114 + , 115 + , 116 + , 117 + , 118 + , 119 + , 120 + , 121 + , 122 + , 95 + , -1 , 97 , 98 , 99 @@ -1953,6 +5118,15 @@ alex_check = listArray (0 :: Int, 1337) , 120 , 121 , 122 + , 39 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 , 48 , 49 , 50 @@ -1970,38 +5144,66 @@ alex_check = listArray (0 :: Int, 1337) , -1 , -1 , -1 - , 65 - , 66 - , 67 - , 68 - , 69 - , 70 - , 71 - , 72 - , 73 - , 74 - , 75 - , 76 - , 77 - , 78 - , 79 - , 80 - , 81 - , 82 - , 83 - , 84 - , 85 - , 86 - , 87 - , 88 - , 89 - , 90 + , -1 + , -1 + , 39 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , 48 + , 49 + , 50 + , 51 + , 52 + , 53 + , 54 + , 55 + , 56 + , 57 , -1 , -1 , -1 , -1 , -1 , -1 + , -1 + , -1 + , -1 + , 95 + , -1 + , 97 + , 98 + , 99 + , 100 + , 101 + , 102 + , 103 + , 104 + , 105 + , 106 + , 107 + , 108 + , 109 + , 110 + , 111 + , 112 + , 113 + , 114 + , 115 + , 116 + , 117 + , 118 + , 119 + , 120 + , 121 + , 122 + , 95 + , -1 , 97 , 98 , 99 @@ -2028,7 +5230,15 @@ alex_check = listArray (0 :: Int, 1337) , 120 , 121 , 122 - , 34 + , 39 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 , 48 , 49 , 50 @@ -2042,6 +5252,21 @@ alex_check = listArray (0 :: Int, 1337) , -1 , -1 , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , 39 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 , 48 , 49 , 50 @@ -2059,37 +5284,37 @@ alex_check = listArray (0 :: Int, 1337) , -1 , -1 , -1 - , 65 - , 66 - , 67 - , 68 - , 69 - , 70 - , 71 - , 72 - , 73 - , 74 - , 75 - , 76 - , 77 - , 78 - , 79 - , 80 - , 81 - , 82 - , 83 - , 84 - , 85 - , 86 - , 87 - , 88 - , 89 - , 90 - , -1 - , -1 , -1 , -1 + , 95 , -1 + , 97 + , 98 + , 99 + , 100 + , 101 + , 102 + , 103 + , 104 + , 105 + , 106 + , 107 + , 108 + , 109 + , 110 + , 111 + , 112 + , 113 + , 114 + , 115 + , 116 + , 117 + , 118 + , 119 + , 120 + , 121 + , 122 + , 95 , -1 , 97 , 98 @@ -2371,7 +5596,7 @@ alex_check = listArray (0 :: Int, 1337) , -1 , 39 , -1 - , -1 + , 69 , -1 , -1 , -1 @@ -2929,6 +6154,7 @@ alex_check = listArray (0 :: Int, 1337) , -1 , -1 , -1 + , 39 , -1 , -1 , -1 @@ -2937,6 +6163,16 @@ alex_check = listArray (0 :: Int, 1337) , -1 , -1 , -1 + , 48 + , 49 + , 50 + , 51 + , 52 + , 53 + , 54 + , 55 + , 56 + , 57 , -1 , -1 , -1 @@ -2946,17 +6182,34 @@ alex_check = listArray (0 :: Int, 1337) , -1 , -1 , -1 + , 95 , -1 - , -1 - , -1 - , -1 - , -1 - , -1 - , -1 - , -1 - , -1 - , -1 - , -1 + , 97 + , 98 + , 99 + , 100 + , 101 + , 102 + , 103 + , 104 + , 105 + , 106 + , 107 + , 108 + , 109 + , 110 + , 111 + , 112 + , 113 + , 114 + , 115 + , 116 + , 117 + , 118 + , 119 + , 120 + , 121 + , 122 , 95 , -1 , 97 @@ -3043,6 +6296,81 @@ alex_check = listArray (0 :: Int, 1337) , 120 , 121 , 122 + , 48 + , 49 + , 50 + , 51 + , 52 + , 53 + , 54 + , 55 + , 56 + , 57 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 , -1 , -1 , -1 @@ -3179,7 +6507,7 @@ alex_check = listArray (0 :: Int, 1337) ] alex_deflt :: Array Int Int -alex_deflt = listArray (0 :: Int, 39) +alex_deflt = listArray (0 :: Int, 73) [ -1 , -1 , -1 @@ -3189,6 +6517,40 @@ alex_deflt = listArray (0 :: Int, 39) , -1 , -1 , -1 + , 13 + , 13 + , -1 + , -1 + , 21 + , 21 + , -1 + , -1 + , -1 + , -1 + , 23 + , 23 + , 23 + , -1 + , 23 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 + , -1 , -1 , -1 , -1 @@ -3222,7 +6584,7 @@ alex_deflt = listArray (0 :: Int, 39) , -1 ] -alex_accept = listArray (0 :: Int, 39) +alex_accept = listArray (0 :: Int, 73) [ AlexAccNone , AlexAccNone , AlexAccNone @@ -3232,7 +6594,41 @@ alex_accept = listArray (0 :: Int, 39) , AlexAccNone , AlexAccNone , AlexAccNone + , AlexAccNone + , AlexAccNone + , AlexAccNone + , AlexAccNone + , AlexAccNone + , AlexAccNone + , AlexAccNone + , AlexAccNone + , AlexAccNone + , AlexAccNone + , AlexAccNone + , AlexAccNone + , AlexAccNone , AlexAccSkip + , AlexAccSkip + , AlexAcc 49 + , AlexAcc 48 + , AlexAcc 47 + , AlexAcc 46 + , AlexAcc 45 + , AlexAcc 44 + , AlexAcc 43 + , AlexAcc 42 + , AlexAcc 41 + , AlexAcc 40 + , AlexAcc 39 + , AlexAcc 38 + , AlexAcc 37 + , AlexAcc 36 + , AlexAcc 35 + , AlexAcc 34 + , AlexAcc 33 + , AlexAcc 32 + , AlexAcc 31 + , AlexAcc 30 , AlexAcc 29 , AlexAcc 28 , AlexAcc 27 @@ -3265,85 +6661,155 @@ alex_accept = listArray (0 :: Int, 39) , AlexAcc 0 ] -alex_actions = array (0 :: Int, 30) - [ (29,alex_action_1) - , (28,alex_action_2) - , (27,alex_action_3) - , (26,alex_action_4) - , (25,alex_action_5) - , (24,alex_action_6) - , (23,alex_action_7) - , (22,alex_action_8) - , (21,alex_action_9) - , (20,alex_action_10) - , (19,alex_action_11) - , (18,alex_action_12) - , (17,alex_action_13) - , (16,alex_action_14) - , (15,alex_action_15) - , (14,alex_action_16) - , (13,alex_action_16) - , (12,alex_action_16) - , (11,alex_action_16) - , (10,alex_action_16) - , (9,alex_action_16) - , (8,alex_action_16) - , (7,alex_action_16) - , (6,alex_action_16) - , (5,alex_action_16) - , (4,alex_action_16) - , (3,alex_action_16) - , (2,alex_action_17) - , (1,alex_action_18) - , (0,alex_action_19) +alex_actions = array (0 :: Int, 50) + [ (49,alex_action_2) + , (48,alex_action_3) + , (47,alex_action_4) + , (46,alex_action_5) + , (45,alex_action_6) + , (44,alex_action_7) + , (43,alex_action_8) + , (42,alex_action_9) + , (41,alex_action_10) + , (40,alex_action_11) + , (39,alex_action_12) + , (38,alex_action_13) + , (37,alex_action_14) + , (36,alex_action_15) + , (35,alex_action_16) + , (34,alex_action_17) + , (33,alex_action_18) + , (32,alex_action_19) + , (31,alex_action_20) + , (30,alex_action_21) + , (29,alex_action_22) + , (28,alex_action_23) + , (27,alex_action_24) + , (26,alex_action_25) + , (25,alex_action_25) + , (24,alex_action_25) + , (23,alex_action_25) + , (22,alex_action_25) + , (21,alex_action_25) + , (20,alex_action_25) + , (19,alex_action_25) + , (18,alex_action_25) + , (17,alex_action_25) + , (16,alex_action_25) + , (15,alex_action_25) + , (14,alex_action_25) + , (13,alex_action_25) + , (12,alex_action_25) + , (11,alex_action_25) + , (10,alex_action_25) + , (9,alex_action_25) + , (8,alex_action_25) + , (7,alex_action_25) + , (6,alex_action_25) + , (5,alex_action_25) + , (4,alex_action_25) + , (3,alex_action_26) + , (2,alex_action_27) + , (1,alex_action_28) + , (0,alex_action_29) ] -{-# LINE 36 "Lexer.x" #-} +{-# LINE 49 "Lexer.x" #-} --token type: -data Token = - TokenFilter | - TokenSetName String | - TokenFunc | - TokenNat Int | - TokenVarName String | - TokenTrue | - TokenFalse | - TokenString String | - TokenLeftSqBracket | - TokenRightSqBracket | - TokenArrow | - TokenisEqual | - TokenisNotEqual | - TokenLeftBracket | - TokenRightBracket | - TokenSemiCol | - TokenLambda | - TokenComma | - TokenFullStop | - TokenInSet | - TokenOutSet +data Token = + TokenFilter AlexPosn | + TokenIsEmpty AlexPosn | + TokenContains AlexPosn | + TokenSetName AlexPosn String | + TokenNat AlexPosn Int | + TokenPosNat AlexPosn Int | + TokenVarName AlexPosn String | + TokenTrue AlexPosn | + TokenFalse AlexPosn | + TokenString AlexPosn String | + TokenLeftSqBracket AlexPosn | + TokenRightSqBracket AlexPosn | + TokenArrow AlexPosn | + TokenisEqual AlexPosn | + TokenisNotEqual AlexPosn | + TokenPlus AlexPosn | + TokenLeftBracket AlexPosn | + TokenRightBracket AlexPosn | + TokenSemiCol AlexPosn | + TokenCol AlexPosn | + TokenLambda AlexPosn | + TokenComma AlexPosn | + TokenFullStop AlexPosn | + TokenInSet AlexPosn | + TokenXProduct AlexPosn | + TokenXXProduct AlexPosn | + TokenOutSet AlexPosn | + TokenMap AlexPosn deriving (Eq, Show) -alex_action_1 = \s -> TokenFilter -alex_action_2 = \s -> TokenTrue -alex_action_3 = \s -> TokenFalse -alex_action_4 = \s -> TokenInSet -alex_action_5 = \s -> TokenOutSet -alex_action_6 = \s -> TokenLeftSqBracket -alex_action_7 = \s -> TokenRightSqBracket -alex_action_8 = \s -> TokenArrow -alex_action_9 = \s -> TokenisEqual -alex_action_10 = \s -> TokenisNotEqual -alex_action_11 = \s -> TokenLeftBracket -alex_action_12 = \s -> TokenRightBracket -alex_action_13 = \s -> TokenSemiCol -alex_action_14 = \s -> TokenLambda -alex_action_15 = \s -> TokenFullStop -alex_action_16 = \s -> TokenVarName s -alex_action_17 = \s -> TokenSetName s -alex_action_18 = \s -> TokenNat (read s) -alex_action_19 = \s -> ((TokenString).init.tail) s + +pos :: Token -> AlexPosn + +pos token = case token of + (TokenFilter p ) -> p + (TokenIsEmpty p ) -> p + (TokenContains p ) -> p + (TokenSetName p _) -> p + (TokenNat p _) -> p + (TokenPosNat p _) -> p + (TokenVarName p _) -> p + (TokenTrue p ) -> p + (TokenFalse p ) -> p + (TokenString p _) -> p + (TokenLeftSqBracket p ) -> p + (TokenRightSqBracket p ) -> p + (TokenArrow p ) -> p + (TokenisEqual p ) -> p + (TokenisNotEqual p ) -> p + (TokenPlus p ) -> p + (TokenLeftBracket p ) -> p + (TokenRightBracket p ) -> p + (TokenSemiCol p ) -> p + (TokenCol p ) -> p + (TokenLambda p ) -> p + (TokenComma p ) -> p + (TokenFullStop p ) -> p + (TokenInSet p ) -> p + (TokenXProduct p ) -> p + (TokenXXProduct p ) -> p + (TokenOutSet p ) -> p + (TokenMap p) -> p + + +alex_action_2 = \p s -> TokenContains p +alex_action_3 = \p s -> TokenIsEmpty p +alex_action_4 = \p s -> TokenFilter p +alex_action_5 = \p s -> TokenTrue p +alex_action_6 = \p s -> TokenFalse p +alex_action_7 = \p s -> TokenInSet p +alex_action_8 = \p s -> TokenOutSet p +alex_action_9 = \p s -> TokenLeftSqBracket p +alex_action_10 = \p s -> TokenRightSqBracket p +alex_action_11 = \p s -> TokenArrow p +alex_action_12 = \p s -> TokenisEqual p +alex_action_13 = \p s -> TokenisNotEqual p +alex_action_14 = \p s -> TokenPlus p +alex_action_15 = \p s -> TokenLeftBracket p +alex_action_16 = \p s -> TokenRightBracket p +alex_action_17 = \p s -> TokenCol p +alex_action_18 = \p s -> TokenSemiCol p +alex_action_19 = \p s -> TokenLambda p +alex_action_20 = \p s -> TokenComma p +alex_action_21 = \p s -> TokenFullStop p +alex_action_22 = \p s -> TokenXProduct p +alex_action_23 = \p s -> TokenXXProduct p +alex_action_24 = \p s -> TokenMap p +alex_action_25 = \p s -> TokenVarName p s +alex_action_26 = \p s -> TokenSetName p s +alex_action_27 = \p s -> TokenPosNat p (read s) +alex_action_28 = \p s -> TokenNat p (read s) +alex_action_29 = \p s -> TokenString p (init.tail $ s) {-# LINE 1 "templates/GenericTemplate.hs" #-} -- ----------------------------------------------------------------------------- -- ALEX TEMPLATE diff --git a/Types.hs b/Types.hs index d5690df4eeafa7ba5d7e01925c7fa607f4a1cf1e..366147ff2a8216e3deeb65e1ea76325bd7cf1d85 100644 --- a/Types.hs +++ b/Types.hs @@ -7,16 +7,17 @@ type Environment = [(SymbolName, Expr)] -- (result of last calculation, other bi --data OutputLine = Let SymbolName Expr | Expr -- Expr always a function call for a set function, but not enforced by AST. type Output = [Expr] -data PredefFunc = XProduct | XXProduct | IsEqual | IsNotEqual | Add --operators +data PredefFunc = XProduct | XXProduct | IsEqual | IsNotEqual | Plus --operators | Map | Filter | RecordIndex -- [] operator - | IsEmpty | NotEmpty -- string functions + | RecordSelect + | IsEmpty | NotEmpty | Contains | IsSubString -- string functions deriving (Show, Eq) --n.b. these definitions do not enforce type checking! The use of any function or operator will be associated with a FuncCall. --Therefore, it is possible to have ASTs with ridiculous things where e.g. a XX product is applied to and int and a String, or a function call has an Int as a function! ---These issues will be checked via the type checker after the AST has been built. +--These issues can be checked via the type checker after the AST has been built. -- filter [A] (\(r) -> r[1] == "hello") -- FuncCall (PredefFunc Filter) [Var "A"] [FuncDef [] ["r"] [(FuncCall (PredefFunc IsEqual) [] (r[1]) ("hello"))]] @@ -34,6 +35,7 @@ data Expr = Control Expr [Expr] -- result of last computation, sequence of instr | Int Int | String String | Boolean Bool +-- | Nat Int deriving (Show, Eq) data Parameter = NamedParam SymbolName | TupleMatch [SymbolName] \ No newline at end of file