| 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 ); } |


