summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--data/examples/the_thief/include/characters.fate4
-rw-r--r--src/core/src/tonkadur/fate/v1/parser/FateParser.g430
2 files changed, 32 insertions, 2 deletions
diff --git a/data/examples/the_thief/include/characters.fate b/data/examples/the_thief/include/characters.fate
index 650f253..0bdd797 100644
--- a/data/examples/the_thief/include/characters.fate
+++ b/data/examples/the_thief/include/characters.fate
@@ -3,9 +3,9 @@
(require type/character.fate)
(declare_variable local character oscar)
-(declare_variable local character carla)
+(declare_variable character carla)
(declare_variable local character simon)
-(declare_variable local character julie)
+(declare_variable character julie)
(declare_variable local character statue)
(require include/locations.fate)
diff --git a/src/core/src/tonkadur/fate/v1/parser/FateParser.g4 b/src/core/src/tonkadur/fate/v1/parser/FateParser.g4
index 3ec977a..94920f3 100644
--- a/src/core/src/tonkadur/fate/v1/parser/FateParser.g4
+++ b/src/core/src/tonkadur/fate/v1/parser/FateParser.g4
@@ -135,6 +135,36 @@ first_level_fate_instr:
| DECLARE_VARIABLE_KW
WS+
+ type
+ WS+
+ name=new_reference_name
+ WS*
+ R_PAREN
+ {
+ final Origin start_origin, type_origin;
+ final Variable new_variable;
+
+ start_origin =
+ CONTEXT.get_origin_at
+ (
+ ($DECLARE_VARIABLE_KW.getLine()),
+ ($DECLARE_VARIABLE_KW.getCharPositionInLine())
+ );
+
+ new_variable =
+ new Variable
+ (
+ start_origin,
+ VariableScope.LOCAL,
+ ($type.result),
+ ($name.result)
+ );
+
+ WORLD.variables().add(new_variable);
+ }
+
+ | DECLARE_VARIABLE_KW
+ WS+
scope=WORD
WS+
type