From 694166072044ef8de0666dc81ae87cbd75b521e8 Mon Sep 17 00:00:00 2001 From: p9malino26 <pm3g19@soton.ac.uk> Date: Wed, 28 Apr 2021 10:47:41 +0100 Subject: [PATCH] before User defined functions change --- A.csv | 6 +- Eval.hs | 29 +- Interpreter.hs | 5 +- Lexer.x | 11 +- Parser.hs | 1190 +++++++++++++++++++++++++++++++-------------- Parser.y | 83 ++-- solutions/pr3.cql | 8 +- solutions/pr5.cql | 2 +- 8 files changed, 897 insertions(+), 437 deletions(-) diff --git a/A.csv b/A.csv index 3c46149..ad83ff0 100644 --- a/A.csv +++ b/A.csv @@ -1,3 +1,3 @@ -patryk,malinowski -maram, jones -jeffrey,sylvester +Steven , Steve , Butcher +Dudley , Dudley , Timms +Gillian , Gillian , Carter \ No newline at end of file diff --git a/Eval.hs b/Eval.hs index b5174ad..90f24e3 100644 --- a/Eval.hs +++ b/Eval.hs @@ -13,8 +13,8 @@ addVar = notImplemented debug x = trace ("{{" ++ x ++ "}}") -eval env expr = let (eval', evalFull') = (eval env, evalFull env) in case expr of -- evaluates expression to weak-head normal form (i.e. top level data structure is not a FuncCall) - FuncCall func inputSets args -> case func of +eval env expr = traceShow expr $ let (eval', evalFull') = (eval env, evalFull env) in case expr of -- evaluates expression to weak-head normal form (i.e. top level data structure is not a FuncCall) + FuncCall func inputSets args -> let (inputSets', args') = (map eval' inputSets, map eval' args) in case func of (PredefFunc f) -> case f of Filter -> let (Set inputRecords,predicate) = (eval' $ head inputSets, eval' $ head args) in Set $ filter ((==Boolean True).(\r -> eval' $ FuncCall predicate [] [r])) $ map eval' inputRecords @@ -24,16 +24,16 @@ eval env expr = let (eval', evalFull') = (eval env, evalFull env) in case expr o (Set records:_) = inputSets (lambda:_) = args - IsEqual -> let (e1:e2:_) = args in -- TODO not sufficent. - Boolean (eval' e1 == eval' e2) + IsEqual -> let (e1:e2:_) = args' in -- TODO not sufficent. + Boolean (e1 == e2) - XProduct -> let ((Set l1): (Set l2):_) = map eval' inputSets in + XProduct -> let ((Set l1): (Set l2):_) = inputSets' in Set $ [ x `concatRecord` y | x <- l1, y <- l2] - RecordIndex -> let (Record recordData:Int index:_) = (map eval' args) in + RecordIndex -> let (Record recordData:Int index:_) = args' in recordData !! (index - 1) - RecordSelect -> debug (show expr) $ Record filteredList + RecordSelect -> Record filteredList where (Record recordData: indexes) = map eval' args -- indexesRaw = map (\(Int i) -> i - 1) indexes @@ -50,7 +50,6 @@ eval env expr = let (eval', evalFull') = (eval env, evalFull env) in case expr o Contains -> case args of (mainString:containsWhat:_) -> case (eval' mainString , eval' containsWhat) of (String a, String b) -> Boolean $ b `isSubList` a - 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) @@ -67,14 +66,17 @@ eval env expr = let (eval', evalFull') = (eval env, evalFull env) in case expr o (Var name) -> eval' $ findVar env name - (Let _ expr) -> expr + (Let _ _ expr) -> expr - + (If cond e1 e2) -> case eval' cond of + (Boolean True) -> e1 + (Boolean False) -> e2 control@(Control lastResult exprs) -> if null exprs then lastResult else let (newEnv, newControl) = evalControl1 env control in eval newEnv newControl + (Record exprs) -> Record $ map eval' exprs _ -> expr evalControl1 :: Environment -> Expr -> (Environment, Expr) @@ -82,10 +84,11 @@ evalControl1 env (Control last (currentExpr:exprs)) = (newEnv, Control newLast e where newLast = eval env $ case currentExpr of (FuncCall func [] args) -> FuncCall func [last] args + (Let False _ _) -> last _ -> currentExpr newEnv = case currentExpr of - (Let var expr) -> (var,expr):env + (Let _ var expr) -> (var,expr):env _ -> env evalFull = eval @@ -94,6 +97,6 @@ evalFull = eval --TODO implement properly concatRecord (Record r1) (Record r2) = Record (r1 ++ r2) -listStartsWith, isSubList :: [a] -> [a] -> Bool +listStartsWith, isSubList :: Eq a => [a] -> [a] -> Bool listStartsWith = notImplemented -- check if first list starts with second list -isSubList = notImplemented -- check if first list contains second list anywhere in it \ No newline at end of file +isSubList main sub = sub `isInfixOf` main-- check if first list contains second list anywhere in it \ No newline at end of file diff --git a/Interpreter.hs b/Interpreter.hs index b33e9d8..6d77627 100644 --- a/Interpreter.hs +++ b/Interpreter.hs @@ -16,8 +16,9 @@ main = do args <- getArgs case args of (srcname:_) -> interpret srcname - --_ -> interpret "solutions/pr3.cql" - _ -> interpret "sampleprogram.txt" + _ -> interpret "solutions/pr3.cql" + --_ -> interpret "extra-problems/ex1.cql" + --_ -> interpret "sampleprogram.txt" interpret :: FilePath -> IO () -- the main function, takes in file name, prints out result diff --git a/Lexer.x b/Lexer.x index e25b36b..bdec949 100644 --- a/Lexer.x +++ b/Lexer.x @@ -29,6 +29,8 @@ then {\p s -> TokenThen p } \.out {\p s -> TokenOutSet p } \[ {\p s -> TokenLeftSqBracket p } \] {\p s -> TokenRightSqBracket p } +\{ {\p s -> TokenLeftBrace p } +\} {\p s -> TokenRightBrace p } "->" {\p s -> TokenArrow p } "==" {\p s -> TokenisEqual p } "/=" {\p s -> TokenisNotEqual p } @@ -49,6 +51,8 @@ $upper[$alpha]* {\p s -> TokenSetName p s } --$posDigit$digit* {\p s -> TokenPosNat p (read s) } $digit+ {\p s -> TokenNat p (read s) } \"[$alpha $digit]+\" {\p s -> TokenString p (init.tail $ s) } +AND {\p s -> TokenBoolAND p } +OR {\p s -> TokenBoolOR p } { @@ -66,6 +70,8 @@ data Token = TokenString AlexPosn String | TokenLeftSqBracket AlexPosn | TokenRightSqBracket AlexPosn | + TokenLeftBrace AlexPosn | + TokenRightBrace AlexPosn | TokenArrow AlexPosn | TokenisEqual AlexPosn | TokenisNotEqual AlexPosn | @@ -86,7 +92,9 @@ data Token = TokenIf AlexPosn | TokenElse AlexPosn | TokenThen AlexPosn | - TokenEqual AlexPosn + TokenEqual AlexPosn | + TokenBoolAND AlexPosn | + TokenBoolOR AlexPosn deriving (Eq, Show) @@ -104,6 +112,7 @@ pos token = case token of (TokenFalse p ) -> p (TokenString p _) -> p (TokenLeftSqBracket p ) -> p + (TokenLeftBrace p ) -> p (TokenRightSqBracket p ) -> p (TokenArrow p ) -> p (TokenisEqual p ) -> p diff --git a/Parser.hs b/Parser.hs index 181d17c..a16a017 100644 --- a/Parser.hs +++ b/Parser.hs @@ -10,7 +10,7 @@ import Control.Monad (ap) -- parser produced by Happy Version 1.20.0 -data HappyAbsSyn t4 t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 +data HappyAbsSyn t4 t5 t6 t7 t8 t9 t10 t11 t12 t13 = HappyTerminal (Token) | HappyErrorToken Prelude.Int | HappyAbsSyn4 t4 @@ -23,63 +23,71 @@ data HappyAbsSyn t4 t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 | HappyAbsSyn11 t11 | HappyAbsSyn12 t12 | HappyAbsSyn13 t13 - | HappyAbsSyn14 t14 - | HappyAbsSyn15 t15 - | HappyAbsSyn16 t16 - | HappyAbsSyn17 t17 happyExpList :: Happy_Data_Array.Array Prelude.Int Prelude.Int -happyExpList = Happy_Data_Array.listArray (0,118) ([0,4,0,0,1,0,0,1,0,0,0,0,0,0,0,512,2048,0,0,128,0,128,0,0,18,512,0,4,0,0,0,0,0,0,0,0,1024,0,0,66,0,0,4096,0,0,4,0,0,0,0,0,4,0,1,0,16384,0,0,0,4096,0,1152,32768,0,0,0,0,0,8,0,0,1,0,1024,0,0,0,0,0,2048,0,0,0,0,0,64,0,2048,0,0,0,0,0,0,2,0,0,8,0,0,1,0,2048,0,32768,0,0,0,8,0,63488,32768,1,0,0,0,0,0,0,4608,0,0,4096,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,992,1536,0,0,0,0,0,0,0,8264,0,0,4,0,63488,32768,1,128,0,0,3968,6144,0,0,0,0,256,2,0,2048,0,0,0,0,57344,3,6,0,0,0,0,0,0,0,0,0,8,0,0,256,0,0,32768,0,8192,0,0,0,0,0,0,0,0,0 +happyExpList = Happy_Data_Array.listArray (0,182) ([16384,0,0,0,2,0,0,64,0,0,0,0,0,0,0,0,16384,0,4,0,0,8,0,64,0,0,52000,33792,798,2048,0,0,0,0,0,0,0,0,0,6144,1557,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,38464,2049,1597,0,1024,0,0,0,0,0,0,0,0,0,0,0,2304,0,0,22784,8198,6388,0,0,0,0,0,0,0,0,0,0,49152,12328,416,0,0,512,0,0,4096,0,8,0,0,35840,834,24,0,1,0,38464,2049,1597,45568,16396,12776,36864,101,36674,32769,812,31248,12,6500,53376,99,52000,33792,798,22784,8198,6388,51200,50,51105,16384,406,15624,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,4,0,0,34136,12294,0,0,0,32768,812,31248,12,0,16,0,0,2048,0,22784,8198,6388,51200,50,51105,16384,406,15624,6,6144,1541,50,0,0,0,0,0,0,0,1,0,0,2048,0,0,0,0,0,0,0,0,38464,2049,1597,0,1024,0,0,0,0,32768,812,31248,12,32768,0,0,52000,33792,798,0,0,0,51200,50,51105,0,0,0,0,0,0,0,0,0,0,0,512,0,0,0,0,0 ]) {-# NOINLINE happyExpListPerState #-} happyExpListPerState st = token_strs_expected - where token_strs = ["error","%dummy","%start_parseSource","Prog","SetDecl","SetDecls","SetNames","VarNames","SetFuncCalls","SetFuncCall","Func","Expr","Function","PredefFunc","Record","Exprs","Nats","filter","in","out","SetName","Nat","PosNat","VarName","true","false","Str","'['","']'","\"->\"","\"==\"","\"/=\"","'('","')'","';'","':'","'\\\\'","','","'.'","'+'","x","map","xx","contains","isEmpty","%eof"] - bit_start = st Prelude.* 46 - bit_end = (st Prelude.+ 1) Prelude.* 46 + where token_strs = ["error","%dummy","%start_parseSource","Prog","SetDecl","SetDecls","Instructions","Expr","PredefFunc","SetNames","VarNames","Exprs","Nats","filter","in","out","SetName","Nat","PosNat","VarName","true","false","Str","'['","'{'","'}'","']'","\"->\"","\"==\"","\"/=\"","'('","')'","';'","':'","'\\\\'","','","'.'","'+'","x","map","xx","contains","isEmpty","let","if","else","then","'='","or","and","%eof"] + bit_start = st Prelude.* 51 + bit_end = (st Prelude.+ 1) Prelude.* 51 read_bit = readArrayBit happyExpList bits = Prelude.map read_bit [bit_start..bit_end Prelude.- 1] - bits_indexed = Prelude.zip bits [0..45] + bits_indexed = Prelude.zip bits [0..50] token_strs_expected = Prelude.concatMap f bits_indexed f (Prelude.False, _) = [] f (Prelude.True, nr) = [token_strs Prelude.!! nr] -action_0 (19) = happyShift action_2 +action_0 (15) = happyShift action_2 action_0 (4) = happyGoto action_3 action_0 _ = happyFail (happyExpListPerState 0) -action_1 (19) = happyShift action_2 +action_1 (15) = happyShift action_2 action_1 _ = happyFail (happyExpListPerState 1) -action_2 (21) = happyShift action_6 +action_2 (17) = happyShift action_6 action_2 (5) = happyGoto action_4 action_2 (6) = happyGoto action_5 action_2 _ = happyFail (happyExpListPerState 2) -action_3 (46) = happyAccept +action_3 (51) = happyAccept action_3 _ = happyFail (happyExpListPerState 3) action_4 _ = happyReduce_3 -action_5 (20) = happyShift action_8 -action_5 (38) = happyShift action_9 +action_5 (16) = happyShift action_8 +action_5 (36) = happyShift action_9 action_5 _ = happyFail (happyExpListPerState 5) -action_6 (36) = happyShift action_7 +action_6 (34) = happyShift action_7 action_6 _ = happyFail (happyExpListPerState 6) -action_7 (22) = happyShift action_16 +action_7 (18) = happyShift action_28 action_7 _ = happyFail (happyExpListPerState 7) -action_8 (18) = happyShift action_13 -action_8 (21) = happyShift action_14 -action_8 (42) = happyShift action_15 -action_8 (9) = happyGoto action_11 -action_8 (10) = happyGoto action_12 +action_8 (14) = happyShift action_14 +action_8 (17) = happyShift action_15 +action_8 (18) = happyShift action_16 +action_8 (20) = happyShift action_17 +action_8 (23) = happyShift action_18 +action_8 (24) = happyShift action_19 +action_8 (35) = happyShift action_20 +action_8 (40) = happyShift action_21 +action_8 (42) = happyShift action_22 +action_8 (43) = happyShift action_23 +action_8 (44) = happyShift action_24 +action_8 (45) = happyShift action_25 +action_8 (49) = happyShift action_26 +action_8 (50) = happyShift action_27 +action_8 (7) = happyGoto action_11 +action_8 (8) = happyGoto action_12 +action_8 (9) = happyGoto action_13 action_8 _ = happyFail (happyExpListPerState 8) -action_9 (21) = happyShift action_6 +action_9 (17) = happyShift action_6 action_9 (5) = happyGoto action_10 action_9 _ = happyFail (happyExpListPerState 9) @@ -87,234 +95,606 @@ action_10 _ = happyReduce_4 action_11 _ = happyReduce_1 -action_12 (35) = happyShift action_21 +action_12 (24) = happyShift action_35 +action_12 (25) = happyShift action_36 +action_12 (29) = happyShift action_37 +action_12 (31) = happyShift action_38 +action_12 (33) = happyShift action_39 +action_12 (38) = happyShift action_40 +action_12 (39) = happyShift action_41 +action_12 (49) = happyShift action_42 +action_12 (50) = happyShift action_43 action_12 _ = happyFail (happyExpListPerState 12) -action_13 (28) = happyShift action_19 -action_13 (33) = happyShift action_20 -action_13 _ = happyFail (happyExpListPerState 13) +action_13 _ = happyReduce_23 -action_14 (41) = happyShift action_18 -action_14 _ = happyFail (happyExpListPerState 14) +action_14 _ = happyReduce_27 -action_15 (33) = happyShift action_17 -action_15 _ = happyFail (happyExpListPerState 15) +action_15 _ = happyReduce_21 -action_16 _ = happyReduce_2 +action_16 _ = happyReduce_22 -action_17 (37) = happyShift action_24 -action_17 (11) = happyGoto action_27 -action_17 _ = happyFail (happyExpListPerState 17) +action_17 _ = happyReduce_20 -action_18 (21) = happyShift action_26 -action_18 _ = happyFail (happyExpListPerState 18) +action_18 _ = happyReduce_15 -action_19 (21) = happyShift action_25 +action_19 (14) = happyShift action_14 +action_19 (17) = happyShift action_15 +action_19 (18) = happyShift action_16 +action_19 (20) = happyShift action_17 +action_19 (23) = happyShift action_18 +action_19 (24) = happyShift action_19 +action_19 (35) = happyShift action_20 +action_19 (40) = happyShift action_21 +action_19 (42) = happyShift action_22 +action_19 (43) = happyShift action_23 +action_19 (44) = happyShift action_24 +action_19 (45) = happyShift action_25 +action_19 (49) = happyShift action_26 +action_19 (50) = happyShift action_27 +action_19 (8) = happyGoto action_33 +action_19 (9) = happyGoto action_13 +action_19 (12) = happyGoto action_34 action_19 _ = happyFail (happyExpListPerState 19) -action_20 (37) = happyShift action_24 -action_20 (11) = happyGoto action_23 +action_20 (31) = happyShift action_32 action_20 _ = happyFail (happyExpListPerState 20) -action_21 (18) = happyShift action_13 -action_21 (21) = happyShift action_14 -action_21 (42) = happyShift action_15 -action_21 (9) = happyGoto action_22 -action_21 (10) = happyGoto action_12 -action_21 _ = happyReduce_9 - -action_22 _ = happyReduce_10 - -action_23 (34) = happyShift action_31 -action_23 _ = happyFail (happyExpListPerState 23) - -action_24 (33) = happyShift action_30 +action_21 _ = happyReduce_30 + +action_22 _ = happyReduce_28 + +action_23 (24) = happyReduce_29 +action_23 (25) = happyReduce_29 +action_23 (26) = happyReduce_29 +action_23 (27) = happyReduce_29 +action_23 (29) = happyReduce_29 +action_23 (31) = happyReduce_29 +action_23 (32) = happyReduce_29 +action_23 (33) = happyReduce_29 +action_23 (36) = happyReduce_29 +action_23 (38) = happyReduce_29 +action_23 (39) = happyReduce_29 +action_23 (46) = happyReduce_29 +action_23 (47) = happyReduce_29 +action_23 (49) = happyReduce_29 +action_23 (50) = happyReduce_29 +action_23 _ = happyReduce_29 + +action_24 (17) = happyShift action_30 +action_24 (20) = happyShift action_31 action_24 _ = happyFail (happyExpListPerState 24) -action_25 (29) = happyShift action_29 +action_25 (14) = happyShift action_14 +action_25 (17) = happyShift action_15 +action_25 (18) = happyShift action_16 +action_25 (20) = happyShift action_17 +action_25 (23) = happyShift action_18 +action_25 (24) = happyShift action_19 +action_25 (35) = happyShift action_20 +action_25 (40) = happyShift action_21 +action_25 (42) = happyShift action_22 +action_25 (43) = happyShift action_23 +action_25 (44) = happyShift action_24 +action_25 (45) = happyShift action_25 +action_25 (49) = happyShift action_26 +action_25 (50) = happyShift action_27 +action_25 (8) = happyGoto action_29 +action_25 (9) = happyGoto action_13 action_25 _ = happyFail (happyExpListPerState 25) -action_26 _ = happyReduce_14 +action_26 _ = happyReduce_32 -action_27 (34) = happyShift action_28 -action_27 _ = happyFail (happyExpListPerState 27) +action_27 _ = happyReduce_31 -action_28 _ = happyReduce_13 +action_28 _ = happyReduce_2 -action_29 (33) = happyShift action_34 +action_29 (24) = happyShift action_35 +action_29 (25) = happyShift action_36 +action_29 (29) = happyShift action_37 +action_29 (31) = happyShift action_38 +action_29 (38) = happyShift action_40 +action_29 (39) = happyShift action_41 +action_29 (47) = happyShift action_59 +action_29 (49) = happyShift action_42 +action_29 (50) = happyShift action_43 action_29 _ = happyFail (happyExpListPerState 29) -action_30 (24) = happyShift action_33 -action_30 (8) = happyGoto action_32 +action_30 (48) = happyShift action_58 action_30 _ = happyFail (happyExpListPerState 30) -action_31 _ = happyReduce_12 +action_31 (48) = happyShift action_57 +action_31 _ = happyFail (happyExpListPerState 31) -action_32 (34) = happyShift action_37 +action_32 (20) = happyShift action_56 +action_32 (11) = happyGoto action_55 action_32 _ = happyFail (happyExpListPerState 32) -action_33 (38) = happyShift action_36 -action_33 _ = happyReduce_7 - -action_34 (37) = happyShift action_24 -action_34 (11) = happyGoto action_35 +action_33 (24) = happyShift action_35 +action_33 (25) = happyShift action_36 +action_33 (29) = happyShift action_37 +action_33 (31) = happyShift action_38 +action_33 (36) = happyShift action_54 +action_33 (38) = happyShift action_40 +action_33 (39) = happyShift action_41 +action_33 (49) = happyShift action_42 +action_33 (50) = happyShift action_43 +action_33 _ = happyReduce_37 + +action_34 (27) = happyShift action_53 action_34 _ = happyFail (happyExpListPerState 34) -action_35 (34) = happyShift action_40 +action_35 (14) = happyShift action_14 +action_35 (17) = happyShift action_15 +action_35 (18) = happyShift action_16 +action_35 (20) = happyShift action_17 +action_35 (23) = happyShift action_18 +action_35 (24) = happyShift action_19 +action_35 (35) = happyShift action_20 +action_35 (40) = happyShift action_21 +action_35 (42) = happyShift action_22 +action_35 (43) = happyShift action_23 +action_35 (44) = happyShift action_24 +action_35 (45) = happyShift action_25 +action_35 (49) = happyShift action_26 +action_35 (50) = happyShift action_27 +action_35 (8) = happyGoto action_52 +action_35 (9) = happyGoto action_13 action_35 _ = happyFail (happyExpListPerState 35) -action_36 (24) = happyShift action_33 -action_36 (8) = happyGoto action_39 +action_36 (14) = happyShift action_14 +action_36 (17) = happyShift action_15 +action_36 (18) = happyShift action_16 +action_36 (20) = happyShift action_17 +action_36 (23) = happyShift action_18 +action_36 (24) = happyShift action_19 +action_36 (35) = happyShift action_20 +action_36 (40) = happyShift action_21 +action_36 (42) = happyShift action_22 +action_36 (43) = happyShift action_23 +action_36 (44) = happyShift action_24 +action_36 (45) = happyShift action_25 +action_36 (49) = happyShift action_26 +action_36 (50) = happyShift action_27 +action_36 (8) = happyGoto action_33 +action_36 (9) = happyGoto action_13 +action_36 (12) = happyGoto action_51 action_36 _ = happyFail (happyExpListPerState 36) -action_37 (30) = happyShift action_38 +action_37 (14) = happyShift action_14 +action_37 (17) = happyShift action_15 +action_37 (18) = happyShift action_16 +action_37 (20) = happyShift action_17 +action_37 (23) = happyShift action_18 +action_37 (24) = happyShift action_19 +action_37 (35) = happyShift action_20 +action_37 (40) = happyShift action_21 +action_37 (42) = happyShift action_22 +action_37 (43) = happyShift action_23 +action_37 (44) = happyShift action_24 +action_37 (45) = happyShift action_25 +action_37 (49) = happyShift action_26 +action_37 (50) = happyShift action_27 +action_37 (8) = happyGoto action_50 +action_37 (9) = happyGoto action_13 action_37 _ = happyFail (happyExpListPerState 37) -action_38 (24) = happyShift action_45 -action_38 (25) = happyShift action_46 -action_38 (26) = happyShift action_47 -action_38 (27) = happyShift action_48 -action_38 (28) = happyShift action_49 -action_38 (44) = happyShift action_50 -action_38 (45) = happyShift action_51 -action_38 (12) = happyGoto action_41 -action_38 (13) = happyGoto action_42 -action_38 (14) = happyGoto action_43 -action_38 (15) = happyGoto action_44 +action_38 (14) = happyShift action_14 +action_38 (17) = happyShift action_15 +action_38 (18) = happyShift action_16 +action_38 (20) = happyShift action_17 +action_38 (23) = happyShift action_18 +action_38 (24) = happyShift action_19 +action_38 (35) = happyShift action_20 +action_38 (40) = happyShift action_21 +action_38 (42) = happyShift action_22 +action_38 (43) = happyShift action_23 +action_38 (44) = happyShift action_24 +action_38 (45) = happyShift action_25 +action_38 (49) = happyShift action_26 +action_38 (50) = happyShift action_27 +action_38 (8) = happyGoto action_33 +action_38 (9) = happyGoto action_13 +action_38 (12) = happyGoto action_49 action_38 _ = happyFail (happyExpListPerState 38) -action_39 _ = happyReduce_8 - -action_40 _ = happyReduce_11 - -action_41 (28) = happyShift action_55 -action_41 (31) = happyShift action_56 -action_41 _ = happyReduce_15 - -action_42 (33) = happyShift action_54 +action_39 (14) = happyShift action_14 +action_39 (17) = happyShift action_15 +action_39 (18) = happyShift action_16 +action_39 (20) = happyShift action_17 +action_39 (23) = happyShift action_18 +action_39 (24) = happyShift action_19 +action_39 (35) = happyShift action_20 +action_39 (40) = happyShift action_21 +action_39 (42) = happyShift action_22 +action_39 (43) = happyShift action_23 +action_39 (44) = happyShift action_24 +action_39 (45) = happyShift action_25 +action_39 (49) = happyShift action_26 +action_39 (50) = happyShift action_27 +action_39 (7) = happyGoto action_48 +action_39 (8) = happyGoto action_12 +action_39 (9) = happyGoto action_13 +action_39 _ = happyReduce_5 + +action_40 (14) = happyShift action_14 +action_40 (17) = happyShift action_15 +action_40 (18) = happyShift action_16 +action_40 (20) = happyShift action_17 +action_40 (23) = happyShift action_18 +action_40 (24) = happyShift action_19 +action_40 (35) = happyShift action_20 +action_40 (40) = happyShift action_21 +action_40 (42) = happyShift action_22 +action_40 (43) = happyShift action_23 +action_40 (44) = happyShift action_24 +action_40 (45) = happyShift action_25 +action_40 (49) = happyShift action_26 +action_40 (50) = happyShift action_27 +action_40 (8) = happyGoto action_47 +action_40 (9) = happyGoto action_13 +action_40 _ = happyFail (happyExpListPerState 40) + +action_41 (14) = happyShift action_14 +action_41 (17) = happyShift action_15 +action_41 (18) = happyShift action_16 +action_41 (20) = happyShift action_17 +action_41 (23) = happyShift action_18 +action_41 (24) = happyShift action_19 +action_41 (35) = happyShift action_20 +action_41 (40) = happyShift action_21 +action_41 (42) = happyShift action_22 +action_41 (43) = happyShift action_23 +action_41 (44) = happyShift action_24 +action_41 (45) = happyShift action_25 +action_41 (49) = happyShift action_26 +action_41 (50) = happyShift action_27 +action_41 (8) = happyGoto action_46 +action_41 (9) = happyGoto action_13 +action_41 _ = happyFail (happyExpListPerState 41) + +action_42 (14) = happyShift action_14 +action_42 (17) = happyShift action_15 +action_42 (18) = happyShift action_16 +action_42 (20) = happyShift action_17 +action_42 (23) = happyShift action_18 +action_42 (24) = happyShift action_19 +action_42 (35) = happyShift action_20 +action_42 (40) = happyShift action_21 +action_42 (42) = happyShift action_22 +action_42 (43) = happyShift action_23 +action_42 (44) = happyShift action_24 +action_42 (45) = happyShift action_25 +action_42 (49) = happyShift action_26 +action_42 (50) = happyShift action_27 +action_42 (8) = happyGoto action_45 +action_42 (9) = happyGoto action_13 action_42 _ = happyFail (happyExpListPerState 42) -action_43 _ = happyReduce_25 - -action_44 _ = happyReduce_22 - -action_45 (33) = happyReduce_26 -action_45 _ = happyReduce_21 - -action_46 _ = happyReduce_23 - -action_47 _ = happyReduce_24 - -action_48 _ = happyReduce_20 - -action_49 (24) = happyShift action_45 -action_49 (25) = happyShift action_46 -action_49 (26) = happyShift action_47 -action_49 (27) = happyShift action_48 -action_49 (28) = happyShift action_49 -action_49 (44) = happyShift action_50 -action_49 (45) = happyShift action_51 -action_49 (12) = happyGoto action_52 -action_49 (13) = happyGoto action_42 -action_49 (14) = happyGoto action_43 -action_49 (15) = happyGoto action_44 -action_49 (16) = happyGoto action_53 +action_43 (14) = happyShift action_14 +action_43 (17) = happyShift action_15 +action_43 (18) = happyShift action_16 +action_43 (20) = happyShift action_17 +action_43 (23) = happyShift action_18 +action_43 (24) = happyShift action_19 +action_43 (35) = happyShift action_20 +action_43 (40) = happyShift action_21 +action_43 (42) = happyShift action_22 +action_43 (43) = happyShift action_23 +action_43 (44) = happyShift action_24 +action_43 (45) = happyShift action_25 +action_43 (49) = happyShift action_26 +action_43 (50) = happyShift action_27 +action_43 (8) = happyGoto action_44 +action_43 (9) = happyGoto action_13 +action_43 _ = happyFail (happyExpListPerState 43) + +action_44 (24) = happyShift action_35 +action_44 (25) = happyShift action_36 +action_44 (29) = happyShift action_37 +action_44 (31) = happyShift action_38 +action_44 (38) = happyShift action_40 +action_44 (39) = happyShift action_41 +action_44 (49) = happyShift action_42 +action_44 (50) = happyShift action_43 +action_44 _ = happyReduce_25 + +action_45 (24) = happyShift action_35 +action_45 (25) = happyShift action_36 +action_45 (29) = happyShift action_37 +action_45 (31) = happyShift action_38 +action_45 (38) = happyShift action_40 +action_45 (39) = happyShift action_41 +action_45 (49) = happyShift action_42 +action_45 (50) = happyShift action_43 +action_45 _ = happyReduce_24 + +action_46 (24) = happyShift action_35 +action_46 (25) = happyShift action_36 +action_46 (29) = happyShift action_37 +action_46 (31) = happyShift action_38 +action_46 (38) = happyShift action_40 +action_46 (39) = happyShift action_41 +action_46 (49) = happyShift action_42 +action_46 (50) = happyShift action_43 +action_46 _ = happyReduce_10 + +action_47 (24) = happyShift action_35 +action_47 (25) = happyShift action_36 +action_47 (29) = happyShift action_37 +action_47 (31) = happyShift action_38 +action_47 (38) = happyShift action_40 +action_47 (39) = happyShift action_41 +action_47 (49) = happyShift action_42 +action_47 (50) = happyShift action_43 +action_47 _ = happyReduce_11 + +action_48 _ = happyReduce_6 + +action_49 (32) = happyShift action_69 action_49 _ = happyFail (happyExpListPerState 49) -action_50 _ = happyReduce_28 - -action_51 _ = happyReduce_27 - -action_52 (28) = happyShift action_55 -action_52 (31) = happyShift action_56 -action_52 (38) = happyShift action_61 -action_52 _ = happyReduce_30 - -action_53 (29) = happyShift action_60 -action_53 _ = happyFail (happyExpListPerState 53) - -action_54 (24) = happyShift action_45 -action_54 (25) = happyShift action_46 -action_54 (26) = happyShift action_47 -action_54 (27) = happyShift action_48 -action_54 (28) = happyShift action_49 -action_54 (44) = happyShift action_50 -action_54 (45) = happyShift action_51 -action_54 (12) = happyGoto action_52 -action_54 (13) = happyGoto action_42 -action_54 (14) = happyGoto action_43 -action_54 (15) = happyGoto action_44 -action_54 (16) = happyGoto action_59 +action_50 (24) = happyShift action_35 +action_50 (25) = happyShift action_36 +action_50 (29) = happyShift action_37 +action_50 (31) = happyShift action_38 +action_50 (38) = happyShift action_40 +action_50 (39) = happyShift action_41 +action_50 (49) = happyShift action_42 +action_50 (50) = happyShift action_43 +action_50 _ = happyReduce_9 + +action_51 (26) = happyShift action_68 +action_51 _ = happyFail (happyExpListPerState 51) + +action_52 (24) = happyShift action_35 +action_52 (25) = happyShift action_36 +action_52 (27) = happyShift action_66 +action_52 (29) = happyShift action_37 +action_52 (31) = happyShift action_38 +action_52 (36) = happyShift action_67 +action_52 (38) = happyShift action_40 +action_52 (39) = happyShift action_41 +action_52 (49) = happyShift action_42 +action_52 (50) = happyShift action_43 +action_52 _ = happyFail (happyExpListPerState 52) + +action_53 _ = happyReduce_14 + +action_54 (14) = happyShift action_14 +action_54 (17) = happyShift action_15 +action_54 (18) = happyShift action_16 +action_54 (20) = happyShift action_17 +action_54 (23) = happyShift action_18 +action_54 (24) = happyShift action_19 +action_54 (35) = happyShift action_20 +action_54 (40) = happyShift action_21 +action_54 (42) = happyShift action_22 +action_54 (43) = happyShift action_23 +action_54 (44) = happyShift action_24 +action_54 (45) = happyShift action_25 +action_54 (49) = happyShift action_26 +action_54 (50) = happyShift action_27 +action_54 (8) = happyGoto action_33 +action_54 (9) = happyGoto action_13 +action_54 (12) = happyGoto action_65 action_54 _ = happyFail (happyExpListPerState 54) -action_55 (22) = happyShift action_58 +action_55 (32) = happyShift action_64 action_55 _ = happyFail (happyExpListPerState 55) -action_56 (24) = happyShift action_45 -action_56 (25) = happyShift action_46 -action_56 (26) = happyShift action_47 -action_56 (27) = happyShift action_48 -action_56 (28) = happyShift action_49 -action_56 (44) = happyShift action_50 -action_56 (45) = happyShift action_51 -action_56 (12) = happyGoto action_57 -action_56 (13) = happyGoto action_42 -action_56 (14) = happyGoto action_43 -action_56 (15) = happyGoto action_44 -action_56 _ = happyFail (happyExpListPerState 56) - -action_57 (28) = happyShift action_55 -action_57 _ = happyReduce_16 - -action_58 (29) = happyShift action_64 -action_58 (38) = happyShift action_65 +action_56 (36) = happyShift action_63 +action_56 _ = happyReduce_35 + +action_57 (14) = happyShift action_14 +action_57 (17) = happyShift action_15 +action_57 (18) = happyShift action_16 +action_57 (20) = happyShift action_17 +action_57 (23) = happyShift action_18 +action_57 (24) = happyShift action_19 +action_57 (35) = happyShift action_20 +action_57 (40) = happyShift action_21 +action_57 (42) = happyShift action_22 +action_57 (43) = happyShift action_23 +action_57 (44) = happyShift action_24 +action_57 (45) = happyShift action_25 +action_57 (49) = happyShift action_26 +action_57 (50) = happyShift action_27 +action_57 (8) = happyGoto action_62 +action_57 (9) = happyGoto action_13 +action_57 _ = happyFail (happyExpListPerState 57) + +action_58 (14) = happyShift action_14 +action_58 (17) = happyShift action_15 +action_58 (18) = happyShift action_16 +action_58 (20) = happyShift action_17 +action_58 (23) = happyShift action_18 +action_58 (24) = happyShift action_19 +action_58 (35) = happyShift action_20 +action_58 (40) = happyShift action_21 +action_58 (42) = happyShift action_22 +action_58 (43) = happyShift action_23 +action_58 (44) = happyShift action_24 +action_58 (45) = happyShift action_25 +action_58 (49) = happyShift action_26 +action_58 (50) = happyShift action_27 +action_58 (8) = happyGoto action_61 +action_58 (9) = happyGoto action_13 action_58 _ = happyFail (happyExpListPerState 58) -action_59 (34) = happyShift action_63 +action_59 (14) = happyShift action_14 +action_59 (17) = happyShift action_15 +action_59 (18) = happyShift action_16 +action_59 (20) = happyShift action_17 +action_59 (23) = happyShift action_18 +action_59 (24) = happyShift action_19 +action_59 (35) = happyShift action_20 +action_59 (40) = happyShift action_21 +action_59 (42) = happyShift action_22 +action_59 (43) = happyShift action_23 +action_59 (44) = happyShift action_24 +action_59 (45) = happyShift action_25 +action_59 (49) = happyShift action_26 +action_59 (50) = happyShift action_27 +action_59 (8) = happyGoto action_60 +action_59 (9) = happyGoto action_13 action_59 _ = happyFail (happyExpListPerState 59) -action_60 _ = happyReduce_29 - -action_61 (24) = happyShift action_45 -action_61 (25) = happyShift action_46 -action_61 (26) = happyShift action_47 -action_61 (27) = happyShift action_48 -action_61 (28) = happyShift action_49 -action_61 (44) = happyShift action_50 -action_61 (45) = happyShift action_51 -action_61 (12) = happyGoto action_52 -action_61 (13) = happyGoto action_42 -action_61 (14) = happyGoto action_43 -action_61 (15) = happyGoto action_44 -action_61 (16) = happyGoto action_62 -action_61 _ = happyFail (happyExpListPerState 61) - -action_62 _ = happyReduce_31 - -action_63 _ = happyReduce_19 - -action_64 _ = happyReduce_17 - -action_65 (22) = happyShift action_67 -action_65 (17) = happyGoto action_66 -action_65 _ = happyFail (happyExpListPerState 65) - -action_66 (29) = happyShift action_69 -action_66 _ = happyFail (happyExpListPerState 66) - -action_67 (38) = happyShift action_68 -action_67 _ = happyReduce_32 - -action_68 (22) = happyShift action_67 -action_68 (17) = happyGoto action_70 +action_60 (24) = happyShift action_35 +action_60 (25) = happyShift action_36 +action_60 (29) = happyShift action_37 +action_60 (31) = happyShift action_38 +action_60 (38) = happyShift action_40 +action_60 (39) = happyShift action_41 +action_60 (46) = happyShift action_74 +action_60 (49) = happyShift action_42 +action_60 (50) = happyShift action_43 +action_60 _ = happyFail (happyExpListPerState 60) + +action_61 (24) = happyShift action_35 +action_61 (25) = happyShift action_36 +action_61 (29) = happyShift action_37 +action_61 (31) = happyShift action_38 +action_61 (38) = happyShift action_40 +action_61 (39) = happyShift action_41 +action_61 (49) = happyShift action_42 +action_61 (50) = happyShift action_43 +action_61 _ = happyReduce_18 + +action_62 (24) = happyShift action_35 +action_62 (25) = happyShift action_36 +action_62 (29) = happyShift action_37 +action_62 (31) = happyShift action_38 +action_62 (38) = happyShift action_40 +action_62 (39) = happyShift action_41 +action_62 (49) = happyShift action_42 +action_62 (50) = happyShift action_43 +action_62 _ = happyReduce_19 + +action_63 (20) = happyShift action_56 +action_63 (11) = happyGoto action_73 +action_63 _ = happyFail (happyExpListPerState 63) + +action_64 (28) = happyShift action_72 +action_64 _ = happyFail (happyExpListPerState 64) + +action_65 _ = happyReduce_38 + +action_66 _ = happyReduce_12 + +action_67 (14) = happyShift action_14 +action_67 (17) = happyShift action_15 +action_67 (18) = happyShift action_16 +action_67 (20) = happyShift action_17 +action_67 (23) = happyShift action_18 +action_67 (24) = happyShift action_19 +action_67 (35) = happyShift action_20 +action_67 (40) = happyShift action_21 +action_67 (42) = happyShift action_22 +action_67 (43) = happyShift action_23 +action_67 (44) = happyShift action_24 +action_67 (45) = happyShift action_25 +action_67 (49) = happyShift action_26 +action_67 (50) = happyShift action_27 +action_67 (8) = happyGoto action_33 +action_67 (9) = happyGoto action_13 +action_67 (12) = happyGoto action_71 +action_67 _ = happyFail (happyExpListPerState 67) + +action_68 (31) = happyShift action_70 action_68 _ = happyFail (happyExpListPerState 68) -action_69 _ = happyReduce_18 - -action_70 _ = happyReduce_33 +action_69 _ = happyReduce_7 + +action_70 (14) = happyShift action_14 +action_70 (17) = happyShift action_15 +action_70 (18) = happyShift action_16 +action_70 (20) = happyShift action_17 +action_70 (23) = happyShift action_18 +action_70 (24) = happyShift action_19 +action_70 (35) = happyShift action_20 +action_70 (40) = happyShift action_21 +action_70 (42) = happyShift action_22 +action_70 (43) = happyShift action_23 +action_70 (44) = happyShift action_24 +action_70 (45) = happyShift action_25 +action_70 (49) = happyShift action_26 +action_70 (50) = happyShift action_27 +action_70 (8) = happyGoto action_33 +action_70 (9) = happyGoto action_13 +action_70 (12) = happyGoto action_78 +action_70 _ = happyFail (happyExpListPerState 70) + +action_71 (27) = happyShift action_77 +action_71 _ = happyFail (happyExpListPerState 71) + +action_72 (14) = happyShift action_14 +action_72 (17) = happyShift action_15 +action_72 (18) = happyShift action_16 +action_72 (20) = happyShift action_17 +action_72 (23) = happyShift action_18 +action_72 (24) = happyShift action_19 +action_72 (35) = happyShift action_20 +action_72 (40) = happyShift action_21 +action_72 (42) = happyShift action_22 +action_72 (43) = happyShift action_23 +action_72 (44) = happyShift action_24 +action_72 (45) = happyShift action_25 +action_72 (49) = happyShift action_26 +action_72 (50) = happyShift action_27 +action_72 (8) = happyGoto action_76 +action_72 (9) = happyGoto action_13 +action_72 _ = happyFail (happyExpListPerState 72) + +action_73 _ = happyReduce_36 + +action_74 (14) = happyShift action_14 +action_74 (17) = happyShift action_15 +action_74 (18) = happyShift action_16 +action_74 (20) = happyShift action_17 +action_74 (23) = happyShift action_18 +action_74 (24) = happyShift action_19 +action_74 (35) = happyShift action_20 +action_74 (40) = happyShift action_21 +action_74 (42) = happyShift action_22 +action_74 (43) = happyShift action_23 +action_74 (44) = happyShift action_24 +action_74 (45) = happyShift action_25 +action_74 (49) = happyShift action_26 +action_74 (50) = happyShift action_27 +action_74 (8) = happyGoto action_75 +action_74 (9) = happyGoto action_13 +action_74 _ = happyFail (happyExpListPerState 74) + +action_75 (24) = happyShift action_35 +action_75 (25) = happyShift action_36 +action_75 (29) = happyShift action_37 +action_75 (31) = happyShift action_38 +action_75 (38) = happyShift action_40 +action_75 (39) = happyShift action_41 +action_75 (49) = happyShift action_42 +action_75 (50) = happyShift action_43 +action_75 _ = happyReduce_17 + +action_76 (24) = happyShift action_35 +action_76 (25) = happyShift action_36 +action_76 (29) = happyShift action_37 +action_76 (31) = happyShift action_38 +action_76 (38) = happyShift action_40 +action_76 (39) = happyShift action_41 +action_76 (49) = happyShift action_42 +action_76 (50) = happyShift action_43 +action_76 _ = happyReduce_16 + +action_77 _ = happyReduce_13 + +action_78 (32) = happyShift action_79 +action_78 _ = happyFail (happyExpListPerState 78) + +action_79 _ = happyReduce_8 happyReduce_1 = happyReduce 4 4 happyReduction_1 -happyReduction_1 ((HappyAbsSyn9 happy_var_4) `HappyStk` +happyReduction_1 ((HappyAbsSyn7 happy_var_4) `HappyStk` _ `HappyStk` (HappyAbsSyn6 happy_var_2) `HappyStk` _ `HappyStk` @@ -348,288 +728,354 @@ happyReduction_4 (HappyAbsSyn5 happy_var_3) ) happyReduction_4 _ _ _ = notHappyAtAll -happyReduce_5 = happySpecReduce_1 7 happyReduction_5 -happyReduction_5 (HappyTerminal (TokenSetName _ happy_var_1)) +happyReduce_5 = happySpecReduce_2 7 happyReduction_5 +happyReduction_5 _ + (HappyAbsSyn8 happy_var_1) = HappyAbsSyn7 ([happy_var_1] ) -happyReduction_5 _ = notHappyAtAll +happyReduction_5 _ _ = notHappyAtAll happyReduce_6 = happySpecReduce_3 7 happyReduction_6 happyReduction_6 (HappyAbsSyn7 happy_var_3) _ - (HappyTerminal (TokenSetName _ happy_var_1)) + (HappyAbsSyn8 happy_var_1) = HappyAbsSyn7 (happy_var_1:happy_var_3 ) happyReduction_6 _ _ _ = notHappyAtAll -happyReduce_7 = happySpecReduce_1 8 happyReduction_7 -happyReduction_7 (HappyTerminal (TokenVarName _ happy_var_1)) - = HappyAbsSyn8 - ([happy_var_1] - ) -happyReduction_7 _ = notHappyAtAll +happyReduce_7 = happyReduce 4 8 happyReduction_7 +happyReduction_7 (_ `HappyStk` + (HappyAbsSyn12 happy_var_3) `HappyStk` + _ `HappyStk` + (HappyAbsSyn8 happy_var_1) `HappyStk` + happyRest) + = HappyAbsSyn8 + (FuncCall happy_var_1 [] happy_var_3 + ) `HappyStk` happyRest -happyReduce_8 = happySpecReduce_3 8 happyReduction_8 -happyReduction_8 (HappyAbsSyn8 happy_var_3) +happyReduce_8 = happyReduce 7 8 happyReduction_8 +happyReduction_8 (_ `HappyStk` + (HappyAbsSyn12 happy_var_6) `HappyStk` + _ `HappyStk` + _ `HappyStk` + (HappyAbsSyn12 happy_var_3) `HappyStk` + _ `HappyStk` + (HappyAbsSyn8 happy_var_1) `HappyStk` + happyRest) + = HappyAbsSyn8 + (FuncCall happy_var_1 happy_var_3 happy_var_6 + ) `HappyStk` happyRest + +happyReduce_9 = happySpecReduce_3 8 happyReduction_9 +happyReduction_9 (HappyAbsSyn8 happy_var_3) _ - (HappyTerminal (TokenVarName _ happy_var_1)) + (HappyAbsSyn8 happy_var_1) = HappyAbsSyn8 - (happy_var_1:happy_var_3 - ) -happyReduction_8 _ _ _ = notHappyAtAll - -happyReduce_9 = happySpecReduce_2 9 happyReduction_9 -happyReduction_9 _ - (HappyAbsSyn10 happy_var_1) - = HappyAbsSyn9 - ([happy_var_1] + (FuncCall (PredefFunc IsEqual) [] [happy_var_1, happy_var_3] ) -happyReduction_9 _ _ = notHappyAtAll +happyReduction_9 _ _ _ = notHappyAtAll -happyReduce_10 = happySpecReduce_3 9 happyReduction_10 -happyReduction_10 (HappyAbsSyn9 happy_var_3) +happyReduce_10 = happySpecReduce_3 8 happyReduction_10 +happyReduction_10 (HappyAbsSyn8 happy_var_3) _ - (HappyAbsSyn10 happy_var_1) - = HappyAbsSyn9 - (happy_var_1:happy_var_3 + (HappyAbsSyn8 happy_var_1) + = HappyAbsSyn8 + (FuncCall (PredefFunc XProduct) [happy_var_1, happy_var_3] [] ) happyReduction_10 _ _ _ = notHappyAtAll -happyReduce_11 = happyReduce 7 10 happyReduction_11 -happyReduction_11 (_ `HappyStk` - (HappyAbsSyn11 happy_var_6) `HappyStk` - _ `HappyStk` - _ `HappyStk` - (HappyTerminal (TokenSetName _ happy_var_3)) `HappyStk` - _ `HappyStk` - _ `HappyStk` - happyRest) - = HappyAbsSyn10 - (FuncCall (PredefFunc Filter) [Var happy_var_3] [happy_var_6] - ) `HappyStk` happyRest +happyReduce_11 = happySpecReduce_3 8 happyReduction_11 +happyReduction_11 (HappyAbsSyn8 happy_var_3) + _ + (HappyAbsSyn8 happy_var_1) + = HappyAbsSyn8 + (FuncCall (PredefFunc Plus) [happy_var_1, happy_var_3] [] + ) +happyReduction_11 _ _ _ = notHappyAtAll -happyReduce_12 = happyReduce 4 10 happyReduction_12 +happyReduce_12 = happyReduce 4 8 happyReduction_12 happyReduction_12 (_ `HappyStk` - (HappyAbsSyn11 happy_var_3) `HappyStk` - _ `HappyStk` + (HappyAbsSyn8 happy_var_3) `HappyStk` _ `HappyStk` + (HappyAbsSyn8 happy_var_1) `HappyStk` happyRest) - = HappyAbsSyn10 - (FuncCall (PredefFunc Filter) [] [happy_var_3] + = HappyAbsSyn8 + (FuncCall (PredefFunc RecordIndex) [] [happy_var_1, happy_var_3] ) `HappyStk` happyRest -happyReduce_13 = happyReduce 4 10 happyReduction_13 +happyReduce_13 = happyReduce 6 8 happyReduction_13 happyReduction_13 (_ `HappyStk` - (HappyAbsSyn11 happy_var_3) `HappyStk` + (HappyAbsSyn12 happy_var_5) `HappyStk` _ `HappyStk` + (HappyAbsSyn8 happy_var_3) `HappyStk` _ `HappyStk` + (HappyAbsSyn8 happy_var_1) `HappyStk` happyRest) - = HappyAbsSyn10 - (FuncCall (PredefFunc Map) [] [happy_var_3] + = HappyAbsSyn8 + (FuncCall (PredefFunc RecordSelect) [] (happy_var_1:happy_var_3:happy_var_5) ) `HappyStk` happyRest -happyReduce_14 = happySpecReduce_3 10 happyReduction_14 -happyReduction_14 (HappyTerminal (TokenSetName _ happy_var_3)) +happyReduce_14 = happySpecReduce_3 8 happyReduction_14 +happyReduction_14 _ + (HappyAbsSyn12 happy_var_2) _ - (HappyTerminal (TokenSetName _ happy_var_1)) - = HappyAbsSyn10 - (FuncCall (PredefFunc XProduct) (map Var [happy_var_1, happy_var_3]) [] + = HappyAbsSyn8 + (Record happy_var_2 ) happyReduction_14 _ _ _ = notHappyAtAll -happyReduce_15 = happyReduce 6 11 happyReduction_15 -happyReduction_15 ((HappyAbsSyn12 happy_var_6) `HappyStk` +happyReduce_15 = happySpecReduce_1 8 happyReduction_15 +happyReduction_15 (HappyTerminal (TokenString _ happy_var_1)) + = HappyAbsSyn8 + (Types.String $ stripWhitespace happy_var_1 + ) +happyReduction_15 _ = notHappyAtAll + +happyReduce_16 = happyReduce 6 8 happyReduction_16 +happyReduction_16 ((HappyAbsSyn8 happy_var_6) `HappyStk` _ `HappyStk` _ `HappyStk` - (HappyAbsSyn8 happy_var_3) `HappyStk` + (HappyAbsSyn11 happy_var_3) `HappyStk` _ `HappyStk` _ `HappyStk` happyRest) - = HappyAbsSyn11 + = HappyAbsSyn8 (FuncDef [] happy_var_3 happy_var_6 ) `HappyStk` happyRest -happyReduce_16 = happySpecReduce_3 12 happyReduction_16 -happyReduction_16 (HappyAbsSyn12 happy_var_3) - _ - (HappyAbsSyn12 happy_var_1) - = HappyAbsSyn12 - (FuncCall (PredefFunc IsEqual) [] [happy_var_1, happy_var_3] - ) -happyReduction_16 _ _ _ = notHappyAtAll - -happyReduce_17 = happyReduce 4 12 happyReduction_17 -happyReduction_17 (_ `HappyStk` - (HappyTerminal (TokenNat _ happy_var_3)) `HappyStk` +happyReduce_17 = happyReduce 6 8 happyReduction_17 +happyReduction_17 ((HappyAbsSyn8 happy_var_6) `HappyStk` + _ `HappyStk` + (HappyAbsSyn8 happy_var_4) `HappyStk` + _ `HappyStk` + (HappyAbsSyn8 happy_var_2) `HappyStk` _ `HappyStk` - (HappyAbsSyn12 happy_var_1) `HappyStk` happyRest) - = HappyAbsSyn12 - (FuncCall (PredefFunc RecordIndex) [] [happy_var_1, Types.Int happy_var_3] + = HappyAbsSyn8 + (If happy_var_2 happy_var_4 happy_var_6 ) `HappyStk` happyRest -happyReduce_18 = happyReduce 6 12 happyReduction_18 -happyReduction_18 (_ `HappyStk` - (HappyAbsSyn17 happy_var_5) `HappyStk` +happyReduce_18 = happyReduce 4 8 happyReduction_18 +happyReduction_18 ((HappyAbsSyn8 happy_var_4) `HappyStk` _ `HappyStk` - (HappyTerminal (TokenNat _ happy_var_3)) `HappyStk` + (HappyTerminal (TokenSetName _ happy_var_2)) `HappyStk` _ `HappyStk` - (HappyAbsSyn12 happy_var_1) `HappyStk` happyRest) - = HappyAbsSyn12 - (FuncCall (PredefFunc RecordSelect) [] (happy_var_1:(map Types.Int (happy_var_3:happy_var_5))) + = HappyAbsSyn8 + (Let True happy_var_2 happy_var_4 ) `HappyStk` happyRest -happyReduce_19 = happyReduce 4 12 happyReduction_19 -happyReduction_19 (_ `HappyStk` - (HappyAbsSyn16 happy_var_3) `HappyStk` +happyReduce_19 = happyReduce 4 8 happyReduction_19 +happyReduction_19 ((HappyAbsSyn8 happy_var_4) `HappyStk` + _ `HappyStk` + (HappyTerminal (TokenVarName _ happy_var_2)) `HappyStk` _ `HappyStk` - (HappyAbsSyn13 happy_var_1) `HappyStk` happyRest) - = HappyAbsSyn12 - (FuncCall happy_var_1 [] happy_var_3 + = HappyAbsSyn8 + (Let False happy_var_2 happy_var_4 ) `HappyStk` happyRest -happyReduce_20 = happySpecReduce_1 12 happyReduction_20 -happyReduction_20 (HappyTerminal (TokenString _ happy_var_1)) - = HappyAbsSyn12 - (Types.String $ stripWhitespace happy_var_1 +happyReduce_20 = happySpecReduce_1 8 happyReduction_20 +happyReduction_20 (HappyTerminal (TokenVarName _ happy_var_1)) + = HappyAbsSyn8 + (Var happy_var_1 ) happyReduction_20 _ = notHappyAtAll -happyReduce_21 = happySpecReduce_1 12 happyReduction_21 -happyReduction_21 (HappyTerminal (TokenVarName _ happy_var_1)) - = HappyAbsSyn12 +happyReduce_21 = happySpecReduce_1 8 happyReduction_21 +happyReduction_21 (HappyTerminal (TokenSetName _ happy_var_1)) + = HappyAbsSyn8 (Var happy_var_1 ) happyReduction_21 _ = notHappyAtAll -happyReduce_22 = happySpecReduce_1 12 happyReduction_22 -happyReduction_22 (HappyAbsSyn15 happy_var_1) - = HappyAbsSyn12 - (happy_var_1 +happyReduce_22 = happySpecReduce_1 8 happyReduction_22 +happyReduction_22 (HappyTerminal (TokenNat _ happy_var_1)) + = HappyAbsSyn8 + (Types.Int happy_var_1 ) happyReduction_22 _ = notHappyAtAll -happyReduce_23 = happySpecReduce_1 12 happyReduction_23 -happyReduction_23 _ - = HappyAbsSyn12 - (Boolean True +happyReduce_23 = happySpecReduce_1 8 happyReduction_23 +happyReduction_23 (HappyAbsSyn9 happy_var_1) + = HappyAbsSyn8 + (PredefFunc happy_var_1 ) +happyReduction_23 _ = notHappyAtAll -happyReduce_24 = happySpecReduce_1 12 happyReduction_24 -happyReduction_24 _ - = HappyAbsSyn12 - (Boolean False +happyReduce_24 = happySpecReduce_3 8 happyReduction_24 +happyReduction_24 (HappyAbsSyn8 happy_var_3) + _ + (HappyAbsSyn8 happy_var_1) + = HappyAbsSyn8 + (FuncCall (PredefFunc Or) [] [happy_var_1,happy_var_3] ) +happyReduction_24 _ _ _ = notHappyAtAll -happyReduce_25 = happySpecReduce_1 13 happyReduction_25 -happyReduction_25 (HappyAbsSyn14 happy_var_1) - = HappyAbsSyn13 - (PredefFunc happy_var_1 +happyReduce_25 = happySpecReduce_3 8 happyReduction_25 +happyReduction_25 (HappyAbsSyn8 happy_var_3) + _ + (HappyAbsSyn8 happy_var_1) + = HappyAbsSyn8 + (FuncCall (PredefFunc And) [] [happy_var_1,happy_var_3] ) -happyReduction_25 _ = notHappyAtAll +happyReduction_25 _ _ _ = notHappyAtAll -happyReduce_26 = happySpecReduce_1 13 happyReduction_26 -happyReduction_26 (HappyTerminal (TokenVarName _ happy_var_1)) - = HappyAbsSyn13 - (Var happy_var_1 +happyReduce_26 = happySpecReduce_1 9 happyReduction_26 +happyReduction_26 _ + = HappyAbsSyn9 + (IsEmpty ) -happyReduction_26 _ = notHappyAtAll -happyReduce_27 = happySpecReduce_1 14 happyReduction_27 +happyReduce_27 = happySpecReduce_1 9 happyReduction_27 happyReduction_27 _ - = HappyAbsSyn14 - (IsEmpty + = HappyAbsSyn9 + (Filter ) -happyReduce_28 = happySpecReduce_1 14 happyReduction_28 +happyReduce_28 = happySpecReduce_1 9 happyReduction_28 happyReduction_28 _ - = HappyAbsSyn14 + = HappyAbsSyn9 (Contains ) -happyReduce_29 = happySpecReduce_3 15 happyReduction_29 +happyReduce_29 = happySpecReduce_1 9 happyReduction_29 happyReduction_29 _ - (HappyAbsSyn16 happy_var_2) + = HappyAbsSyn9 + (IsEmpty + ) + +happyReduce_30 = happySpecReduce_1 9 happyReduction_30 +happyReduction_30 _ + = HappyAbsSyn9 + (Map + ) + +happyReduce_31 = happySpecReduce_1 9 happyReduction_31 +happyReduction_31 _ + = HappyAbsSyn9 + (And + ) + +happyReduce_32 = happySpecReduce_1 9 happyReduction_32 +happyReduction_32 _ + = HappyAbsSyn9 + (Or + ) + +happyReduce_33 = happySpecReduce_1 10 happyReduction_33 +happyReduction_33 (HappyTerminal (TokenSetName _ happy_var_1)) + = HappyAbsSyn10 + ([happy_var_1] + ) +happyReduction_33 _ = notHappyAtAll + +happyReduce_34 = happySpecReduce_3 10 happyReduction_34 +happyReduction_34 (HappyAbsSyn10 happy_var_3) _ - = HappyAbsSyn15 - (Record happy_var_2 + (HappyTerminal (TokenSetName _ happy_var_1)) + = HappyAbsSyn10 + (happy_var_1:happy_var_3 ) -happyReduction_29 _ _ _ = notHappyAtAll +happyReduction_34 _ _ _ = notHappyAtAll -happyReduce_30 = happySpecReduce_1 16 happyReduction_30 -happyReduction_30 (HappyAbsSyn12 happy_var_1) - = HappyAbsSyn16 +happyReduce_35 = happySpecReduce_1 11 happyReduction_35 +happyReduction_35 (HappyTerminal (TokenVarName _ happy_var_1)) + = HappyAbsSyn11 ([happy_var_1] ) -happyReduction_30 _ = notHappyAtAll +happyReduction_35 _ = notHappyAtAll -happyReduce_31 = happySpecReduce_3 16 happyReduction_31 -happyReduction_31 (HappyAbsSyn16 happy_var_3) +happyReduce_36 = happySpecReduce_3 11 happyReduction_36 +happyReduction_36 (HappyAbsSyn11 happy_var_3) _ - (HappyAbsSyn12 happy_var_1) - = HappyAbsSyn16 + (HappyTerminal (TokenVarName _ happy_var_1)) + = HappyAbsSyn11 (happy_var_1:happy_var_3 ) -happyReduction_31 _ _ _ = notHappyAtAll +happyReduction_36 _ _ _ = notHappyAtAll -happyReduce_32 = happySpecReduce_1 17 happyReduction_32 -happyReduction_32 (HappyTerminal (TokenNat _ happy_var_1)) - = HappyAbsSyn17 +happyReduce_37 = happySpecReduce_1 12 happyReduction_37 +happyReduction_37 (HappyAbsSyn8 happy_var_1) + = HappyAbsSyn12 ([happy_var_1] ) -happyReduction_32 _ = notHappyAtAll +happyReduction_37 _ = notHappyAtAll -happyReduce_33 = happySpecReduce_3 17 happyReduction_33 -happyReduction_33 (HappyAbsSyn17 happy_var_3) +happyReduce_38 = happySpecReduce_3 12 happyReduction_38 +happyReduction_38 (HappyAbsSyn12 happy_var_3) + _ + (HappyAbsSyn8 happy_var_1) + = HappyAbsSyn12 + (happy_var_1:happy_var_3 + ) +happyReduction_38 _ _ _ = notHappyAtAll + +happyReduce_39 = happySpecReduce_1 13 happyReduction_39 +happyReduction_39 (HappyTerminal (TokenNat _ happy_var_1)) + = HappyAbsSyn13 + ([happy_var_1] + ) +happyReduction_39 _ = notHappyAtAll + +happyReduce_40 = happySpecReduce_3 13 happyReduction_40 +happyReduction_40 (HappyAbsSyn13 happy_var_3) _ (HappyTerminal (TokenNat _ happy_var_1)) - = HappyAbsSyn17 + = HappyAbsSyn13 (happy_var_1:happy_var_3 ) -happyReduction_33 _ _ _ = notHappyAtAll +happyReduction_40 _ _ _ = notHappyAtAll happyNewToken action sts stk [] = - action 46 46 notHappyAtAll (HappyState action) sts stk [] + action 51 51 notHappyAtAll (HappyState action) sts stk [] happyNewToken action sts stk (tk:tks) = let cont i = action i i tk (HappyState action) sts stk tks in case tk of { - TokenFilter _ -> cont 18; - TokenInSet _ -> cont 19; - TokenOutSet _ -> cont 20; - TokenSetName _ happy_dollar_dollar -> cont 21; - TokenNat _ happy_dollar_dollar -> cont 22; - TokenPosNat _ happy_dollar_dollar -> cont 23; - TokenVarName _ happy_dollar_dollar -> cont 24; - TokenTrue _ -> cont 25; - TokenFalse _ -> cont 26; - TokenString _ happy_dollar_dollar -> cont 27; - TokenLeftSqBracket _ -> cont 28; - TokenRightSqBracket _ -> cont 29; - TokenArrow _ -> cont 30; - TokenisEqual _ -> cont 31; - TokenisNotEqual _ -> cont 32; - TokenLeftBracket _ -> cont 33; - TokenRightBracket _ -> cont 34; - TokenSemiCol _ -> cont 35; - TokenCol _ -> cont 36; - TokenLambda _ -> cont 37; - TokenComma _ -> cont 38; - TokenFullStop _ -> cont 39; - TokenPlus _ -> cont 40; - TokenXProduct _ -> cont 41; - TokenMap _ -> cont 42; - TokenXXProduct _ -> cont 43; - TokenContains _ -> cont 44; - TokenIsEmpty _ -> cont 45; + TokenFilter _ -> cont 14; + TokenInSet _ -> cont 15; + TokenOutSet _ -> cont 16; + TokenSetName _ happy_dollar_dollar -> cont 17; + TokenNat _ happy_dollar_dollar -> cont 18; + TokenPosNat _ happy_dollar_dollar -> cont 19; + TokenVarName _ happy_dollar_dollar -> cont 20; + TokenTrue _ -> cont 21; + TokenFalse _ -> cont 22; + TokenString _ happy_dollar_dollar -> cont 23; + TokenLeftSqBracket _ -> cont 24; + TokenLeftBrace _ -> cont 25; + TokenRightBrace _ -> cont 26; + TokenRightSqBracket _ -> cont 27; + TokenArrow _ -> cont 28; + TokenisEqual _ -> cont 29; + TokenisNotEqual _ -> cont 30; + TokenLeftBracket _ -> cont 31; + TokenRightBracket _ -> cont 32; + TokenSemiCol _ -> cont 33; + TokenCol _ -> cont 34; + TokenLambda _ -> cont 35; + TokenComma _ -> cont 36; + TokenFullStop _ -> cont 37; + TokenPlus _ -> cont 38; + TokenXProduct _ -> cont 39; + TokenMap _ -> cont 40; + TokenXXProduct _ -> cont 41; + TokenContains _ -> cont 42; + TokenIsEmpty _ -> cont 43; + TokenLet _ -> cont 44; + TokenIf _ -> cont 45; + TokenElse _ -> cont 46; + TokenThen _ -> cont 47; + TokenEqual _ -> cont 48; + TokenBoolAND _ -> cont 49; + TokenBoolOR _ -> cont 50; _ -> happyError' ((tk:tks), []) } -happyError_ explist 46 tk tks = happyError' (tks, explist) +happyError_ explist 51 tk tks = happyError' (tks, explist) happyError_ explist _ tk tks = happyError' ((tk:tks), explist) newtype HappyIdentity a = HappyIdentity a diff --git a/Parser.y b/Parser.y index 6bbeaab..0fdabac 100644 --- a/Parser.y +++ b/Parser.y @@ -22,6 +22,8 @@ import CSV false { TokenFalse _ } Str { TokenString _ $$ } '[' { TokenLeftSqBracket _ } + '{' { TokenLeftBrace _ } + '}' { TokenRightBrace _ } ']' { TokenRightSqBracket _ } "->" { TokenArrow _ } "==" { TokenisEqual _ } @@ -48,64 +50,63 @@ import CSV else { TokenElse _} then { TokenThen _} '=' { TokenEqual _} + or { TokenBoolAND _ } + and { TokenBoolOR _ } + + +%left FUNCCALL +%right INDEX +--%right map filter FUNCCALL -%right "->" -%left "/=" "==" ';' -%nonassoc '(' -%% -Prog : in SetDecls out SetFuncCalls {($2,$4)} +%% +Prog : in SetDecls out Instructions {($2,$4)} SetDecl : SetName':'Nat {$1} SetDecls : SetDecl {[$1]} | SetDecls','SetDecl {$3:$1} -SetNames : SetName {[$1]} - | SetName ',' SetNames { $1:$3 } - - -VarNames : VarName {[$1]} - | VarName ',' VarNames {$1:$3} - -SetFuncCalls : SetFuncCall';' {[$1]} - | SetFuncCall';' SetFuncCalls {$1:$3} - -SetFuncCall : filter '['SetName']' '('Expr')' {FuncCall (PredefFunc Filter) [Var $3] [$6]} - | filter '('Expr')' {FuncCall (PredefFunc Filter) [] [$3]} - --| map '['SetName']' '('Expr')' {FuncCall (PredefFunc Map) [Var $3] [$6]} - | map '('Expr')' {FuncCall (PredefFunc Map) [] [$3]} - | SetName x SetName {FuncCall (PredefFunc XProduct) (map Var [$1, $3]) []} - | let VarName '=' Expr {Let $2 $4} - - - -Expr : Expr "==" Expr {FuncCall (PredefFunc IsEqual) [] [$1, $3]} - | Expr'['Nat']' {FuncCall (PredefFunc RecordIndex) [] [$1, Types.Int $3]} - | Expr'['Nat','Nats']' {FuncCall (PredefFunc RecordSelect) [] ($1:(map Types.Int ($3:$5))) } - | Function'('Exprs')' {FuncCall $1 [] $3} +Instructions : Expr ';' {[$1]} + | Expr';' Instructions {$1:$3} + +Expr : + Expr '('Exprs')' %prec FUNCCALL {FuncCall $1 [] $3} + | Expr '{' Exprs '}' '('Exprs')' {FuncCall $1 $3 $6} + | Expr "==" Expr {FuncCall (PredefFunc IsEqual) [] [$1, $3]} + | Expr x Expr {FuncCall (PredefFunc XProduct) [$1, $3] []} + | Expr '+' Expr {FuncCall (PredefFunc Plus) [$1, $3] []} + | Expr'['Expr']' %prec INDEX {FuncCall (PredefFunc RecordIndex) [] [$1, $3]} + | Expr'['Expr','Exprs']' {FuncCall (PredefFunc RecordSelect) [] ($1:$3:$5) } + | '['Exprs']' {Record $2} + | Str {Types.String $ stripWhitespace $1} | '\\' '(' VarNames ')' "->" Expr { FuncDef [] $3 $6 } - | if Expr then Expr else Expr {If $2 $4 $6} - | Str {Types.String $ stripWhitespace $1} + | if Expr then Expr else Expr {If $2 $4 $6} + | let SetName '=' Expr {Let True $2 $4} + | let VarName '=' Expr {Let False $2 $4} | VarName {Var $1} - | Record {$1} - | true {Boolean True} - | false {Boolean False} - | '(' Expr ')' {$2} - --TODO brackets - -Function : PredefFunc {PredefFunc $1} - | VarName { Var $1} - + | SetName {Var $1} + | Nat {Types.Int $1} + | PredefFunc {PredefFunc $1} + | Expr or Expr {FuncCall (PredefFunc Or) [] [$1,$3]} + | Expr and Expr {FuncCall (PredefFunc And) [] [$1,$3]} + PredefFunc : isEmpty {IsEmpty} + | filter {Filter} | contains {Contains} | isEmpty {IsEmpty} + | map {Map} + | and {And} + | or {Or} -- | zip {Zip} --- | Map -- | Mapr +SetNames : SetName {[$1]} + | SetName ',' SetNames { $1:$3 } -Record : '['Exprs']' {Record $2} + +VarNames : VarName {[$1]} + | VarName ',' VarNames {$1:$3} Exprs : Expr {[$1]} | Expr','Exprs {$1:$3} diff --git a/solutions/pr3.cql b/solutions/pr3.cql index 7bfc9d1..6b3ab9c 100644 --- a/solutions/pr3.cql +++ b/solutions/pr3.cql @@ -3,7 +3,7 @@ P: 4, Q: 4 .out -P x Q; -filter(\r -> r[4] == r[5]); -let func f(x,y) = if (empty(x)) then y else x; -map(\r -> [r[1], f(r[2], r[6]), f(r[3], r[7]), f(r[4], r[8])); \ No newline at end of file +let S = P x Q; +filter(\(r) -> r[4] == r[5]); +let f = \(a,y) -> if isEmpty(a) then y else a; +map (\(r) -> [r[1], f(r[2], r[6]), f(r[3], r[7]), f(r[4], r[8])]); \ No newline at end of file diff --git a/solutions/pr5.cql b/solutions/pr5.cql index e18dc7a..f1b16e1 100644 --- a/solutions/pr5.cql +++ b/solutions/pr5.cql @@ -2,4 +2,4 @@ A:1 .out -map[A](\r -> [r[1],"0",r[1]]); \ No newline at end of file +map{A}(\r -> [r[1],"0",r[1]]); \ No newline at end of file -- GitLab