From 6655cdcd1c28ac36c8af144573c396d96b9dceee Mon Sep 17 00:00:00 2001 From: Nathanael Sensfelder Date: Sat, 15 Aug 2020 13:54:30 +0200 Subject: Updates example, allows lambdas w/o params. --- data/examples/monster_battle/battle.fate | 2 +- data/examples/monster_battle/in_your_room.fate | 18 +++++------ .../examples/monster_battle/include/creatures.fate | 37 ++++++++++------------ data/examples/monster_battle/include/items.fate | 8 ++--- data/examples/monster_battle/include/player.fate | 2 +- data/examples/monster_battle/include/progress.fate | 2 +- .../monster_battle/include/types/attack.fate | 4 +-- .../monster_battle/include/types/creature.fate | 12 +++---- .../monster_battle/include/types/element.fate | 8 ++--- .../monster_battle/include/types/item.fate | 3 -- .../monster_battle/include/types/player.fate | 2 +- .../examples/monster_battle/include/types/tag.fate | 2 -- data/examples/monster_battle/main.fate | 2 +- src/core/src/tonkadur/fate/v1/lang/World.java | 6 ++++ .../fate/v1/lang/meta/DeclarationCollection.java | 21 ++++++++++-- src/core/src/tonkadur/fate/v1/parser/FateLexer.g4 | 2 +- src/core/src/tonkadur/fate/v1/parser/FateParser.g4 | 20 ++++++++++++ 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 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 entry: collection.entrySet()) @@ -99,7 +108,15 @@ public class DeclarationCollection 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; -- cgit v1.2.3-70-g09d2