summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNathanael Sensfelder <SpamShield0@MultiAgentSystems.org>2020-09-15 19:11:20 +0200
committerNathanael Sensfelder <SpamShield0@MultiAgentSystems.org>2020-09-15 19:11:20 +0200
commit2252812f48a5792aeeed2956dc54313a830b697e (patch)
treeeaf19c951c130e09b0538c186c7c3d48c58e35e0
parent31d35f5781ab731f4713b943e99bf58f2f413a0f (diff)
Completes the reference -> computation for computations.
I made that without much testing, so I suspect issues will show up.
-rw-r--r--data/tests/extra_functionals.fate14
-rw-r--r--src/core/src/tonkadur/fate/v1/lang/computation/FieldReference.java21
-rw-r--r--src/core/src/tonkadur/fate/v1/parser/FateParser.g4155
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
);
}