summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorNathanael Sensfelder <SpamShield0@MultiAgentSystems.org>2020-09-18 21:14:14 +0200
committerNathanael Sensfelder <SpamShield0@MultiAgentSystems.org>2020-09-18 21:14:14 +0200
commit53eae69e9a0368751f7abfe5308428973de9bc5e (patch)
tree71762594af92877ce7ef5df3337625380a7f98c2 /src
parent635fdaef7c0aec6e755f5ec916f8cd9f6d957086 (diff)
...
Diffstat (limited to 'src')
-rw-r--r--src/core/src/tonkadur/fate/v1/lang/computation/AddElementsOfComputation.java1
-rw-r--r--src/core/src/tonkadur/fate/v1/lang/computation/AtReference.java16
-rw-r--r--src/core/src/tonkadur/fate/v1/lang/computation/RemoveElementsOfComputation.java105
-rw-r--r--src/core/src/tonkadur/fate/v1/lang/meta/ComputationVisitor.java3
-rw-r--r--src/core/src/tonkadur/fate/v1/parser/FateParser.g4487
5 files changed, 458 insertions, 154 deletions
diff --git a/src/core/src/tonkadur/fate/v1/lang/computation/AddElementsOfComputation.java b/src/core/src/tonkadur/fate/v1/lang/computation/AddElementsOfComputation.java
index 907768e..1538fcb 100644
--- a/src/core/src/tonkadur/fate/v1/lang/computation/AddElementsOfComputation.java
+++ b/src/core/src/tonkadur/fate/v1/lang/computation/AddElementsOfComputation.java
@@ -7,7 +7,6 @@ import tonkadur.fate.v1.lang.type.CollectionType;
import tonkadur.fate.v1.lang.meta.ComputationVisitor;
import tonkadur.fate.v1.lang.meta.Computation;
-import tonkadur.fate.v1.lang.meta.Computation;
import tonkadur.fate.v1.lang.meta.RecurrentChecks;
public class AddElementsOfComputation extends Computation
diff --git a/src/core/src/tonkadur/fate/v1/lang/computation/AtReference.java b/src/core/src/tonkadur/fate/v1/lang/computation/AtReference.java
index bfe7920..d61dbed 100644
--- a/src/core/src/tonkadur/fate/v1/lang/computation/AtReference.java
+++ b/src/core/src/tonkadur/fate/v1/lang/computation/AtReference.java
@@ -13,6 +13,7 @@ import tonkadur.fate.v1.lang.Variable;
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.PointerType;
import tonkadur.fate.v1.lang.type.Type;
@@ -22,7 +23,7 @@ public class AtReference extends Reference
/***************************************************************************/
/**** MEMBERS **************************************************************/
/***************************************************************************/
- protected final Reference parent;
+ protected final Computation parent;
/***************************************************************************/
/**** PROTECTED ************************************************************/
@@ -31,10 +32,10 @@ public class AtReference extends Reference
(
final Origin origin,
final Type reported_type,
- final Reference parent
+ final Computation parent
)
{
- super(origin, reported_type, ("(At " + parent.get_name() + ")"));
+ super(origin, reported_type, ("(At " + parent.toString() + ")"));
this.parent = parent;
}
@@ -47,7 +48,7 @@ public class AtReference extends Reference
public static AtReference build
(
final Origin origin,
- final Reference parent
+ final Computation parent
)
throws
InvalidTypeException
@@ -64,8 +65,7 @@ public class AtReference extends Reference
(
origin,
current_type,
- Collections.singleton(Type.REF),
- parent.get_name()
+ Collections.singleton(Type.REF)
)
);
@@ -87,7 +87,7 @@ public class AtReference extends Reference
cv.visit_at_reference(this);
}
- public Reference get_parent ()
+ public Computation get_parent ()
{
return parent;
}
@@ -101,7 +101,7 @@ public class AtReference extends Reference
sb.append("(AtReference (");
sb.append(type.get_name());
sb.append(") ");
- sb.append(parent.get_name());
+ sb.append(parent.toString());
sb.append(")");
return sb.toString();
diff --git a/src/core/src/tonkadur/fate/v1/lang/computation/RemoveElementsOfComputation.java b/src/core/src/tonkadur/fate/v1/lang/computation/RemoveElementsOfComputation.java
new file mode 100644
index 0000000..f32acc4
--- /dev/null
+++ b/src/core/src/tonkadur/fate/v1/lang/computation/RemoveElementsOfComputation.java
@@ -0,0 +1,105 @@
+package tonkadur.fate.v1.lang.computation;
+
+import tonkadur.parser.Origin;
+import tonkadur.parser.ParsingError;
+
+import tonkadur.fate.v1.lang.type.CollectionType;
+
+import tonkadur.fate.v1.lang.meta.ComputationVisitor;
+import tonkadur.fate.v1.lang.meta.Computation;
+import tonkadur.fate.v1.lang.meta.RecurrentChecks;
+
+public class RemoveElementsOfComputation extends Computation
+{
+ /***************************************************************************/
+ /**** MEMBERS **************************************************************/
+ /***************************************************************************/
+ protected final Computation other_collection;
+ protected final Computation collection;
+
+ /***************************************************************************/
+ /**** PROTECTED ************************************************************/
+ /***************************************************************************/
+ /**** Constructors *********************************************************/
+ protected RemoveElementsOfComputation
+ (
+ final Origin origin,
+ final Computation other_collection,
+ final Computation collection
+ )
+ {
+ super(origin, collection.get_type());
+
+ this.collection = collection;
+ this.other_collection = other_collection;
+ }
+
+ /***************************************************************************/
+ /**** PUBLIC ***************************************************************/
+ /***************************************************************************/
+ /**** Constructors *********************************************************/
+ public static RemoveElementsOfComputation build
+ (
+ final Origin origin,
+ final Computation other_collection,
+ final Computation collection
+ )
+ throws ParsingError
+ {
+ RecurrentChecks.assert_is_a_collection(collection);
+ RecurrentChecks.assert_is_a_collection(other_collection);
+ RecurrentChecks.assert_can_be_used_as
+ (
+ other_collection.get_origin(),
+ ((CollectionType) other_collection.get_type()).get_content_type(),
+ ((CollectionType) collection.get_type()).get_content_type()
+ );
+
+ return
+ new RemoveElementsOfComputation(origin, other_collection, collection);
+ }
+
+ /**** Accessors ************************************************************/
+ @Override
+ public void get_visited_by (final ComputationVisitor cv)
+ throws Throwable
+ {
+ cv.visit_remove_elements_of(this);
+ }
+
+ public Computation get_source_collection ()
+ {
+ return other_collection;
+ }
+
+ public Computation get_target_collection ()
+ {
+ return collection;
+ }
+
+ /**** Misc. ****************************************************************/
+ @Override
+ public String toString ()
+ {
+ final StringBuilder sb = new StringBuilder();
+
+ sb.append("(RemoveElementsOf");
+ sb.append(System.lineSeparator());
+ sb.append(System.lineSeparator());
+
+ sb.append("other_collection:");
+ sb.append(System.lineSeparator());
+ sb.append(other_collection.toString());
+ sb.append(System.lineSeparator());
+ sb.append(System.lineSeparator());
+
+ sb.append("collection:");
+ sb.append(System.lineSeparator());
+ sb.append(collection.toString());
+
+ sb.append(")");
+
+ return sb.toString();
+ }
+
+}
diff --git a/src/core/src/tonkadur/fate/v1/lang/meta/ComputationVisitor.java b/src/core/src/tonkadur/fate/v1/lang/meta/ComputationVisitor.java
index fd1ed34..4beca98 100644
--- a/src/core/src/tonkadur/fate/v1/lang/meta/ComputationVisitor.java
+++ b/src/core/src/tonkadur/fate/v1/lang/meta/ComputationVisitor.java
@@ -97,6 +97,9 @@ public interface ComputationVisitor
public void visit_add_elements_of (final AddElementsOfComputation n)
throws Throwable;
+ public void visit_remove_elements_of (final RemoveElementsOfComputation n)
+ throws Throwable;
+
public void visit_map (final MapComputation n)
throws Throwable;
diff --git a/src/core/src/tonkadur/fate/v1/parser/FateParser.g4 b/src/core/src/tonkadur/fate/v1/parser/FateParser.g4
index 108813e..86bdab5 100644
--- a/src/core/src/tonkadur/fate/v1/parser/FateParser.g4
+++ b/src/core/src/tonkadur/fate/v1/parser/FateParser.g4
@@ -535,9 +535,9 @@ returns [Instruction result]
}
| PROMPT_STRING_KW
- targetv=value WS+
- min_size=value WS+
- max_size=value WS+
+ targetv=non_text_value WS+
+ min_size=non_text_value WS+
+ max_size=non_text_value WS+
paragraph WS*
R_PAREN
{
@@ -557,9 +557,9 @@ returns [Instruction result]
}
| PROMPT_INTEGER_KW
- targetv=value WS+
- min_size=value WS+
- max_size=value WS+
+ targetv=non_text_value WS+
+ min_size=non_text_value WS+
+ max_size=non_text_value WS+
paragraph WS*
R_PAREN
{
@@ -593,7 +593,11 @@ returns [Instruction result]
);
}
- | IMP_ADD_AT_KW index=value WS+ element=value WS+ value_reference WS* R_PAREN
+ | IMP_ADD_AT_KW
+ index=non_text_value WS+
+ element=value WS+
+ value_reference WS*
+ R_PAREN
{
$result =
AddElementAt.build
@@ -610,7 +614,7 @@ returns [Instruction result]
}
| IMP_ADD_ALL_KW
- sourcev=value WS+
+ sourcev=non_text_value WS+
target=value_reference WS*
R_PAREN
{
@@ -678,7 +682,7 @@ returns [Instruction result]
}
| IMP_REMOVE_AT_KW
- value WS+
+ non_text_value WS+
value_reference WS*
R_PAREN
{
@@ -690,7 +694,7 @@ returns [Instruction result]
($IMP_REMOVE_AT_KW.getLine()),
($IMP_REMOVE_AT_KW.getCharPositionInLine())
),
- ($value.result),
+ ($non_text_value.result),
($value_reference.result)
);
}
@@ -773,7 +777,7 @@ returns [Instruction result]
);
}
- | IMP_POP_RIGHT_KW value_reference WS+ value WS* R_PAREN
+ | IMP_POP_RIGHT_KW value_reference WS+ non_text_value WS* R_PAREN
{
$result =
PopElement.build
@@ -783,13 +787,13 @@ returns [Instruction result]
($IMP_POP_RIGHT_KW.getLine()),
($IMP_POP_RIGHT_KW.getCharPositionInLine())
),
- ($value.result),
+ ($non_text_value.result),
($value_reference.result),
false
);
}
- | IMP_POP_LEFT_KW value_reference WS+ value WS* R_PAREN
+ | IMP_POP_LEFT_KW value_reference WS+ non_text_value WS* R_PAREN
{
$result =
PopElement.build
@@ -799,13 +803,13 @@ returns [Instruction result]
($IMP_POP_LEFT_KW.getLine()),
($IMP_POP_LEFT_KW.getCharPositionInLine())
),
- ($value.result),
+ ($non_text_value.result),
($value_reference.result),
true
);
}
- | IMP_MAP_KW value WS+ value_reference WS* R_PAREN
+ | IMP_MAP_KW non_text_value WS+ value_reference WS* R_PAREN
{
$result =
tonkadur.fate.v1.lang.instruction.Map.build
@@ -815,12 +819,12 @@ returns [Instruction result]
($IMP_MAP_KW.getLine()),
($IMP_MAP_KW.getCharPositionInLine())
),
- ($value.result),
+ ($non_text_value.result),
($value_reference.result)
);
}
- | IMP_INDEXED_MAP_KW value WS+ value_reference WS* R_PAREN
+ | IMP_INDEXED_MAP_KW non_text_value WS+ value_reference WS* R_PAREN
{
$result =
IndexedMap.build
@@ -830,12 +834,16 @@ returns [Instruction result]
($IMP_INDEXED_MAP_KW.getLine()),
($IMP_INDEXED_MAP_KW.getCharPositionInLine())
),
- ($value.result),
+ ($non_text_value.result),
($value_reference.result)
);
}
- | IMP_MERGE_KW fun=value WS+ value_reference WS+ inv1=value WS* R_PAREN
+ | IMP_MERGE_KW
+ fun=non_text_value WS+
+ value_reference WS+
+ inv1=non_text_value WS*
+ R_PAREN
{
$result =
Merge.build
@@ -854,11 +862,11 @@ returns [Instruction result]
}
| IMP_MERGE_KW
- fun=value WS+
+ fun=non_text_value WS+
def0=value WS+
value_reference WS+
def1=value WS+
- inv1=value WS*
+ inv1=non_text_value WS*
R_PAREN
{
$result =
@@ -877,7 +885,11 @@ returns [Instruction result]
);
}
- | IMP_SUB_LIST_KW vstart=value WS+ vend=value WS+ value_reference WS* R_PAREN
+ | IMP_SUB_LIST_KW
+ vstart=non_text_value WS+
+ vend=non_text_value WS+
+ value_reference WS*
+ R_PAREN
{
$result =
SubList.build
@@ -893,7 +905,7 @@ returns [Instruction result]
);
}
- | IMP_FILTER_KW value WS+ value_reference WS* R_PAREN
+ | IMP_FILTER_KW non_text_value WS+ value_reference WS* R_PAREN
{
$result =
Filter.build
@@ -903,13 +915,13 @@ returns [Instruction result]
($IMP_FILTER_KW.getLine()),
($IMP_FILTER_KW.getCharPositionInLine())
),
- ($value.result),
+ ($non_text_value.result),
($value_reference.result)
);
}
| IMP_PARTITION_KW
- value WS+
+ non_text_value WS+
iftrue=value_reference WS+
iffalse=value_reference WS*
R_PAREN
@@ -922,13 +934,13 @@ returns [Instruction result]
($IMP_PARTITION_KW.getLine()),
($IMP_PARTITION_KW.getCharPositionInLine())
),
- ($value.result),
+ ($non_text_value.result),
($iftrue.result),
($iffalse.result)
);
}
- | IMP_SORT_KW value WS+ value_reference WS* R_PAREN
+ | IMP_SORT_KW non_text_value WS+ value_reference WS* R_PAREN
{
$result =
Sort.build
@@ -938,7 +950,7 @@ returns [Instruction result]
($IMP_SORT_KW.getLine()),
($IMP_SORT_KW.getCharPositionInLine())
),
- ($value.result),
+ ($non_text_value.result),
($value_reference.result)
);
}
@@ -1033,7 +1045,7 @@ returns [Instruction result]
);
}
- | WHILE_KW value WS*
+ | WHILE_KW non_text_value WS*
{
BREAKABLE_LEVELS++;
HIERARCHICAL_VARIABLES.push(new ArrayList());
@@ -1058,12 +1070,12 @@ returns [Instruction result]
($WHILE_KW.getLine()),
($WHILE_KW.getCharPositionInLine())
),
- ($value.result),
+ ($non_text_value.result),
($general_fate_sequence.result)
);
}
- | DO_WHILE_KW value WS*
+ | DO_WHILE_KW non_text_value WS*
{
BREAKABLE_LEVELS++;
HIERARCHICAL_VARIABLES.push(new ArrayList());
@@ -1088,7 +1100,7 @@ returns [Instruction result]
($DO_WHILE_KW.getLine()),
($DO_WHILE_KW.getCharPositionInLine())
),
- ($value.result),
+ ($non_text_value.result),
($general_fate_sequence.result)
);
}
@@ -1106,7 +1118,9 @@ returns [Instruction result]
);
}
- | FOR_KW pre=general_fate_instr WS * value WS* post=general_fate_instr WS*
+ | FOR_KW pre=general_fate_instr WS*
+ non_text_value WS*
+ post=general_fate_instr WS*
{
BREAKABLE_LEVELS++;
HIERARCHICAL_VARIABLES.push(new ArrayList());
@@ -1130,7 +1144,7 @@ returns [Instruction result]
($FOR_KW.getLine()),
($FOR_KW.getCharPositionInLine())
),
- ($value.result),
+ ($non_text_value.result),
($pre.result),
($general_fate_sequence.result),
($post.result)
@@ -1138,7 +1152,7 @@ returns [Instruction result]
}
| FOR_EACH_KW
- coll=value WS+ new_reference_name
+ coll=non_text_value WS+ new_reference_name
{
final Map<String, Variable> variable_map;
final Variable new_variable;
@@ -1364,7 +1378,7 @@ returns [Instruction result]
$result = new SequenceJump(origin, sequence_name, params);
}
- | ASSERT_KW value WS+ paragraph WS* R_PAREN
+ | ASSERT_KW non_text_value WS+ paragraph WS* R_PAREN
{
$result =
Assert.build
@@ -1374,12 +1388,12 @@ returns [Instruction result]
($ASSERT_KW.getLine()),
($ASSERT_KW.getCharPositionInLine())
),
- ($value.result),
+ ($non_text_value.result),
($paragraph.result)
);
}
- | IF_KW value WS*
+ | IF_KW non_text_value WS*
{
HIERARCHICAL_VARIABLES.push(new ArrayList());
}
@@ -1400,13 +1414,13 @@ returns [Instruction result]
($IF_KW.getLine()),
($IF_KW.getCharPositionInLine())
),
- ($value.result),
+ ($non_text_value.result),
($general_fate_instr.result)
);
}
| IF_ELSE_KW
- value
+ non_text_value
{
HIERARCHICAL_VARIABLES.push(new ArrayList());
}
@@ -1437,7 +1451,7 @@ returns [Instruction result]
($IF_ELSE_KW.getLine()),
($IF_ELSE_KW.getCharPositionInLine())
),
- ($value.result),
+ ($non_text_value.result),
($if_true.result),
($if_false.result)
);
@@ -1457,7 +1471,10 @@ returns [Instruction result]
);
}
- | SWITCH_KW value WS* instr_cond_list WS* general_fate_instr WS *R_PAREN
+ | SWITCH_KW non_text_value WS*
+ instr_cond_list WS*
+ general_fate_instr WS*
+ R_PAREN
{
$result =
SwitchInstruction.build
@@ -1467,7 +1484,7 @@ returns [Instruction result]
($SWITCH_KW.getLine()),
($SWITCH_KW.getCharPositionInLine())
),
- ($value.result),
+ ($non_text_value.result),
($instr_cond_list.result),
($general_fate_instr.result)
);
@@ -1548,6 +1565,40 @@ returns [List<Cons<Computation, Instruction>> result]
@init
{
$result = new ArrayList<Cons<Computation, Instruction>>();
+ /* TODO: resolve grammar collisions */
+}
+:
+ (
+ L_PAREN WS* non_text_value WS+
+ {
+ HIERARCHICAL_VARIABLES.push(new ArrayList());
+ }
+ general_fate_instr
+ {
+ for (final String s: HIERARCHICAL_VARIABLES.pop())
+ {
+ LOCAL_VARIABLES.peekFirst().remove(s);
+ }
+ }
+ WS* R_PAREN
+ {
+ $result.add
+ (
+ new Cons(($non_text_value.result), ($general_fate_instr.result))
+ );
+ }
+ WS*
+ )+
+ {
+ }
+;
+
+instr_switch_list
+returns [List<Cons<Computation, Instruction>> result]
+@init
+{
+ $result = new ArrayList<Cons<Computation, Instruction>>();
+ /* TODO: resolve grammar collisions */
}
:
(
@@ -1564,7 +1615,10 @@ returns [List<Cons<Computation, Instruction>> result]
}
WS* R_PAREN
{
- $result.add(new Cons(($value.result), ($general_fate_instr.result)));
+ $result.add
+ (
+ new Cons(($value.result), ($general_fate_instr.result))
+ );
}
WS*
)+
@@ -1620,7 +1674,7 @@ returns [Instruction result]
);
}
- | IF_KW value WS+ player_choice WS* R_PAREN
+ | IF_KW non_text_value WS+ player_choice WS* R_PAREN
{
$result =
IfInstruction.build
@@ -1630,13 +1684,13 @@ returns [Instruction result]
($IF_KW.getLine()),
($IF_KW.getCharPositionInLine())
),
- ($value.result),
+ ($non_text_value.result),
($player_choice.result)
);
}
| IF_ELSE_KW
- value WS+
+ non_text_value WS+
if_true=player_choice WS+
if_false=player_choice WS*
R_PAREN
@@ -1649,7 +1703,7 @@ returns [Instruction result]
($IF_ELSE_KW.getLine()),
($IF_ELSE_KW.getCharPositionInLine())
),
- ($value.result),
+ ($non_text_value.result),
($if_true.result),
($if_false.result)
);
@@ -1669,7 +1723,7 @@ returns [Instruction result]
);
}
- | SWITCH_KW value WS* player_choice_cond_list WS+ player_choice WS* R_PAREN
+ | SWITCH_KW value WS* player_choice_switch_list WS+ player_choice WS* R_PAREN
{
$result =
SwitchInstruction.build
@@ -1680,7 +1734,7 @@ returns [Instruction result]
($SWITCH_KW.getCharPositionInLine())
),
($value.result),
- ($player_choice_cond_list.result),
+ ($player_choice_switch_list.result),
($player_choice.result)
);
}
@@ -1801,6 +1855,38 @@ returns [List<Cons<Computation, Instruction>> result]
}
:
(
+ L_PAREN WS* non_text_value WS+ player_choice WS* R_PAREN
+ {
+ $result.add
+ (
+ new Cons(($non_text_value.result), ($player_choice.result))
+ );
+ }
+ WS*
+ )+
+ {
+ }
+;
+catch [final Throwable e]
+{
+ if ((e.getMessage() == null) || !e.getMessage().startsWith("Require"))
+ {
+ throw new ParseCancellationException(CONTEXT.toString() + ((e.getMessage() == null) ? "" : e.getMessage()), e);
+ }
+ else
+ {
+ throw new ParseCancellationException(e);
+ }
+}
+
+player_choice_switch_list
+returns [List<Cons<Computation, Instruction>> result]
+@init
+{
+ $result = new ArrayList<Cons<Computation, Instruction>>();
+}
+:
+ (
L_PAREN WS* value WS+ player_choice WS* R_PAREN
{
$result.add(new Cons(($value.result), ($player_choice.result)));
@@ -2425,7 +2511,7 @@ returns [Computation result]:
);
}
- | AND_KW value_list WS* R_PAREN
+ | AND_KW non_text_value_list WS* R_PAREN
{
$result =
Operation.build
@@ -2436,11 +2522,11 @@ returns [Computation result]:
($AND_KW.getCharPositionInLine())
),
Operator.AND,
- ($value_list.result)
+ ($non_text_value_list.result)
);
}
- | OR_KW value_list WS* R_PAREN
+ | OR_KW non_text_value_list WS* R_PAREN
{
$result =
Operation.build
@@ -2451,11 +2537,11 @@ returns [Computation result]:
($OR_KW.getCharPositionInLine())
),
Operator.OR,
- ($value_list.result)
+ ($non_text_value_list.result)
);
}
- | ONE_IN_KW value_list WS* R_PAREN
+ | ONE_IN_KW non_text_value_list WS* R_PAREN
{
$result =
Operation.build
@@ -2466,11 +2552,11 @@ returns [Computation result]:
($ONE_IN_KW.getCharPositionInLine())
),
Operator.ONE_IN,
- ($value_list.result)
+ ($non_text_value_list.result)
);
}
- | NOT_KW value_list WS* R_PAREN
+ | NOT_KW non_text_value_list WS* R_PAREN
{
$result =
Operation.build
@@ -2481,11 +2567,11 @@ returns [Computation result]:
($NOT_KW.getCharPositionInLine())
),
Operator.NOT,
- ($value_list.result)
+ ($non_text_value_list.result)
);
}
- | IMPLIES_KW value_list WS* R_PAREN
+ | IMPLIES_KW non_text_value_list WS* R_PAREN
{
$result =
Operation.build
@@ -2496,11 +2582,11 @@ returns [Computation result]:
($IMPLIES_KW.getCharPositionInLine())
),
Operator.IMPLIES,
- ($value_list.result)
+ ($non_text_value_list.result)
);
}
- | LOWER_THAN_KW value_list WS* R_PAREN
+ | LOWER_THAN_KW non_text_value_list WS* R_PAREN
{
$result =
Operation.build
@@ -2511,11 +2597,11 @@ returns [Computation result]:
($LOWER_THAN_KW.getCharPositionInLine())
),
Operator.LOWER_THAN,
- ($value_list.result)
+ ($non_text_value_list.result)
);
}
- | LOWER_EQUAL_THAN_KW value_list WS* R_PAREN
+ | LOWER_EQUAL_THAN_KW non_text_value_list WS* R_PAREN
{
$result =
Operation.build
@@ -2526,7 +2612,7 @@ returns [Computation result]:
($LOWER_EQUAL_THAN_KW.getCharPositionInLine())
),
Operator.LOWER_EQUAL_THAN,
- ($value_list.result)
+ ($non_text_value_list.result)
);
}
@@ -2545,7 +2631,7 @@ returns [Computation result]:
);
}
- | GREATER_EQUAL_THAN_KW value_list WS* R_PAREN
+ | GREATER_EQUAL_THAN_KW non_text_value_list WS* R_PAREN
{
$result =
Operation.build
@@ -2556,11 +2642,11 @@ returns [Computation result]:
($GREATER_EQUAL_THAN_KW.getCharPositionInLine())
),
Operator.GREATER_EQUAL_THAN,
- ($value_list.result)
+ ($non_text_value_list.result)
);
}
- | GREATER_THAN_KW value_list WS* R_PAREN
+ | GREATER_THAN_KW non_text_value_list WS* R_PAREN
{
$result =
Operation.build
@@ -2571,7 +2657,7 @@ returns [Computation result]:
($GREATER_THAN_KW.getCharPositionInLine())
),
Operator.GREATER_THAN,
- ($value_list.result)
+ ($non_text_value_list.result)
);
}
@@ -2666,7 +2752,7 @@ catch [final Throwable e]
math_expression
returns [Computation result]:
- PLUS_KW value_list WS* R_PAREN
+ PLUS_KW non_text_value_list WS* R_PAREN
{
$result =
Operation.build
@@ -2677,11 +2763,11 @@ returns [Computation result]:
($PLUS_KW.getCharPositionInLine())
),
Operator.PLUS,
- ($value_list.result)
+ ($non_text_value_list.result)
);
}
- | MINUS_KW value_list WS* R_PAREN
+ | MINUS_KW non_text_value_list WS* R_PAREN
{
$result =
Operation.build
@@ -2692,11 +2778,11 @@ returns [Computation result]:
($MINUS_KW.getCharPositionInLine())
),
Operator.MINUS,
- ($value_list.result)
+ ($non_text_value_list.result)
);
}
- | MIN_KW value_list WS* R_PAREN
+ | MIN_KW non_text_value_list WS* R_PAREN
{
$result =
Operation.build
@@ -2707,11 +2793,11 @@ returns [Computation result]:
($MIN_KW.getCharPositionInLine())
),
Operator.MIN,
- ($value_list.result)
+ ($non_text_value_list.result)
);
}
- | MAX_KW value_list WS* R_PAREN
+ | MAX_KW non_text_value_list WS* R_PAREN
{
$result =
Operation.build
@@ -2722,11 +2808,11 @@ returns [Computation result]:
($MAX_KW.getCharPositionInLine())
),
Operator.MAX,
- ($value_list.result)
+ ($non_text_value_list.result)
);
}
- | CLAMP_KW value_list WS* R_PAREN
+ | CLAMP_KW non_text_value_list WS* R_PAREN
{
$result =
Operation.build
@@ -2737,11 +2823,11 @@ returns [Computation result]:
($CLAMP_KW.getCharPositionInLine())
),
Operator.CLAMP,
- ($value_list.result)
+ ($non_text_value_list.result)
);
}
- | ABS_KW value_list WS* R_PAREN
+ | ABS_KW non_text_value_list WS* R_PAREN
{
$result =
Operation.build
@@ -2752,11 +2838,11 @@ returns [Computation result]:
($ABS_KW.getCharPositionInLine())
),
Operator.ABS,
- ($value_list.result)
+ ($non_text_value_list.result)
);
}
- | MODULO_KW value_list WS* R_PAREN
+ | MODULO_KW non_text_value_list WS* R_PAREN
{
$result =
Operation.build
@@ -2767,11 +2853,11 @@ returns [Computation result]:
($MODULO_KW.getCharPositionInLine())
),
Operator.MODULO,
- ($value_list.result)
+ ($non_text_value_list.result)
);
}
- | TIMES_KW value_list WS* R_PAREN
+ | TIMES_KW non_text_value_list WS* R_PAREN
{
$result =
Operation.build
@@ -2782,11 +2868,11 @@ returns [Computation result]:
($TIMES_KW.getCharPositionInLine())
),
Operator.TIMES,
- ($value_list.result)
+ ($non_text_value_list.result)
);
}
- | DIVIDE_KW value_list WS* R_PAREN
+ | DIVIDE_KW non_text_value_list WS* R_PAREN
{
$result =
Operation.build
@@ -2797,11 +2883,11 @@ returns [Computation result]:
($DIVIDE_KW.getCharPositionInLine())
),
Operator.DIVIDE,
- ($value_list.result)
+ ($non_text_value_list.result)
);
}
- | POWER_KW value_list WS* R_PAREN
+ | POWER_KW non_text_value_list WS* R_PAREN
{
$result =
Operation.build
@@ -2812,11 +2898,11 @@ returns [Computation result]:
($POWER_KW.getCharPositionInLine())
),
Operator.POWER,
- ($value_list.result)
+ ($non_text_value_list.result)
);
}
- | RANDOM_KW value_list WS* R_PAREN
+ | RANDOM_KW non_text_value_list WS* R_PAREN
{
$result =
Operation.build
@@ -2827,7 +2913,7 @@ returns [Computation result]:
($RANDOM_KW.getCharPositionInLine())
),
Operator.RANDOM,
- ($value_list.result)
+ ($non_text_value_list.result)
);
}
@@ -2988,7 +3074,10 @@ catch [final Throwable e]
non_text_value
returns [Computation result]
:
- IF_ELSE_KW cond=value WS+ if_true=value WS+ if_false=value WS* R_PAREN
+ IF_ELSE_KW cond=non_text_value WS+
+ if_true=value WS+
+ if_false=value WS*
+ R_PAREN
{
$result =
IfElseValue.build
@@ -3019,7 +3108,7 @@ returns [Computation result]
);
}
- | CAR_KW value WS* R_PAREN
+ | CAR_KW non_text_value WS* R_PAREN
{
$result =
CarCdr.build
@@ -3029,12 +3118,12 @@ returns [Computation result]
($CAR_KW.getLine()),
($CAR_KW.getCharPositionInLine())
),
- ($value.result),
+ ($non_text_value.result),
true
);
}
- | CDR_KW value WS* R_PAREN
+ | CDR_KW non_text_value WS* R_PAREN
{
$result =
CarCdr.build
@@ -3044,12 +3133,16 @@ returns [Computation result]
($CDR_KW.getLine()),
($CDR_KW.getCharPositionInLine())
),
- ($value.result),
+ ($non_text_value.result),
false
);
}
- | FOLDL_KW fun=value WS+ init=value WS+ inr=value_reference WS* R_PAREN
+ | FOLDL_KW
+ fun=non_text_value WS+
+ init=value WS+
+ inr=value_reference WS*
+ R_PAREN
{
$result =
Fold.build
@@ -3066,7 +3159,11 @@ returns [Computation result]
);
}
- | FOLDR_KW fun=value WS+ init=value WS+ inr=value_reference WS* R_PAREN
+ | FOLDR_KW
+ fun=non_text_value WS+
+ init=value WS+
+ inr=value_reference WS*
+ R_PAREN
{
$result =
Fold.build
@@ -3084,9 +3181,9 @@ returns [Computation result]
}
| RANGE_KW
- vstart=value WS+
- vend=value WS+
- inc=value WS*
+ vstart=non_text_value WS+
+ vend=non_text_value WS+
+ inc=non_text_value WS*
R_PAREN
{
$result =
@@ -3131,7 +3228,11 @@ returns [Computation result]
);
}
- | SWITCH_KW target=value WS* value_cond_list WS* default_val=value WS* R_PAREN
+ | SWITCH_KW
+ target=value WS*
+ value_switch_list WS*
+ default_val=value WS*
+ R_PAREN
{
$result =
SwitchValue.build
@@ -3142,7 +3243,7 @@ returns [Computation result]
($SWITCH_KW.getCharPositionInLine())
),
($target.result),
- ($value_cond_list.result),
+ ($value_switch_list.result),
($default_val.result)
);
}
@@ -3333,7 +3434,7 @@ returns [Computation result]
);
}
- | ADD_KW val=value WS+ coll=value WS* R_PAREN
+ | ADD_KW val=value WS+ coll=non_text_value WS* R_PAREN
{
$result =
AddElementComputation.build
@@ -3348,7 +3449,11 @@ returns [Computation result]
);
}
- | ADD_AT_KW index=value WS+ element=value WS+ coll=value WS* R_PAREN
+ | ADD_AT_KW
+ index=non_text_value WS+
+ element=value WS+
+ coll=non_text_value WS*
+ R_PAREN
{
$result =
AddElementAtComputation.build
@@ -3365,8 +3470,8 @@ returns [Computation result]
}
| ADD_ALL_KW
- sourcev=value WS+
- targetv=value WS*
+ sourcev=non_text_value WS+
+ targetv=non_text_value WS*
R_PAREN
{
$result =
@@ -3382,7 +3487,7 @@ returns [Computation result]
);
}
- | REMOVE_ONE_KW val=value WS+ coll=value WS* R_PAREN
+ | REMOVE_ONE_KW val=value WS+ coll=non_text_value WS* R_PAREN
{
$result =
RemoveElementComputation.build
@@ -3397,7 +3502,7 @@ returns [Computation result]
);
}
- | REMOVE_AT_KW val=value WS+ coll=value WS* R_PAREN
+ | REMOVE_AT_KW val=value WS+ coll=non_text_value WS* R_PAREN
{
$result =
RemoveElementAtComputation.build
@@ -3412,7 +3517,7 @@ returns [Computation result]
);
}
- | REMOVE_ALL_KW val=value WS+ coll=value WS* R_PAREN
+ | REMOVE_ALL_KW val=value WS+ coll=non_text_value WS* R_PAREN
{
$result =
RemoveAllOfElementComputation.build
@@ -3427,7 +3532,7 @@ returns [Computation result]
);
}
- | REVERSE_KW value WS* R_PAREN
+ | REVERSE_KW non_text_value WS* R_PAREN
{
$result =
ReverseListComputation.build
@@ -3437,11 +3542,11 @@ returns [Computation result]
($REVERSE_KW.getLine()),
($REVERSE_KW.getCharPositionInLine())
),
- ($value.result)
+ ($non_text_value.result)
);
}
- | PUSH_LEFT_KW val=value WS+ coll=value WS* R_PAREN
+ | PUSH_LEFT_KW val=value WS+ coll=non_text_value WS* R_PAREN
{
$result =
PushElementComputation.build
@@ -3457,7 +3562,7 @@ returns [Computation result]
);
}
- | PUSH_RIGHT_KW val=value WS+ coll=value WS* R_PAREN
+ | PUSH_RIGHT_KW val=value WS+ coll=non_text_value WS* R_PAREN
{
$result =
PushElementComputation.build
@@ -3473,7 +3578,7 @@ returns [Computation result]
);
}
- | POP_LEFT_KW value WS* R_PAREN
+ | POP_LEFT_KW non_text_value WS* R_PAREN
{
$result =
PopElementComputation.build
@@ -3483,12 +3588,12 @@ returns [Computation result]
($POP_LEFT_KW.getLine()),
($POP_LEFT_KW.getCharPositionInLine())
),
- ($value.result),
+ ($non_text_value.result),
true
);
}
- | POP_RIGHT_KW value WS* R_PAREN
+ | POP_RIGHT_KW non_text_value WS* R_PAREN
{
$result =
PopElementComputation.build
@@ -3498,12 +3603,12 @@ returns [Computation result]
($POP_RIGHT_KW.getLine()),
($POP_RIGHT_KW.getCharPositionInLine())
),
- ($value.result),
+ ($non_text_value.result),
false
);
}
- | MAP_KW fun=value WS+ inv=value WS* R_PAREN
+ | MAP_KW fun=non_text_value WS+ inv=non_text_value WS* R_PAREN
{
$result =
tonkadur.fate.v1.lang.computation.MapComputation.build
@@ -3518,7 +3623,7 @@ returns [Computation result]
);
}
- | INDEXED_MAP_KW fun=value WS+ inv=value WS* R_PAREN
+ | INDEXED_MAP_KW fun=non_text_value WS+ inv=non_text_value WS* R_PAREN
{
$result =
IndexedMapComputation.build
@@ -3533,7 +3638,11 @@ returns [Computation result]
);
}
- | MERGE_TO_LIST_KW fun=value WS+ inv0=value WS+ inv1=value WS* R_PAREN
+ | MERGE_TO_LIST_KW
+ fun=non_text_value WS+
+ inv0=non_text_value WS+
+ inv1=non_text_value WS*
+ R_PAREN
{
$result =
MergeComputation.build
@@ -3553,11 +3662,11 @@ returns [Computation result]
}
| MERGE_TO_LIST_KW
- fun=value WS+
+ fun=non_text_value WS+
def0=value WS+
- inv0=value WS+
+ inv0=non_text_value WS+
def1=value WS+
- inv1=value WS*
+ inv1=non_text_value WS*
R_PAREN
{
$result =
@@ -3578,9 +3687,9 @@ returns [Computation result]
}
| MERGE_TO_SET_KW
- fun=value WS+
- inv0=value WS+
- inv1=value WS*
+ fun=non_text_value WS+
+ inv0=non_text_value WS+
+ inv1=non_text_value WS*
R_PAREN
{
$result =
@@ -3601,11 +3710,11 @@ returns [Computation result]
}
| MERGE_TO_SET_KW
- fun=value WS+
+ fun=non_text_value WS+
def0=value WS+
- inv0=value WS+
+ inv0=non_text_value WS+
def1=value WS+
- inv1=value WS*
+ inv1=non_text_value WS*
R_PAREN
{
$result =
@@ -3626,9 +3735,9 @@ returns [Computation result]
}
| SUB_LIST_KW
- vstart=value WS+
- vend=value WS+
- inv=value WS*
+ vstart=non_text_value WS+
+ vend=non_text_value WS+
+ inv=non_text_value WS*
R_PAREN
{
$result =
@@ -3645,7 +3754,7 @@ returns [Computation result]
);
}
- | FILTER_KW fun=value WS+ coll=value WS* R_PAREN
+ | FILTER_KW fun=non_text_value WS+ coll=non_text_value WS* R_PAREN
{
$result =
FilterComputation.build
@@ -3660,10 +3769,7 @@ returns [Computation result]
);
}
- | PARTITION_KW
- fun=value WS+
- coll=value WS*
- R_PAREN
+ | PARTITION_KW fun=non_text_value WS+ coll=non_text_value WS* R_PAREN
{
$result =
PartitionComputation.build
@@ -3678,7 +3784,7 @@ returns [Computation result]
);
}
- | SORT_KW fun=value WS+ coll=value WS* R_PAREN
+ | SORT_KW fun=non_text_value WS+ coll=non_text_value WS* R_PAREN
{
$result =
SortComputation.build
@@ -3694,7 +3800,7 @@ returns [Computation result]
}
- | SHUFFLE_KW value WS* R_PAREN
+ | SHUFFLE_KW non_text_value WS* R_PAREN
{
$result =
ShuffleComputation.build
@@ -3704,11 +3810,11 @@ returns [Computation result]
($SHUFFLE_KW.getLine()),
($SHUFFLE_KW.getCharPositionInLine())
),
- ($value.result)
+ ($non_text_value.result)
);
}
- | SET_FIELDS_KW value WS* field_value_list WS* R_PAREN
+ | SET_FIELDS_KW non_text_value WS* field_value_list WS* R_PAREN
{
/*
* A bit of a lazy solution: build field references, then extract the data
@@ -3730,7 +3836,7 @@ returns [Computation result]
FieldReference.build
(
entry.get_car(),
- ($value.result),
+ ($non_text_value.result),
entry.get_cdr().get_car()
);
@@ -3749,7 +3855,7 @@ returns [Computation result]
($SET_FIELDS_KW.getLine()),
($SET_FIELDS_KW.getCharPositionInLine())
),
- ($value.result),
+ ($non_text_value.result),
assignments
);
}
@@ -3758,6 +3864,57 @@ returns [Computation result]
{
$result = ($value_reference.result);
}
+
+ | WORD
+ {
+ final Origin target_var_origin;
+ Variable target_var;
+ final String[] subrefs;
+
+ subrefs = ($WORD.text).split("\\.");
+
+ target_var_origin =
+ CONTEXT.get_origin_at
+ (
+ ($WORD.getLine()),
+ ($WORD.getCharPositionInLine())
+ );
+
+ target_var = LOCAL_VARIABLES.peekFirst().get(subrefs[0]);
+
+ if (target_var == null)
+ {
+ target_var = WORLD.variables().get(target_var_origin, subrefs[0]);
+ }
+
+ $result =
+ new VariableReference
+ (
+ CONTEXT.get_origin_at
+ (
+ ($WORD.getLine()),
+ ($WORD.getCharPositionInLine())
+ ),
+ target_var
+ );
+
+ if (subrefs.length > 1)
+ {
+ final List<String> subrefs_list;
+
+ subrefs_list = new ArrayList(Arrays.asList(subrefs));
+
+ subrefs_list.remove(0);
+
+ $result =
+ FieldReference.build
+ (
+ target_var_origin,
+ ($result),
+ subrefs_list
+ );
+ }
+ }
;
catch [final Throwable e]
{
@@ -3774,7 +3931,7 @@ catch [final Throwable e]
value_reference
returns [Reference result]
:
- AT_KW value_reference WS* R_PAREN
+ AT_KW non_text_value WS* R_PAREN
{
$result =
AtReference.build
@@ -3784,7 +3941,7 @@ returns [Reference result]
($AT_KW.getLine()),
($AT_KW.getCharPositionInLine())
),
- ($value_reference.result)
+ ($non_text_value.result)
);
}
@@ -3889,6 +4046,23 @@ returns [List<Cons<Computation, Computation>> result]
}
:
(
+ L_PAREN WS* c=non_text_value WS+ v=value WS* R_PAREN WS*
+ {
+ $result.add(new Cons(($c.result), ($v.result)));
+ }
+ )+
+ {
+ }
+;
+
+value_switch_list
+returns [List<Cons<Computation, Computation>> result]
+@init
+{
+ $result = new ArrayList<Cons<Computation, Computation>>();
+}
+:
+ (
L_PAREN WS* c=value WS+ v=value WS* R_PAREN WS*
{
$result.add(new Cons(($c.result), ($v.result)));
@@ -3920,3 +4094,26 @@ returns [List<Computation> result]
{
}
;
+
+non_text_value_list
+returns [List<Computation> result]
+@init
+{
+ $result = new ArrayList<Computation>();
+}
+:
+ (
+ non_text_value
+ {
+ ($result).add(($non_text_value.result));
+ }
+ )*
+ (WS+
+ non_text_value
+ {
+ ($result).add(($non_text_value.result));
+ }
+ )*
+ {
+ }
+;