diff --git a/A.csv b/A.csv
index 3c461496a6088e571d22c5a089870231f3af5346..ad83ff0cbe81659d8754e72d6787442f7f010972 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 b5174ad86ba636636746facec4c7a2f51a767d88..90f24e30ad735197d56b5d2086d8df6ff5521f19 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 b33e9d84f63baa8ee922d192f052822ca37bf05e..6d77627c9c06f5c2f15c97861172af5d1d5a4a8a 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 e25b36b18d0868b4d2dbd4bdde75f0c217a151d1..bdec949699d531f9d9b42b6300aa1cd01e8c62e4 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 181d17c18287e44ab1d5736e1099f727ca29f5cd..a16a0175c20b12fafd5129acda0805aedda9e9f5 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 6bbeaab5fc2f09d09b620241bd22e51d4e78fa5a..0fdabac071d6388a40e15463f77481c0d2f45012 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 7bfc9d108ca5088b896098c1315b5779c6beba77..6b3ab9c6841539f132dfd7cf50d808f8048ed76b 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 e18dc7a8b79f5f52f8692bc58a74a3e481474a03..f1b16e1c1c76cd73807201d9648fdf71663943dd 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