summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNathanael Sensfelder <SpamShield0@MultiAgentSystems.org>2020-08-15 13:54:30 +0200
committerNathanael Sensfelder <SpamShield0@MultiAgentSystems.org>2020-08-15 13:54:30 +0200
commit6655cdcd1c28ac36c8af144573c396d96b9dceee (patch)
treef0eb3d8bb90e5e44fef0de319e5fd8824e72ad7a
parent8fd556f0065b7a634602cf4a8b666a426d4e8de6 (diff)
Updates example, allows lambdas w/o params.
-rw-r--r--data/examples/monster_battle/battle.fate2
-rw-r--r--data/examples/monster_battle/in_your_room.fate18
-rw-r--r--data/examples/monster_battle/include/creatures.fate37
-rw-r--r--data/examples/monster_battle/include/items.fate8
-rw-r--r--data/examples/monster_battle/include/player.fate2
-rw-r--r--data/examples/monster_battle/include/progress.fate2
-rw-r--r--data/examples/monster_battle/include/types/attack.fate4
-rw-r--r--data/examples/monster_battle/include/types/creature.fate12
-rw-r--r--data/examples/monster_battle/include/types/element.fate8
-rw-r--r--data/examples/monster_battle/include/types/item.fate3
-rw-r--r--data/examples/monster_battle/include/types/player.fate2
-rw-r--r--data/examples/monster_battle/include/types/tag.fate2
-rw-r--r--data/examples/monster_battle/main.fate2
-rw-r--r--src/core/src/tonkadur/fate/v1/lang/World.java6
-rw-r--r--src/core/src/tonkadur/fate/v1/lang/meta/DeclarationCollection.java21
-rw-r--r--src/core/src/tonkadur/fate/v1/parser/FateLexer.g42
-rw-r--r--src/core/src/tonkadur/fate/v1/parser/FateParser.g420
17 files changed, 88 insertions, 63 deletions
diff --git a/data/examples/monster_battle/battle.fate b/data/examples/monster_battle/battle.fate
index 9674b95..1bc023a 100644
--- a/data/examples/monster_battle/battle.fate
+++ b/data/examples/monster_battle/battle.fate
@@ -1,5 +1,5 @@
(fate_version 1)
-(define_sequence start_battle
+(define_sequence start_battle ()
(end)
)
diff --git a/data/examples/monster_battle/in_your_room.fate b/data/examples/monster_battle/in_your_room.fate
index 8f30a00..5ca456b 100644
--- a/data/examples/monster_battle/in_your_room.fate
+++ b/data/examples/monster_battle/in_your_room.fate
@@ -9,7 +9,7 @@
(require battle.fate)
-(define_sequence in_your_room
+(define_sequence in_your_room ()
(ifelse
(is_member visited_your_room progress)
(text_effect narrator
@@ -29,16 +29,16 @@
(player_choice
(
( Look for healing items )
- (sequence look_for_healing_items)
+ (jump_to look_for_healing_items)
)
(
( No time! Let's go adventuring! )
- (sequence leave_your_room)
+ (jump_to leave_your_room)
)
)
)
-(define_sequence look_for_healing_items
+(define_sequence look_for_healing_items ()
(text_effect narrator
You anxiously alternate between looking at the clock and looking at piles
of mess for healing items.
@@ -52,16 +52,16 @@
Oh! You found something!
)
)
- (macro get_item (ref (var potion)))
+ (call get_item (ref (var potion)))
)
(text_effect narrator
No, you don't find anything.
)
)
- (sequence in_your_room)
+ (jump_to in_your_room)
)
-(define_sequence leave_your_room
+(define_sequence leave_your_room ()
(text_effect narrator
As you rush through the door of your room, you fail to notice the obstacle
in your path and trip on something that was clearly meant for you.
@@ -70,7 +70,7 @@
(text_effect narrator
It's a monster-holder! There's a note, too.
)
- (macro generate_random_creature (var player.creature))
+ (set player.creature (eval random_creature))
(event pause)
(text_effect note_reading
Hey sleepyhead. I couldn't wake you up for your big day, but lucky you,
@@ -88,5 +88,5 @@
immediately get challenged by some grinning kid who clearly knew you
haven't had time to train and wants to score an easy victory.
)
- (sequence start_battle)
+ (jump_to start_battle)
)
diff --git a/data/examples/monster_battle/include/creatures.fate b/data/examples/monster_battle/include/creatures.fate
index 2ce30c9..393473e 100644
--- a/data/examples/monster_battle/include/creatures.fate
+++ b/data/examples/monster_battle/include/creatures.fate
@@ -2,29 +2,24 @@
(require types/creature.fate)
-(declare_variable creature monster_0)
-(declare_variable creature monster_1)
-(declare_variable creature monster_2)
-(declare_variable creature monster_3)
-(declare_variable creature monster_4)
-(declare_variable creature monster_5)
+(global creature monster_0)
+(global creature monster_1)
+(global creature monster_2)
+(global creature monster_3)
+(global creature monster_4)
+(global creature monster_5)
-(declare_variable int i)
+(global (lambda creature ()) random_creature)
-(define_macro generate_random_creature
- (
- (creature creature)
- )
-
- (set i (rand 0 5))
- (set (param creature)
- (cond
- ((= (var i) 0) (var monster_0))
- ((= (var i) 1) (var monster_1))
- ((= (var i) 2) (var monster_2))
- ((= (var i) 3) (var monster_3))
- ((= (var i) 4) (var monster_4))
- ((= (var i) 5) (var monster_5))
+(set random_creature
+ (lambda ()
+ (switch (rand 0 5)
+ (0 (var monster_0))
+ (1 (var monster_0))
+ (2 (var monster_0))
+ (3 (var monster_0))
+ (4 (var monster_0))
+ (var monster_5)
)
)
)
diff --git a/data/examples/monster_battle/include/items.fate b/data/examples/monster_battle/include/items.fate
index 3ddca93..b5100ba 100644
--- a/data/examples/monster_battle/include/items.fate
+++ b/data/examples/monster_battle/include/items.fate
@@ -3,11 +3,11 @@
(require types/item.fate)
(require player.fate)
-(declare_variable item potion)
+(global item potion)
-(define_macro get_item
+(define_procedure get_item
(
- (item_ptr item)
+ ((ptr item) item)
)
- (add (param item) player.inventory)
+ (add (var item) player.inventory)
)
diff --git a/data/examples/monster_battle/include/player.fate b/data/examples/monster_battle/include/player.fate
index 18e46dc..1d1a1ef 100644
--- a/data/examples/monster_battle/include/player.fate
+++ b/data/examples/monster_battle/include/player.fate
@@ -2,4 +2,4 @@
(require types/player.fate)
-(define_variable player player)
+(global player player)
diff --git a/data/examples/monster_battle/include/progress.fate b/data/examples/monster_battle/include/progress.fate
index ee08320..3db8884 100644
--- a/data/examples/monster_battle/include/progress.fate
+++ b/data/examples/monster_battle/include/progress.fate
@@ -2,4 +2,4 @@
(require types/tag.fate)
-(define_variable tag_collection progress)
+(global (list tag) progress)
diff --git a/data/examples/monster_battle/include/types/attack.fate b/data/examples/monster_battle/include/types/attack.fate
index da273ad..2e35187 100644
--- a/data/examples/monster_battle/include/types/attack.fate
+++ b/data/examples/monster_battle/include/types/attack.fate
@@ -4,8 +4,6 @@
(declare_dict_type attack
(string name)
- (element_ptr element)
+ ((ptr element) element)
(int power)
)
-
-(declare_ref_type attack attack_ptr)
diff --git a/data/examples/monster_battle/include/types/creature.fate b/data/examples/monster_battle/include/types/creature.fate
index ad7c957..72237c3 100644
--- a/data/examples/monster_battle/include/types/creature.fate
+++ b/data/examples/monster_battle/include/types/creature.fate
@@ -7,11 +7,9 @@
(string name)
(int current_health)
(int max_health)
- (element_ptr element)
- (attack_ptr attack_0)
- (attack_ptr attack_1)
- (attack_ptr attack_2)
- (attack_ptr attack_3)
+ ((ptr element) element)
+ ((ptr attack) attack_0)
+ ((ptr attack) attack_1)
+ ((ptr attack) attack_2)
+ ((ptr attack) attack_3)
)
-
-(declare_ref_type creature creature_ptr)
diff --git a/data/examples/monster_battle/include/types/element.fate b/data/examples/monster_battle/include/types/element.fate
index 7500b16..75ff2e0 100644
--- a/data/examples/monster_battle/include/types/element.fate
+++ b/data/examples/monster_battle/include/types/element.fate
@@ -2,12 +2,8 @@
(declare_subtype string element_name)
-(declare_set_type element_name element_name_set)
-
(declare_dict_type element
(element_name name)
- (element_name_set strong_against)
- (element_name_set weak_against)
+ ((set element_name) strong_against)
+ ((set element_name) weak_against)
)
-
-(declare_ref_type element element_ptr)
diff --git a/data/examples/monster_battle/include/types/item.fate b/data/examples/monster_battle/include/types/item.fate
index 0b50475..3062861 100644
--- a/data/examples/monster_battle/include/types/item.fate
+++ b/data/examples/monster_battle/include/types/item.fate
@@ -4,6 +4,3 @@
(string name)
(int price)
)
-
-(declare_ref_type item item_ptr)
-(declare_list_type item_ptr item_ptr_list)
diff --git a/data/examples/monster_battle/include/types/player.fate b/data/examples/monster_battle/include/types/player.fate
index 2573c38..83a9c36 100644
--- a/data/examples/monster_battle/include/types/player.fate
+++ b/data/examples/monster_battle/include/types/player.fate
@@ -5,6 +5,6 @@
(define_dict_type player
(creature creature)
- (item_ptr_list inventory)
+ ((list (ptr item)) inventory)
(int money)
)
diff --git a/data/examples/monster_battle/include/types/tag.fate b/data/examples/monster_battle/include/types/tag.fate
index 8cca7fe..04a6b00 100644
--- a/data/examples/monster_battle/include/types/tag.fate
+++ b/data/examples/monster_battle/include/types/tag.fate
@@ -1,5 +1,3 @@
(fate_version 1)
(define_subtype string tag)
-
-(define_set_type tag tag_collection)
diff --git a/data/examples/monster_battle/main.fate b/data/examples/monster_battle/main.fate
index e77e734..a10fd48 100644
--- a/data/examples/monster_battle/main.fate
+++ b/data/examples/monster_battle/main.fate
@@ -22,4 +22,4 @@
(text_effect narrator
You stand in your room, having just dressed.
)
-(sequence in_your_room)
+(jump_to in_your_room)
diff --git a/src/core/src/tonkadur/fate/v1/lang/World.java b/src/core/src/tonkadur/fate/v1/lang/World.java
index 4b19cce..98a6f06 100644
--- a/src/core/src/tonkadur/fate/v1/lang/World.java
+++ b/src/core/src/tonkadur/fate/v1/lang/World.java
@@ -259,6 +259,12 @@ public class World
sb.append(System.lineSeparator());
sb.append(System.lineSeparator());
+ sb.append("Sequences: ");
+ sb.append(System.lineSeparator());
+ sb.append(sequence_collection.toString());
+ sb.append(System.lineSeparator());
+ sb.append(System.lineSeparator());
+
sb.append(")");
return sb.toString();
diff --git a/src/core/src/tonkadur/fate/v1/lang/meta/DeclarationCollection.java b/src/core/src/tonkadur/fate/v1/lang/meta/DeclarationCollection.java
index 0250981..43d8209 100644
--- a/src/core/src/tonkadur/fate/v1/lang/meta/DeclarationCollection.java
+++ b/src/core/src/tonkadur/fate/v1/lang/meta/DeclarationCollection.java
@@ -91,7 +91,16 @@ public class DeclarationCollection <Declared extends DeclaredEntity>
final StringBuilder sb = new StringBuilder();
sb.append("Default Value: ");
- sb.append(value_on_missing.toString());
+
+ if (value_on_missing == null)
+ {
+ sb.append("null");
+ }
+ else
+ {
+ sb.append(value_on_missing.toString());
+ }
+
sb.append(System.lineSeparator());
for (final Map.Entry<String, Declared> entry: collection.entrySet())
@@ -99,7 +108,15 @@ public class DeclarationCollection <Declared extends DeclaredEntity>
sb.append("- ");
sb.append(entry.getKey());
sb.append(": ");
- sb.append(entry.getValue().toString());
+
+ if (entry.getValue() == null)
+ {
+ sb.append("null");
+ }
+ else
+ {
+ sb.append(entry.getValue().toString());
+ }
sb.append(System.lineSeparator());
}
diff --git a/src/core/src/tonkadur/fate/v1/parser/FateLexer.g4 b/src/core/src/tonkadur/fate/v1/parser/FateLexer.g4
index 6fcb44b..294eac8 100644
--- a/src/core/src/tonkadur/fate/v1/parser/FateLexer.g4
+++ b/src/core/src/tonkadur/fate/v1/parser/FateLexer.g4
@@ -32,7 +32,7 @@ DECLARE_EVENT_TYPE_KW: L_PAREN ('declare'|'define'|'def')US'event'(US'type')? SE
DECLARE_TEXT_EFFECT_KW: L_PAREN ('declare'|'define'|'def')US'text'US'effect' SEP+;
DECLARE_VARIABLE_KW: L_PAREN 'global' SEP+;
LOCAL_KW: L_PAREN 'local' SEP+;
-DEFINE_SEQUENCE_KW: L_PAREN ('declare'|'define'|'def')US'seq'('uence')? SEP+;
+DEFINE_SEQUENCE_KW: L_PAREN ('declare'|'define'|'def')US(('seq'('uence')?)|('proc'('edure'?))) SEP+;
DIVIDE_KW: L_PAREN ('divide'|'/'|'div') SEP+;
DO_WHILE_KW: L_PAREN ('do'US'while') SEP+;
ENABLE_TEXT_EFFECT_KW: L_PAREN 'text'US'effect' SEP+;
diff --git a/src/core/src/tonkadur/fate/v1/parser/FateParser.g4 b/src/core/src/tonkadur/fate/v1/parser/FateParser.g4
index 14accd4..7bde449 100644
--- a/src/core/src/tonkadur/fate/v1/parser/FateParser.g4
+++ b/src/core/src/tonkadur/fate/v1/parser/FateParser.g4
@@ -2446,6 +2446,26 @@ returns [Computation result]
}
}
+ | EVAL_KW value_reference WS* R_PAREN
+ {
+ final Origin origin;
+
+ origin =
+ CONTEXT.get_origin_at
+ (
+ ($EVAL_KW.getLine()),
+ ($EVAL_KW.getCharPositionInLine())
+ );
+
+ $result =
+ LambdaEvaluation.build
+ (
+ origin,
+ ($value_reference.result),
+ new ArrayList()
+ );
+ }
+
| EVAL_KW value_reference WS+ value_list WS* R_PAREN
{
final Origin origin;