summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorNathanael Sensfelder <SpamShield0@MultiAgentSystems.org>2021-05-05 21:40:37 +0200
committerNathanael Sensfelder <SpamShield0@MultiAgentSystems.org>2021-05-05 21:40:37 +0200
commitb22d858c37ec605ad571a92461f36460f62af93f (patch)
treecef6358f3d84dca01cee0508d10d5aab4d9aee31 /src
parenta7003a8b3e00ff36470f1aeb931919f57cac2039 (diff)
Dict -> Struct.
Diffstat (limited to 'src')
-rw-r--r--src/core/src/tonkadur/fate/v1/error/UnknownStructureFieldException.java (renamed from src/core/src/tonkadur/fate/v1/error/UnknownDictionaryFieldException.java)10
-rw-r--r--src/core/src/tonkadur/fate/v1/lang/computation/AtReference.java2
-rw-r--r--src/core/src/tonkadur/fate/v1/lang/computation/FieldAccess.java12
-rw-r--r--src/core/src/tonkadur/fate/v1/lang/computation/FieldReference.java12
-rw-r--r--src/core/src/tonkadur/fate/v1/lang/meta/VariableFromWord.java4
-rw-r--r--src/core/src/tonkadur/fate/v1/lang/type/DictionaryType.java152
-rw-r--r--src/core/src/tonkadur/fate/v1/lang/type/StructType.java (renamed from src/core/src/tonkadur/fate/v1/lang/type/DictType.java)28
-rw-r--r--src/core/src/tonkadur/fate/v1/parser/FateLexer.g443
-rw-r--r--src/core/src/tonkadur/fate/v1/parser/FateParser.g4460
-rw-r--r--src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/ComputationCompiler.java4
-rw-r--r--src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/TypeCompiler.java6
11 files changed, 636 insertions, 97 deletions
diff --git a/src/core/src/tonkadur/fate/v1/error/UnknownDictionaryFieldException.java b/src/core/src/tonkadur/fate/v1/error/UnknownStructureFieldException.java
index f5e67f2..7c02bc2 100644
--- a/src/core/src/tonkadur/fate/v1/error/UnknownDictionaryFieldException.java
+++ b/src/core/src/tonkadur/fate/v1/error/UnknownStructureFieldException.java
@@ -7,25 +7,25 @@ import tonkadur.error.ErrorLevel;
import tonkadur.parser.Origin;
import tonkadur.parser.ParsingError;
-import tonkadur.fate.v1.lang.type.DictType;
+import tonkadur.fate.v1.lang.type.StructType;
import tonkadur.fate.v1.lang.type.Type;
-public class UnknownDictionaryFieldException extends ParsingError
+public class UnknownStructureFieldException extends ParsingError
{
/***************************************************************************/
/**** MEMBERS **************************************************************/
/***************************************************************************/
protected final String field_name;
- protected final DictType dict;
+ protected final StructType dict;
/***************************************************************************/
/**** PUBLIC ***************************************************************/
/***************************************************************************/
- public UnknownDictionaryFieldException
+ public UnknownStructureFieldException
(
final Origin origin,
final String field_name,
- final DictType dict
+ final StructType dict
)
{
super(ErrorLevel.ERROR, ErrorCategory.INVALID_USE, origin);
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 d61dbed..7e68f11 100644
--- a/src/core/src/tonkadur/fate/v1/lang/computation/AtReference.java
+++ b/src/core/src/tonkadur/fate/v1/lang/computation/AtReference.java
@@ -7,7 +7,7 @@ import tonkadur.parser.Origin;
import tonkadur.error.ErrorManager;
import tonkadur.fate.v1.error.InvalidTypeException;
-import tonkadur.fate.v1.error.UnknownDictionaryFieldException;
+import tonkadur.fate.v1.error.UnknownStructureFieldException;
import tonkadur.fate.v1.lang.Variable;
diff --git a/src/core/src/tonkadur/fate/v1/lang/computation/FieldAccess.java b/src/core/src/tonkadur/fate/v1/lang/computation/FieldAccess.java
index bc0d6b5..3c4279d 100644
--- a/src/core/src/tonkadur/fate/v1/lang/computation/FieldAccess.java
+++ b/src/core/src/tonkadur/fate/v1/lang/computation/FieldAccess.java
@@ -8,13 +8,13 @@ import tonkadur.parser.Origin;
import tonkadur.error.ErrorManager;
import tonkadur.fate.v1.error.InvalidTypeException;
-import tonkadur.fate.v1.error.UnknownDictionaryFieldException;
+import tonkadur.fate.v1.error.UnknownStructureFieldException;
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.StructType;
import tonkadur.fate.v1.lang.type.Type;
public class FieldAccess extends Computation
@@ -55,7 +55,7 @@ public class FieldAccess extends Computation
)
throws
InvalidTypeException,
- UnknownDictionaryFieldException
+ UnknownStructureFieldException
{
Type current_type;
@@ -67,7 +67,7 @@ public class FieldAccess extends Computation
current_type = parent.get_type();
}
- if (!(current_type instanceof DictType))
+ if (!(current_type instanceof StructType))
{
ErrorManager.handle
(
@@ -84,7 +84,7 @@ public class FieldAccess extends Computation
}
else
{
- current_type = ((DictType) current_type).get_field_type(origin, field);
+ current_type = ((StructType) current_type).get_field_type(origin, field);
}
return new FieldAccess(origin, parent, current_type, field);
@@ -98,7 +98,7 @@ public class FieldAccess extends Computation
)
throws
InvalidTypeException,
- UnknownDictionaryFieldException
+ UnknownStructureFieldException
{
for (final String field: field_sequence)
{
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 942077c..1c9a592 100644
--- a/src/core/src/tonkadur/fate/v1/lang/computation/FieldReference.java
+++ b/src/core/src/tonkadur/fate/v1/lang/computation/FieldReference.java
@@ -8,13 +8,13 @@ import tonkadur.parser.Origin;
import tonkadur.error.ErrorManager;
import tonkadur.fate.v1.error.InvalidTypeException;
-import tonkadur.fate.v1.error.UnknownDictionaryFieldException;
+import tonkadur.fate.v1.error.UnknownStructureFieldException;
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.StructType;
import tonkadur.fate.v1.lang.type.Type;
public class FieldReference extends Reference
@@ -55,7 +55,7 @@ public class FieldReference extends Reference
)
throws
InvalidTypeException,
- UnknownDictionaryFieldException
+ UnknownStructureFieldException
{
Type current_type;
@@ -67,7 +67,7 @@ public class FieldReference extends Reference
current_type = parent.get_type();
}
- if (!(current_type instanceof DictType))
+ if (!(current_type instanceof StructType))
{
ErrorManager.handle
(
@@ -84,7 +84,7 @@ public class FieldReference extends Reference
}
else
{
- current_type = ((DictType) current_type).get_field_type(origin, field);
+ current_type = ((StructType) current_type).get_field_type(origin, field);
}
return new FieldReference(origin, parent, current_type, field);
@@ -98,7 +98,7 @@ public class FieldReference extends Reference
)
throws
InvalidTypeException,
- UnknownDictionaryFieldException
+ UnknownStructureFieldException
{
for (final String field: field_sequence)
{
diff --git a/src/core/src/tonkadur/fate/v1/lang/meta/VariableFromWord.java b/src/core/src/tonkadur/fate/v1/lang/meta/VariableFromWord.java
index 522ad9b..97a7777 100644
--- a/src/core/src/tonkadur/fate/v1/lang/meta/VariableFromWord.java
+++ b/src/core/src/tonkadur/fate/v1/lang/meta/VariableFromWord.java
@@ -20,7 +20,7 @@ import tonkadur.fate.v1.lang.computation.VariableReference;
import tonkadur.fate.v1.lang.type.CollectionType;
import tonkadur.fate.v1.lang.type.PointerType;
-import tonkadur.fate.v1.lang.type.DictType;
+import tonkadur.fate.v1.lang.type.StructType;
import tonkadur.fate.v1.lang.type.Type;
public class VariableFromWord
@@ -81,7 +81,7 @@ public class VariableFromWord
Constant.build(origin, subref)
);
}
- else if (t instanceof DictType)
+ else if (t instanceof StructType)
{
result =
FieldReference.build
diff --git a/src/core/src/tonkadur/fate/v1/lang/type/DictionaryType.java b/src/core/src/tonkadur/fate/v1/lang/type/DictionaryType.java
new file mode 100644
index 0000000..a1f6041
--- /dev/null
+++ b/src/core/src/tonkadur/fate/v1/lang/type/DictionaryType.java
@@ -0,0 +1,152 @@
+package tonkadur.fate.v1.lang.type;
+
+import tonkadur.error.ErrorManager;
+import tonkadur.parser.ParsingError;
+
+import tonkadur.parser.Origin;
+
+import tonkadur.fate.v1.error.InvalidTypeException;
+
+import tonkadur.fate.v1.lang.meta.DeclaredEntity;
+
+public class DictionaryType extends Type
+{
+ /***************************************************************************/
+ /**** MEMBERS **************************************************************/
+ /***************************************************************************/
+ protected final Type key_type;
+ protected final Type value_type;
+
+ /***************************************************************************/
+ /**** PUBLIC ***************************************************************/
+ /***************************************************************************/
+
+ /**** Constructors *********************************************************/
+ public static DictionaryType build
+ (
+ final Origin origin,
+ final Type key_type,
+ final Type value_type,
+ final String name
+ )
+ throws InvalidTypeException
+ {
+ if (!Type.COMPARABLE_TYPES.contains(key_type.get_act_as_type()))
+ {
+ ErrorManager.handle
+ (
+ new InvalidTypeException(origin, key_type, Type.COMPARABLE_TYPES)
+ );
+ }
+
+ return new DictionaryType(origin, key_type, value_type, name);
+ }
+
+
+ /**** Accessors ************************************************************/
+ public Type get_key_type ()
+ {
+ return key_type;
+ }
+
+ public Type get_value_type ()
+ {
+ return value_type;
+ }
+
+ @Override
+ public Type get_act_as_type ()
+ {
+ return Type.DICT;
+ }
+
+ /**** Compatibility ********************************************************/
+ @Override
+ public boolean can_be_used_as (final Type t)
+ {
+ if (t instanceof DictionaryType)
+ {
+ final DictionaryType ct;
+
+ ct = (DictionaryType) t;
+
+ return
+ (
+ key_type.can_be_used_as(ct.key_type)
+ && value_type.can_be_used_as(ct.value_type)
+ );
+ }
+
+ return false;
+ }
+
+ /*
+ * This is for the very special case where a type is used despite not being
+ * even a sub-type of the expected one. Using this rather expensive function,
+ * the most restrictive shared type will be returned. If no such type exists,
+ * the ANY time is returned.
+ */
+ @Override
+ public DeclaredEntity generate_comparable_to (final DeclaredEntity de)
+ {
+ final DictionaryType ct;
+
+ if (!(de instanceof DictionaryType))
+ {
+ return Type.ANY;
+ }
+
+ ct = (DictionaryType) de;
+
+ return
+ new DictionaryType
+ (
+ get_origin(),
+ ((Type) key_type.generate_comparable_to(ct.key_type)),
+ ((Type) value_type.generate_comparable_to(ct.value_type)),
+ name
+ );
+ }
+
+
+ /**** Misc. ****************************************************************/
+ @Override
+ public Type generate_alias (final Origin origin, final String name)
+ {
+ return new DictionaryType(origin, key_type, value_type, name);
+ }
+
+ @Override
+ public String toString ()
+ {
+ final StringBuilder sb = new StringBuilder();
+
+ sb.append("(Dict ");
+ sb.append(key_type.toString());
+ sb.append(" ");
+ sb.append(value_type.toString());
+ sb.append(")::");
+ sb.append(name);
+
+ return sb.toString();
+ }
+
+ /***************************************************************************/
+ /**** PROTECTED ************************************************************/
+ /***************************************************************************/
+
+ /**** Constructors *********************************************************/
+ protected DictionaryType
+ (
+ final Origin origin,
+ final Type key_type,
+ final Type value_type,
+ final String name
+ )
+ {
+ super(origin, null, name);
+
+ this.key_type = key_type;
+ this.value_type = value_type;
+ }
+}
diff --git a/src/core/src/tonkadur/fate/v1/lang/type/DictType.java b/src/core/src/tonkadur/fate/v1/lang/type/StructType.java
index d3ce314..c44e7f4 100644
--- a/src/core/src/tonkadur/fate/v1/lang/type/DictType.java
+++ b/src/core/src/tonkadur/fate/v1/lang/type/StructType.java
@@ -9,11 +9,11 @@ import tonkadur.parser.Origin;
import tonkadur.error.ErrorManager;
-import tonkadur.fate.v1.error.UnknownDictionaryFieldException;
+import tonkadur.fate.v1.error.UnknownStructureFieldException;
import tonkadur.fate.v1.lang.meta.DeclaredEntity;
-public class DictType extends Type
+public class StructType extends Type
{
/***************************************************************************/
/**** MEMBERS **************************************************************/
@@ -25,7 +25,7 @@ public class DictType extends Type
/***************************************************************************/
/**** Constructors *********************************************************/
- public DictType
+ public StructType
(
final Origin origin,
final Map<String, Type> field_types,
@@ -39,7 +39,7 @@ public class DictType extends Type
/**** Accessors ************************************************************/
public Type get_field_type (final Origin call_origin, final String t)
- throws UnknownDictionaryFieldException
+ throws UnknownStructureFieldException
{
final Type result;
@@ -49,7 +49,7 @@ public class DictType extends Type
{
ErrorManager.handle
(
- new UnknownDictionaryFieldException(call_origin, t, this)
+ new UnknownStructureFieldException(call_origin, t, this)
);
return Type.ANY;
@@ -67,11 +67,11 @@ public class DictType extends Type
@Override
public boolean can_be_used_as (final Type t)
{
- if (t instanceof DictType)
+ if (t instanceof StructType)
{
- final DictType dt;
+ final StructType dt;
- dt = (DictType) t;
+ dt = (StructType) t;
for (final Map.Entry<String, Type> own_field: get_fields())
{
@@ -107,14 +107,14 @@ public class DictType extends Type
{
final Map<String, Type> result_field_types;
final Set<String> result_field_names;
- final DictType dt;
+ final StructType dt;
- if (!(de instanceof DictType))
+ if (!(de instanceof StructType))
{
return Type.ANY;
}
- dt = (DictType) de;
+ dt = (StructType) de;
result_field_names = new HashSet<String>();
result_field_types = new HashMap<String, Type>();
@@ -148,7 +148,7 @@ public class DictType extends Type
result_field_types.put(field_name, result_field_type);
}
- return new DictType(get_origin(), result_field_types, name);
+ return new StructType(get_origin(), result_field_types, name);
}
@Override
@@ -161,7 +161,7 @@ public class DictType extends Type
@Override
public Type generate_alias (final Origin origin, final String name)
{
- return new DictType(origin, field_types, name);
+ return new StructType(origin, field_types, name);
}
@Override
@@ -169,7 +169,7 @@ public class DictType extends Type
{
final StringBuilder sb = new StringBuilder();
- sb.append("(Dict ");
+ sb.append("(Struct ");
for (final Map.Entry<String, Type> field: get_fields())
{
diff --git a/src/core/src/tonkadur/fate/v1/parser/FateLexer.g4 b/src/core/src/tonkadur/fate/v1/parser/FateLexer.g4
index 9c1cdb7..9d822a7 100644
--- a/src/core/src/tonkadur/fate/v1/parser/FateLexer.g4
+++ b/src/core/src/tonkadur/fate/v1/parser/FateLexer.g4
@@ -16,6 +16,7 @@ R_PAREN: ')';
ABS_KW: L_PAREN 'abs'('olute'?) SEP+;
+DICT_KW: L_PAREN 'dict'('ionary'?) SEP+;
ACCESS_KW: L_PAREN 'access' SEP+;
ACCESS_POINTER_KW: L_PAREN 'access'US('ptr'|'pointer') SEP+;
ADD_KW: L_PAREN 'add'(US'element')? SEP+;
@@ -37,8 +38,8 @@ CONS_KW: L_PAREN 'cons' SEP+;
COUNT_KW: L_PAREN 'count' SEP+;
DECLARE_ALIAS_TYPE_KW:
L_PAREN ((('declare'|'define'|'def')US(('sub'|'alias')US)?'type')|'typedef') SEP+;
-DECLARE_DICT_TYPE_KW: L_PAREN
- ('declare'|'define'|'def')US('dict'|('struct''ure'?))(US'type')? SEP+;
+DECLARE_STRUCT_TYPE_KW: L_PAREN
+ ('declare'|'define'|'def')US('struct''ure'?)(US'type')? SEP+;
DECLARE_EXTRA_INSTRUCTION_KW: L_PAREN ('declare'|'define'|'def')US'extra'US'instruction' SEP+;
DECLARE_EXTRA_COMPUTATION_KW: L_PAREN ('declare'|'define'|'def')US'extra'US'computation' SEP+;
DECLARE_EXTRA_TYPE_KW: L_PAREN ('declare'|'define'|'def')US'extra'US'type' SEP+;
@@ -50,6 +51,44 @@ EXTERNAL_KW: L_PAREN 'extern'('al'?) SEP+;
DEFAULT_KW: L_PAREN 'default' SEP+;
DEFINE_SEQUENCE_KW: L_PAREN ('declare'|'define'|'def')US(('seq'('uence')?)|('proc'('edure'?))) SEP+;
DIVIDE_KW: L_PAREN ('divide'|'/'|'div') SEP+;
+DICT_TO_LIST_KW:
+ L_PAREN
+ (('dict'('ionary'?)US'to'US'list')|('list'US'from'US'dict'('ionary'?)))
+ SEP+;
+DICT_FROM_LIST_KW:
+ L_PAREN
+ (('dict'('ionary'?)US'from'US'list')|('list'US'to'US'dict'('ionary'?)))
+ SEP+;
+DICT_KEYS_KW: L_PAREN (('get'US)?'dict'('ionary'?)US'keys') SEP+;
+DICT_VALUES_KW: L_PAREN (('get'US)?'dict'('ionary'?)US'values') SEP+;
+DICT_MERGE_KW: L_PAREN ('dict'('ionary'?)US'merge') SEP+;
+DICT_MAP_KW: L_PAREN ('dict'('ionary'?)US'map') SEP+;
+DICT_FILTER_KW: L_PAREN ('dict'('ionary'?)US'filter') SEP+;
+DICT_SET_KW: L_PAREN ('dict'('ionary'?)US'set') SEP+;
+DICT_REMOVE_KW: L_PAREN ('dict'('ionary'?)US'remove') SEP+;
+DICT_HAS_KW: L_PAREN ('dict'('ionary'?)US'has') SEP+;
+DICT_GET_KW: L_PAREN ('dict'('ionary'?)US'get') SEP+;
+DICT_GET_POINTER_KW: L_PAREN ('dict'('ionary'?)US'get'US('ptr'|'pointer')) SEP+;
+
+IMP_DICT_TO_LIST_KW:
+ L_PAREN
+ (('dict'('ionary'?)US'to'US'list')|('list'US'from'US'dict'('ionary'?)))'!'
+ SEP+;
+IMP_DICT_FROM_LIST_KW:
+ L_PAREN
+ (('dict'('ionary'?)US'from'US'list')|('list'US'to'US'dict'('ionary'?)))'!'
+ SEP+;
+IMP_DICT_KEYS_KW: L_PAREN (('get'US)?'dict'('ionary'?)US'keys')'!' SEP+;
+IMP_DICT_VALUES_KW: L_PAREN (('get'US)?'dict'('ionary'?)US'values')'!' SEP+;
+IMP_DICT_MERGE_KW: L_PAREN ('dict'('ionary'?)US'merge')'!' SEP+;
+IMP_DICT_MAP_KW: L_PAREN ('dict'('ionary'?)US'map')'!' SEP+;
+IMP_DICT_FILTER_KW: L_PAREN ('dict'('ionary'?)US'filter')'!' SEP+;
+IMP_DICT_SET_KW: L_PAREN ('dict'('ionary'?)US'set')'!' SEP+;
+IMP_DICT_REMOVE_KW: L_PAREN ('dict'('ionary'?)US'remove')'!' SEP+;
+IMP_DICT_HAS_KW: L_PAREN ('dict'('ionary'?)US'has')'!' SEP+;
+IMP_DICT_GET_KW: L_PAREN ('dict'('ionary'?)US'get')'!' SEP+;
+IMP_DICT_GET_POINTER_KW:
+ L_PAREN ('dict'('ionary'?)US'get'US('ptr'|'pointer'))'!' SEP+;
DO_WHILE_KW: L_PAREN ('do'US'while') SEP+;
ENABLE_TEXT_EFFECT_KW: L_PAREN 'text'US'effect' SEP+;
END_KW: L_PAREN 'end'('!'?) SEP* R_PAREN;
diff --git a/src/core/src/tonkadur/fate/v1/parser/FateParser.g4 b/src/core/src/tonkadur/fate/v1/parser/FateParser.g4
index 1596104..a467b2d 100644
--- a/src/core/src/tonkadur/fate/v1/parser/FateParser.g4
+++ b/src/core/src/tonkadur/fate/v1/parser/FateParser.g4
@@ -57,29 +57,34 @@ options
/******************************************************************************/
/******************************************************************************/
/******************************************************************************/
-fate_file [Context context, Deque<Map<String, Variable>> local_variables, World world]
- @init
- {
- CONTEXT = context;
- WORLD = world;
+fate_file
+[
+ Context context,
+ Deque<Map<String, Variable>> local_variables,
+ World world
+]
+@init
+{
+ CONTEXT = context;
+ WORLD = world;
- if (local_variables == null)
- {
- LOCAL_VARIABLES = new ArrayDeque<Map<String, Variable>>();
- LOCAL_VARIABLES.push(new HashMap<String, Variable>());
- }
- else
- {
- LOCAL_VARIABLES = local_variables;
- }
+ if (local_variables == null)
+ {
+ LOCAL_VARIABLES = new ArrayDeque<Map<String, Variable>>();
+ LOCAL_VARIABLES.push(new HashMap<String, Variable>());
+ }
+ else
+ {
+ LOCAL_VARIABLES = local_variables;
+ }
- HIERARCHICAL_VARIABLES = new ArrayDeque<List<String>>();
- BREAKABLE_LEVELS = 0;
+ HIERARCHICAL_VARIABLES = new ArrayDeque<List<String>>();
+ BREAKABLE_LEVELS = 0;
- HIERARCHICAL_VARIABLES.push(new ArrayList<String>());
- CHOICE_LIMITED_VARIABLES = new ArrayDeque<Collection<String>>();
- }
- :
+ HIERARCHICAL_VARIABLES.push(new ArrayList<String>());
+ CHOICE_LIMITED_VARIABLES = new ArrayDeque<Collection<String>>();
+}
+:
WS* FATE_VERSION_KW WORD WS* R_PAREN WS*
(
(
@@ -118,24 +123,24 @@ returns [List<Instruction> result]
first_level_fate_instr:
DEFINE_SEQUENCE_KW
- new_reference_name
- WS*
- (
- L_PAREN WS* variable_list WS* R_PAREN
- {
- final Map<String, Variable> variable_map;
+ new_reference_name
+ WS*
+ (
+ L_PAREN WS* variable_list WS* R_PAREN
+ {
+ final Map<String, Variable> variable_map;
- variable_map = new HashMap<String, Variable>();
+ variable_map = new HashMap<String, Variable>();
- variable_map.putAll(($variable_list.result).as_map());
+ variable_map.putAll(($variable_list.result).as_map());
- LOCAL_VARIABLES.push(variable_map);
- }
- )
- pre_sequence_point=WS+
- general_fate_sequence
- WS*
- R_PAREN
+ LOCAL_VARIABLES.push(variable_map);
+ }
+ )
+ pre_sequence_point=WS+
+ general_fate_sequence
+ WS*
+ R_PAREN
{
final Origin start_origin, sequence_origin;
final Sequence new_sequence;
@@ -172,11 +177,11 @@ first_level_fate_instr:
}
| DECLARE_VARIABLE_KW
- type
- WS+
- name=new_reference_name
- WS*
- R_PAREN
+ type
+ WS+
+ name=new_reference_name
+ WS*
+ R_PAREN
{
final Origin start_origin, type_origin;
final Variable new_variable;
@@ -201,11 +206,11 @@ first_level_fate_instr:
}
| EXTERNAL_KW
- type
- WS+
- name=new_reference_name
- WS*
- R_PAREN
+ type
+ WS+
+ name=new_reference_name
+ WS*
+ R_PAREN
{
final Origin start_origin, type_origin;
final Variable new_variable;
@@ -229,17 +234,17 @@ first_level_fate_instr:
WORLD.variables().add(new_variable);
}
- | IGNORE_ERROR_KW WORD WS+ first_level_fate_instr WS* R_PAREN
+ | IMP_IGNORE_ERROR_KW WORD WS+ first_level_fate_instr WS* R_PAREN
{
/* TODO: temporarily disable an compiler error category */
}
| DECLARE_TEXT_EFFECT_KW
- new_reference_name
- WS+
- params=type_list
- WS*
- R_PAREN
+ new_reference_name
+ WS+
+ params=type_list
+ WS*
+ R_PAREN
{
final Origin start_origin;
final TextEffect new_text_effect;
@@ -317,7 +322,7 @@ first_level_fate_instr:
WORLD.types().add(new_type);
}
- | DECLARE_DICT_TYPE_KW
+ | DECLARE_STRUCT_TYPE_KW
new_reference_name
WS*
variable_list
@@ -342,12 +347,12 @@ first_level_fate_instr:
start_origin =
CONTEXT.get_origin_at
(
- ($DECLARE_DICT_TYPE_KW.getLine()),
- ($DECLARE_DICT_TYPE_KW.getCharPositionInLine())
+ ($DECLARE_STRUCT_TYPE_KW.getLine()),
+ ($DECLARE_STRUCT_TYPE_KW.getCharPositionInLine())
);
new_type =
- new DictType
+ new StructType
(
start_origin,
field_types,
@@ -732,13 +737,30 @@ returns [Instruction result]
);
}
+ | IMP_DICT_SET_KW key=value WS+ val=value WS+ value_reference WS* R_PAREN
+ {
+ // TODO
+ $result = null;
+ /*
+ SetEntry.build
+ (
+ CONTEXT.get_origin_at
+ (
+ ($IMP_DICT_SET_KW.getLine()),
+ ($IMP_DICT_SET_KW.getCharPositionInLine())
+ ),
+ ($key.result),
+ ($val.result)
+ );
+ */
+ }
+
| IMP_ADD_KW value_list WS+ value_reference WS* R_PAREN
{
final List<Instruction> add_instrs;
add_instrs = new ArrayList<Instruction>();
-
for (final Computation value: ($value_list.result))
{
add_instrs.add
@@ -838,6 +860,27 @@ returns [Instruction result]
$result = ($general_fate_instr.result);
}
+ | IMP_DICT_REMOVE_KW
+ value WS+
+ value_reference WS*
+ R_PAREN
+ {
+ // TODO
+ $result = null;
+ /*
+ RemoveEntry.build
+ (
+ CONTEXT.get_origin_at
+ (
+ ($IMP_DICT_REMOVE_KW.getLine()),
+ ($IMP_DICT_REMOVE_KW.getCharPositionInLine())
+ ),
+ ($value.result),
+ ($value_reference.result)
+ );
+ */
+ }
+
| IMP_REMOVE_ONE_KW
value WS+
value_reference WS*
@@ -1000,6 +1043,26 @@ returns [Instruction result]
);
}
+ | IMP_DICT_MAP_KW non_text_value WS+ value_reference WS* R_PAREN
+ {
+ // TODO
+ $result = null;
+ /*
+ DictMap.build
+ (
+ CONTEXT.get_origin_at
+ (
+ ($IMP_DICT_MAP_KW.getLine()),
+ ($IMP_DICT_MAP_KW.getCharPositionInLine())
+ ),
+ ($non_text_value.result),
+ ($value_reference.result),
+ new ArrayList()
+ );
+ */
+ }
+
+
| IMP_MAP_KW non_text_value WS+ value_reference WS+ value_list WS* R_PAREN
{
$result =
@@ -1052,6 +1115,55 @@ returns [Instruction result]
);
}
+ | IMP_DICT_MERGE_KW
+ fun=non_text_value WS+
+ inv1=non_text_value WS+
+ value_reference WS*
+ R_PAREN
+ {
+ // TODO
+ $result = null;
+ /*
+ DictMerge.build
+ (
+ CONTEXT.get_origin_at
+ (
+ ($IMP_DICT_MERGE_KW.getLine()),
+ ($IMP_DICT_MERGE_KW.getCharPositionInLine())
+ ),
+ ($fun.result),
+ ($inv1.result),
+ ($value_reference.result),
+ new ArrayList()
+ );
+ */
+ }
+
+ | IMP_DICT_MERGE_KW
+ fun=non_text_value WS+
+ inv1=non_text_value WS+
+ value_reference WS+
+ value_list WS*
+ R_PAREN
+ {
+ // TODO
+ $result = null;
+ /*
+ DictMerge.build
+ (
+ CONTEXT.get_origin_at
+ (
+ ($IMP_DICT_MERGE_KW.getLine()),
+ ($IMP_DICT_MERGE_KW.getCharPositionInLine())
+ ),
+ ($fun.result),
+ ($inv1.result),
+ ($value_reference.result),
+ ($value_list.result)
+ );
+ */
+ }
+
| IMP_MERGE_KW
fun=non_text_value WS+
inv1=non_text_value WS+
@@ -2107,6 +2219,119 @@ returns [Instruction result]
CHOICE_LIMITED_VARIABLES.pop();
}
+ | IMP_DICT_TO_LIST_KW non_text_value WS+ value_reference WS* R_PAREN
+ {
+ /* TODO */
+ $result = null;
+ }
+
+ | IMP_DICT_FROM_LIST_KW non_text_value WS+ value_reference WS* R_PAREN
+ {
+ /* TODO */
+ $result = null;
+ }
+
+ | IMP_DICT_KEYS_KW non_text_value WS+ value_reference WS* R_PAREN
+ {
+ /* TODO */
+ $result = null;
+ }
+
+ | IMP_DICT_VALUES_KW non_text_value WS+ value_reference WS* R_PAREN
+ {
+ /* TODO */
+ $result = null;
+ }
+
+ | IMP_DICT_MERGE_KW
+ dict0r=value_reference WS+
+ dict1=non_text_value WS+
+ fun=non_text_value WS*
+ R_PAREN
+ {
+ /* TODO */
+ $result = null;
+ }
+
+ | IMP_DICT_MERGE_KW
+ dict0r=value_reference WS+
+ dict1=non_text_value WS+
+ fun=non_text_value WS+
+ value_list WS*
+ R_PAREN
+ {
+ /* TODO */
+ $result = null;
+ }
+
+ | IMP_DICT_FILTER_KW
+ dict0r=value_reference WS+
+ fun=non_text_value WS*
+ R_PAREN
+ {
+ /* TODO */
+ $result = null;
+ }
+
+ | IMP_DICT_FILTER_KW
+ dict0r=value_reference WS+
+ fun=non_text_value WS+
+ value_list WS*
+ R_PAREN
+ {
+ /* TODO */
+ $result = null;
+ }
+
+ | IMP_DICT_SET_KW
+ key=value WS+
+ val=value WS+
+ dict0r=value_reference WS*
+ R_PAREN
+ {
+ /* TODO */
+ $result = null;
+ }
+
+ | IMP_DICT_REMOVE_KW key=value WS+ dict0r=value_reference WS* R_PAREN
+ {
+ /* TODO */
+ $result = null;
+ }
+
+ | IMP_DICT_HAS_KW
+ key=value WS+
+ dict0=non_text_value WS+
+ value_reference WS*
+ R_PAREN
+ {
+
+ /* TODO */
+ $result = null;
+ }
+
+ | IMP_DICT_GET_KW
+ key=value WS+
+ dict0=non_text_value WS+
+ value_reference WS*
+ R_PAREN
+ {
+
+ /* TODO */
+ $result = null;
+ }
+
+ | IMP_DICT_GET_POINTER_KW
+ key=value WS+
+ dict0=non_text_value WS+
+ value_reference WS*
+ R_PAREN
+ {
+
+ /* TODO */
+ $result = null;
+ }
+
| paragraph
{
$result =
@@ -2970,6 +3195,33 @@ returns [Type result]
);
}
+ | DICT_KW key_type=type WS+ val_type=type WS* R_PAREN
+ {
+ final Origin start_origin;
+
+ start_origin =
+ CONTEXT.get_origin_at
+ (
+ ($DICT_KW.getLine()),
+ ($DICT_KW.getCharPositionInLine())
+ );
+
+ $result =
+ DictionaryType.build
+ (
+ start_origin,
+ ($key_type.result),
+ ($val_type.result),
+ (
+ "anonymous ("
+ + ($key_type.result)
+ + " "
+ + $val_type.result
+ + ") dictionary type"
+ )
+ );
+ }
+
| SET_KW type WS* R_PAREN
{
final Origin start_origin;
@@ -5452,6 +5704,102 @@ returns [Computation result]
);
}
+ | DICT_TO_LIST_KW non_text_value WS* R_PAREN
+ {
+ /* TODO */
+ $result = null;
+ }
+
+ | DICT_FROM_LIST_KW non_text_value WS* R_PAREN
+ {
+ /* TODO */
+ $result = null;
+ }
+
+ | DICT_KEYS_KW non_text_value WS* R_PAREN
+ {
+ /* TODO */
+ $result = null;
+ }
+
+ | DICT_VALUES_KW non_text_value WS* R_PAREN
+ {
+ /* TODO */
+ $result = null;
+ }
+
+ | DICT_MERGE_KW
+ dict0=non_text_value WS+
+ dict1=non_text_value WS+
+ fun=non_text_value WS*
+ R_PAREN
+ {
+ /* TODO */
+ $result = null;
+ }
+
+ | DICT_MERGE_KW
+ dict0=non_text_value WS+
+ dict1=non_text_value WS+
+ fun=non_text_value WS+
+ value_list WS*
+ R_PAREN
+ {
+ /* TODO */
+ $result = null;
+ }
+
+ | DICT_FILTER_KW
+ dict0=non_text_value WS+
+ fun=non_text_value WS*
+ R_PAREN
+ {
+ /* TODO */
+ $result = null;
+ }
+
+ | DICT_FILTER_KW
+ dict0=non_text_value WS+
+ fun=non_text_value WS+
+ value_list WS*
+ R_PAREN
+ {
+ /* TODO */
+ $result = null;
+ }
+
+ | DICT_SET_KW key=value WS+ val=value WS+ dict0=non_text_value WS* R_PAREN
+ {
+ /* TODO */
+ $result = null;
+ }
+
+ | DICT_REMOVE_KW key=value WS+ dict0=non_text_value WS* R_PAREN
+ {
+ /* TODO */
+ $result = null;
+ }
+
+ | DICT_HAS_KW key=value WS+ dict0=non_text_value WS* R_PAREN
+ {
+
+ /* TODO */
+ $result = null;
+ }
+
+ | DICT_GET_KW key=value WS+ dict0=non_text_value WS* R_PAREN
+ {
+
+ /* TODO */
+ $result = null;
+ }
+
+ | DICT_GET_POINTER_KW key=value WS+ dict0=non_text_value WS* R_PAREN
+ {
+
+ /* TODO */
+ $result = null;
+ }
| SHUFFLE_KW non_text_value WS* R_PAREN
{
diff --git a/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/ComputationCompiler.java b/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/ComputationCompiler.java
index 2b0efaf..405d32a 100644
--- a/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/ComputationCompiler.java
+++ b/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/ComputationCompiler.java
@@ -495,7 +495,7 @@ implements tonkadur.fate.v1.lang.meta.ComputationVisitor
(
compiler,
(
- (tonkadur.fate.v1.lang.type.DictType)
+ (tonkadur.fate.v1.lang.type.StructType)
n.get_parent().get_type()
).get_field_type(null, n.get_field_name())
)
@@ -526,7 +526,7 @@ implements tonkadur.fate.v1.lang.meta.ComputationVisitor
(
compiler,
(
- (tonkadur.fate.v1.lang.type.DictType)
+ (tonkadur.fate.v1.lang.type.StructType)
n.get_parent().get_type()
).get_field_type(null, n.get_field_name())
)
diff --git a/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/TypeCompiler.java b/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/TypeCompiler.java
index 8dcd70d..1b97e10 100644
--- a/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/TypeCompiler.java
+++ b/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/TypeCompiler.java
@@ -22,13 +22,13 @@ public class TypeCompiler
)
throws Error
{
- if (fate_type instanceof tonkadur.fate.v1.lang.type.DictType)
+ if (fate_type instanceof tonkadur.fate.v1.lang.type.StructType)
{
return
compile_dict_type
(
compiler,
- (tonkadur.fate.v1.lang.type.DictType) fate_type
+ (tonkadur.fate.v1.lang.type.StructType) fate_type
);
}
@@ -119,7 +119,7 @@ public class TypeCompiler
protected static Type compile_dict_type
(
final Compiler compiler,
- final tonkadur.fate.v1.lang.type.DictType fate_dict_type
+ final tonkadur.fate.v1.lang.type.StructType fate_dict_type
)
throws Error
{