| summaryrefslogtreecommitdiff | 
diff options
| -rw-r--r-- | data/tests/extra_functionals.fate | 14 | ||||
| -rw-r--r-- | src/core/src/tonkadur/fate/v1/lang/computation/FieldReference.java | 21 | ||||
| -rw-r--r-- | src/core/src/tonkadur/fate/v1/parser/FateParser.g4 | 155 | 
3 files changed, 88 insertions, 102 deletions
| diff --git a/data/tests/extra_functionals.fate b/data/tests/extra_functionals.fate index 9fcb171..de44c6f 100644 --- a/data/tests/extra_functionals.fate +++ b/data/tests/extra_functionals.fate @@ -24,7 +24,7 @@        (if_else (< (var s.i) 10)           (eval              update_test_struct -            (set_fields s +            (set_fields (var s)                 (i (+ (var s.i) 1))                 (j (+ (var s.j) 10))              ) @@ -52,25 +52,25 @@     (add! (var i) int_list_c)  ) -(set int_list_b (shuffle int_list_a)) +(set int_list_b (shuffle (var int_list_a)))  (shuffle! int_list_c)  (set int_list_c (var int_list_a)) -(remove_one! 6 int_list_a) +(remove_one! 6 (var int_list_a)) -(= (var int_list_a) (remove_one 6 int_list_c)) +(= (var int_list_a) (remove_one 6 (var int_list_c)))  (set int_list_b (var int_list_a))  (remove_all! 3 int_list_a) -(= (var int_list_a) (remove_all 3 int_list_b)) +(= (var int_list_a) (remove_all 3 (var int_list_b)))  (set int_list_c (var int_list_a))  (remove_at! 4 int_list_a) -(= (var int_list_a) (remove_at 4 int_list_c)) +(= (var int_list_a) (remove_at 4 (var int_list_c)))  (set int_list_c (range 0 20 2))  (set int_list_a (var int_list_c))  (reverse! int_list_a) -;;(set int_list_b (reverse (range 0 50 5))) +(set int_list_b (reverse (range 0 50 5)))  (end) diff --git a/src/core/src/tonkadur/fate/v1/lang/computation/FieldReference.java b/src/core/src/tonkadur/fate/v1/lang/computation/FieldReference.java index 6ca0024..b98141f 100644 --- a/src/core/src/tonkadur/fate/v1/lang/computation/FieldReference.java +++ b/src/core/src/tonkadur/fate/v1/lang/computation/FieldReference.java @@ -12,6 +12,7 @@ import tonkadur.fate.v1.error.UnknownDictionaryFieldException;  import tonkadur.fate.v1.lang.meta.ComputationVisitor;  import tonkadur.fate.v1.lang.meta.Reference; +import tonkadur.fate.v1.lang.meta.Computation;  import tonkadur.fate.v1.lang.type.DictType;  import tonkadur.fate.v1.lang.type.Type; @@ -21,7 +22,7 @@ public class FieldReference extends Reference     /***************************************************************************/     /**** MEMBERS **************************************************************/     /***************************************************************************/ -   protected final Reference parent; +   protected final Computation parent;     protected final String field_name;     /***************************************************************************/ @@ -31,12 +32,12 @@ public class FieldReference extends Reference     protected FieldReference     (        final Origin origin, -      final Reference parent, +      final Computation parent,        final Type type,        final String field_name     )     { -      super(origin, type, (parent.get_name() + "." + field_name)); +      super(origin, type, (parent.toString() + "." + field_name));        this.parent = parent;        this.field_name = field_name; @@ -49,7 +50,7 @@ public class FieldReference extends Reference     public static FieldReference build     (        final Origin origin, -      Reference parent, +      Computation parent,        final String field     )     throws @@ -62,7 +63,7 @@ public class FieldReference extends Reference        if (current_type.get_act_as_type().equals(Type.REF))        { -         parent = AtReference.build(origin, parent); +         parent = AtReference.build(origin, (Reference) parent);           current_type = parent.get_type();        } @@ -75,7 +76,7 @@ public class FieldReference extends Reference                 origin,                 current_type,                 Collections.singleton(Type.DICT), -               parent.get_name() +               parent.toString()              )           ); @@ -92,7 +93,7 @@ public class FieldReference extends Reference     public static FieldReference build     (        final Origin origin, -      Reference parent, +      Computation parent,        final List<String> field_sequence     )     throws @@ -127,7 +128,7 @@ public class FieldReference extends Reference        return field_name;     } -   public Reference get_parent () +   public Computation get_parent ()     {        return parent;     } @@ -141,7 +142,9 @@ public class FieldReference extends Reference        sb.append("(FieldReference (");        sb.append(type.get_name());        sb.append(") "); -      sb.append(name); +      sb.append(parent.toString()); +      sb.append(" "); +      sb.append(field_name);        sb.append(")");        return sb.toString(); diff --git a/src/core/src/tonkadur/fate/v1/parser/FateParser.g4 b/src/core/src/tonkadur/fate/v1/parser/FateParser.g4 index 9619283..6d65e0a 100644 --- a/src/core/src/tonkadur/fate/v1/parser/FateParser.g4 +++ b/src/core/src/tonkadur/fate/v1/parser/FateParser.g4 @@ -3304,7 +3304,7 @@ returns [Computation result]           );     } -   | ADD_KW value WS+ value_reference WS* R_PAREN +   | ADD_KW val=value WS+ coll=value WS* R_PAREN     {        $result =           AddElementComputation.build @@ -3314,12 +3314,12 @@ returns [Computation result]                 ($ADD_KW.getLine()),                 ($ADD_KW.getCharPositionInLine())              ), -            ($value.result), -            ($value_reference.result) +            ($val.result), +            ($coll.result)           );     } -   | ADD_AT_KW index=value WS+ element=value WS+ value_reference WS* R_PAREN +   | ADD_AT_KW index=value WS+ element=value WS+ coll=value WS* R_PAREN     {        $result =           AddElementAtComputation.build @@ -3331,13 +3331,13 @@ returns [Computation result]              ),              ($index.result),              ($element.result), -            ($value_reference.result) +            ($coll.result)           );     }     | ADD_ALL_KW -         sourcer=value_reference WS+ -         targetr=value_reference WS* +         sourcev=value WS+ +         targetv=value WS*        R_PAREN     {        $result = @@ -3348,15 +3348,12 @@ returns [Computation result]                 ($ADD_ALL_KW.getLine()),                 ($ADD_ALL_KW.getCharPositionInLine())              ), -            ($sourcer.result), -            ($targetr.result) +            ($sourcev.result), +            ($targetv.result)           );     } -   | REMOVE_ONE_KW -         value WS+ -         value_reference WS* -      R_PAREN +   | REMOVE_ONE_KW val=value WS+ coll=value WS* R_PAREN     {        $result =           RemoveElementComputation.build @@ -3366,15 +3363,12 @@ returns [Computation result]                 ($REMOVE_ONE_KW.getLine()),                 ($REMOVE_ONE_KW.getCharPositionInLine())              ), -            ($value.result), -            ($value_reference.result) +            ($val.result), +            ($coll.result)           );     } -   | REMOVE_AT_KW -         value WS+ -         value_reference WS* -      R_PAREN +   | REMOVE_AT_KW val=value WS+ coll=value WS* R_PAREN     {        $result =           RemoveElementAtComputation.build @@ -3384,15 +3378,12 @@ returns [Computation result]                 ($REMOVE_AT_KW.getLine()),                 ($REMOVE_AT_KW.getCharPositionInLine())              ), -            ($value.result), -            ($value_reference.result) +            ($val.result), +            ($coll.result)           );     } -   | REMOVE_ALL_KW -         value WS+ -         value_reference WS* -      R_PAREN +   | REMOVE_ALL_KW val=value WS+ coll=value WS* R_PAREN     {        $result =           RemoveAllOfElementComputation.build @@ -3402,12 +3393,12 @@ returns [Computation result]                 ($REMOVE_ALL_KW.getLine()),                 ($REMOVE_ALL_KW.getCharPositionInLine())              ), -            ($value.result), -            ($value_reference.result) +            ($val.result), +            ($coll.result)           );     } -   | REVERSE_KW value_reference WS* R_PAREN +   | REVERSE_KW value WS* R_PAREN     {        $result =           ReverseListComputation.build @@ -3417,11 +3408,11 @@ returns [Computation result]                 ($REVERSE_KW.getLine()),                 ($REVERSE_KW.getCharPositionInLine())              ), -            ($value_reference.result) +            ($value.result)           );     } -   | PUSH_LEFT_KW value WS+ value_reference WS* R_PAREN +   | PUSH_LEFT_KW val=value WS+ coll=value WS* R_PAREN     {        $result =           PushElementComputation.build @@ -3431,13 +3422,13 @@ returns [Computation result]                 ($PUSH_LEFT_KW.getLine()),                 ($PUSH_LEFT_KW.getCharPositionInLine())              ), -            ($value.result), -            ($value_reference.result), +            ($val.result), +            ($coll.result),              true           );     } -   | PUSH_RIGHT_KW value WS+ value_reference WS* R_PAREN +   | PUSH_RIGHT_KW val=value WS+ coll=value WS* R_PAREN     {        $result =           PushElementComputation.build @@ -3447,13 +3438,13 @@ returns [Computation result]                 ($PUSH_RIGHT_KW.getLine()),                 ($PUSH_RIGHT_KW.getCharPositionInLine())              ), -            ($value.result), -            ($value_reference.result), +            ($val.result), +            ($coll.result),              false           );     } -   | POP_LEFT_KW value_reference WS* R_PAREN +   | POP_LEFT_KW value WS* R_PAREN     {        $result =           PopElementComputation.build @@ -3463,12 +3454,12 @@ returns [Computation result]                 ($POP_LEFT_KW.getLine()),                 ($POP_LEFT_KW.getCharPositionInLine())              ), -            ($value_reference.result), +            ($value.result),              true           );     } -   | POP_RIGHT_KW value_reference WS* R_PAREN +   | POP_RIGHT_KW value WS* R_PAREN     {        $result =           PopElementComputation.build @@ -3478,15 +3469,12 @@ returns [Computation result]                 ($POP_RIGHT_KW.getLine()),                 ($POP_RIGHT_KW.getCharPositionInLine())              ), -            ($value_reference.result), -            true +            ($value.result), +            false           );     } -   | MAP_KW -         value WS+ -         inr=value_reference WS* -      R_PAREN +   | MAP_KW fun=value WS+ inv=value WS* R_PAREN     {        $result =           tonkadur.fate.v1.lang.computation.MapComputation.build @@ -3496,12 +3484,12 @@ returns [Computation result]                 ($MAP_KW.getLine()),                 ($MAP_KW.getCharPositionInLine())              ), -            ($value.result), -            ($inr.result) +            ($fun.result), +            ($inv.result)           );     } -   | INDEXED_MAP_KW value WS+ inr=value_reference WS* R_PAREN +   | INDEXED_MAP_KW fun=value WS+ inv=value WS* R_PAREN     {        $result =           IndexedMapComputation.build @@ -3511,16 +3499,12 @@ returns [Computation result]                 ($INDEXED_MAP_KW.getLine()),                 ($INDEXED_MAP_KW.getCharPositionInLine())              ), -            ($value.result), -            ($inr.result) +            ($fun.result), +            ($inv.result)           );     } -   | MERGE_TO_LIST_KW -         fun=value WS+ -         inr0=value_reference WS+ -         inr1=value_reference WS* -      R_PAREN +   | MERGE_TO_LIST_KW fun=value WS+ inv0=value WS+ inv1=value WS* R_PAREN     {        $result =           MergeComputation.build @@ -3531,9 +3515,9 @@ returns [Computation result]                 ($MERGE_TO_LIST_KW.getCharPositionInLine())              ),              ($fun.result), -            ($inr0.result), +            ($inv0.result),              null, -            ($inr1.result), +            ($inv1.result),              null,              false           ); @@ -3542,9 +3526,9 @@ returns [Computation result]     | MERGE_TO_LIST_KW           fun=value WS+           def0=value WS+ -         inr0=value_reference WS+ +         inv0=value WS+           def1=value WS+ -         inr1=value_reference WS* +         inv1=value WS*        R_PAREN     {        $result = @@ -3556,9 +3540,9 @@ returns [Computation result]                 ($MERGE_TO_LIST_KW.getCharPositionInLine())              ),              ($fun.result), -            ($inr0.result), +            ($inv0.result),              ($def0.result), -            ($inr1.result), +            ($inv1.result),              ($def1.result),              false           ); @@ -3566,8 +3550,8 @@ returns [Computation result]     | MERGE_TO_SET_KW           fun=value WS+ -         inr0=value_reference WS+ -         inr1=value_reference WS* +         inv0=value WS+ +         inv1=value WS*        R_PAREN     {        $result = @@ -3579,9 +3563,9 @@ returns [Computation result]                 ($MERGE_TO_SET_KW.getCharPositionInLine())              ),              ($fun.result), -            ($inr0.result), +            ($inv0.result),              null, -            ($inr1.result), +            ($inv1.result),              null,              true           ); @@ -3590,9 +3574,9 @@ returns [Computation result]     | MERGE_TO_SET_KW           fun=value WS+           def0=value WS+ -         inr0=value_reference WS+ +         inv0=value WS+           def1=value WS+ -         inr1=value_reference WS* +         inv1=value WS*        R_PAREN     {        $result = @@ -3604,9 +3588,9 @@ returns [Computation result]                 ($MERGE_TO_SET_KW.getCharPositionInLine())              ),              ($fun.result), -            ($inr0.result), +            ($inv0.result),              ($def0.result), -            ($inr1.result), +            ($inv1.result),              ($def1.result),              true           ); @@ -3615,8 +3599,7 @@ returns [Computation result]     | SUB_LIST_KW        vstart=value WS+        vend=value WS+ -      inr=value_reference WS+ -      outr=value_reference WS* +      inv=value WS*        R_PAREN     {        $result = @@ -3629,11 +3612,11 @@ returns [Computation result]              ),              ($vstart.result),              ($vend.result), -            ($inr.result) +            ($inv.result)           );     } -   | FILTER_KW value WS+ value_reference WS* R_PAREN +   | FILTER_KW fun=value WS+ coll=value WS* R_PAREN     {        $result =           FilterComputation.build @@ -3643,14 +3626,14 @@ returns [Computation result]                 ($FILTER_KW.getLine()),                 ($FILTER_KW.getCharPositionInLine())              ), -            ($value.result), -            ($value_reference.result) +            ($fun.result), +            ($coll.result)           );     }     | PARTITION_KW -      value WS+ -      value_reference WS* +      fun=value WS+ +      coll=value WS*        R_PAREN     {        $result = @@ -3661,12 +3644,12 @@ returns [Computation result]                 ($PARTITION_KW.getLine()),                 ($PARTITION_KW.getCharPositionInLine())              ), -            ($value.result), -            ($value_reference.result) +            ($fun.result), +            ($coll.result)           );     } -   | SORT_KW value WS+ value_reference WS* R_PAREN +   | SORT_KW fun=value WS+ coll=value WS* R_PAREN     {        $result =          SortComputation.build @@ -3676,13 +3659,13 @@ returns [Computation result]                 ($SORT_KW.getLine()),                 ($SORT_KW.getCharPositionInLine())              ), -            ($value.result), -            ($value_reference.result) +            ($fun.result), +            ($coll.result)           );     } -   | SHUFFLE_KW value_reference WS* R_PAREN +   | SHUFFLE_KW value WS* R_PAREN     {        $result =          ShuffleComputation.build @@ -3692,11 +3675,11 @@ returns [Computation result]                 ($SHUFFLE_KW.getLine()),                 ($SHUFFLE_KW.getCharPositionInLine())              ), -            ($value_reference.result) +            ($value.result)           );     } -   | SET_FIELDS_KW value_reference WS* field_value_list WS* R_PAREN +   | SET_FIELDS_KW value WS* field_value_list WS* R_PAREN     {        /*         * A bit of a lazy solution: build field references, then extract the data @@ -3718,7 +3701,7 @@ returns [Computation result]              FieldReference.build              (                 entry.get_car(), -               ($value_reference.result), +               ($value.result),                 entry.get_cdr().get_car()              ); @@ -3737,7 +3720,7 @@ returns [Computation result]                 ($SET_FIELDS_KW.getLine()),                 ($SET_FIELDS_KW.getCharPositionInLine())              ), -            ($value_reference.result), +            ($value.result),              assignments           );     } | 


