diff --git a/Parser.y b/Parser.y
index b4c1caf54ed7e61d5e8944fe49704a3572d81aeb..c6c3ce4a349f25fe075d46c898f327b890dc10db 100644
--- a/Parser.y
+++ b/Parser.y
@@ -1,26 +1,30 @@
-Prog : .in SetNames .out SetFuncCalls
 
-SetNames : SetName
-    | SetName, SetNames
+
+Prog : .in SetNames .out SetFuncCalls {($2, $4)}
+
+SetNames : SetName {[$1]}
+    | SetNames, SetName
     
 VarNames : VarName
-    | VarName, VarNames
+    | VarName',' VarNames
 
 SetSetFuncCalls : SetFuncCall    {[SetFuncCall]}
     | SetFuncCall; SetFuncCalls   {SetFuncCall:SetFuncCalls}
 
-SetFuncCall : filter '['SetName']' (Func)
+SetFuncCall : filter '['SetName']' '('Func')' {FuncCall (PredefFunc Filter) [$3] [$6]}
 --filter[A](\r -> r[2] /= "")
-Func : \'('VarNames')' -> Expr
-\(r) -> r[1] == "hello"
-
-Expr : Expr == Expr
-    | Expr'['Nat']'
-    | String
-    | VarName
-    | Record
-    | true
-    | false
+Func : \'('VarNames')' -> Expr {FuncDef [] $3 $6}
+--\(r) -> r[1] == "hello"
 
 
+Expr : Expr == Expr {FuncCall (PredefFunc IsEqual) [] [$1, $3]}
+    | Expr'['Nat']' {FuncCall (PredefFunc RecordIndex) [] [$3]}
+    | String {String $1}
+    | VarName {Var $1}
+    | Record {$1}
+    | true  {Boolean True}
+    | false {Boolean False}
 
+Record : '['Exprs']' {Record $2}
+Exprs : Expr    {[$1]}
+    | Expr','Exprs  {$1:$2}