summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--data/tests/locales.fate8
-rw-r--r--data/tests/sequences.fate18
-rw-r--r--src/core/src/tonkadur/fate/v1/parser/FateLexer.g420
-rw-r--r--src/core/src/tonkadur/fate/v1/parser/FateParser.g410
4 files changed, 45 insertions, 11 deletions
diff --git a/data/tests/locales.fate b/data/tests/locales.fate
index 17be7cf..1da42fd 100644
--- a/data/tests/locales.fate
+++ b/data/tests/locales.fate
@@ -16,4 +16,12 @@
لا يهم. يمكنني فقط استخدام الأرقام للعد حتى: (var ﻢﺘﻐﻳﺭ)
)
+(local text txt)
+(local string str)
+
+(set txt (text testing (lp)(var ﻢﺘﻐﻳﺭ)(rp) ))
+(set str (string also that ))
+(var txt) (var str).
+(set str (string what (lp)about(rp) (sp)(sp)(sp)(sp)(sp)(sp)))
+(var txt) (var str).
(end)
diff --git a/data/tests/sequences.fate b/data/tests/sequences.fate
index 62c0948..81b2ca4 100644
--- a/data/tests/sequences.fate
+++ b/data/tests/sequences.fate
@@ -66,7 +66,7 @@
(set collection_size (size collection))
(for (set i 0) (< (var i) (var collection_size)) (set i (+ (var i) 1))
- (if (= (access collection (var i)) (var target))
+ (if (= (access (var i) collection) (var target))
(
(set (at result_holder) (var i))
(done)
@@ -78,12 +78,12 @@
(global (list int) l0)
-(add 0 l0)
-(add 1 l0)
-(add 2 l0)
-(add 3 l0)
-(add 4 l0)
-(add 5 l0)
+(add! 0 l0)
+(add! 1 l0)
+(add! 2 l0)
+(add! 3 l0)
+(add! 4 l0)
+(add! 5 l0)
(call index_of_loop (ptr test_var) (var l0) 5)
@@ -103,7 +103,7 @@
)
(ifelse (= (var i) (var collection_size))
(set (at result_holder) -1)
- (ifelse (= (access collection (var i)) (var target))
+ (ifelse (= (access (var i) collection) (var target))
(set (at result_holder) (var i))
(jump index_of_jump
(var result_holder)
@@ -134,7 +134,7 @@
)
(ifelse (= (var i) (var collection_size))
(set (at result_holder) -1)
- (ifelse (= (access collection (var i)) (var target))
+ (ifelse (= (access (var i) collection) (var target))
(set (at result_holder) (var i))
(call index_of_call
(var result_holder)
diff --git a/src/core/src/tonkadur/fate/v1/parser/FateLexer.g4 b/src/core/src/tonkadur/fate/v1/parser/FateLexer.g4
index 4b6edfc..68bf6d9 100644
--- a/src/core/src/tonkadur/fate/v1/parser/FateLexer.g4
+++ b/src/core/src/tonkadur/fate/v1/parser/FateLexer.g4
@@ -87,6 +87,7 @@ LET_KW: L_PAREN 'let' SEP+;
MINUS_KW: L_PAREN ('minus'|'-') SEP+;
MIN_KW: L_PAREN ('min'('imum'?)) SEP+;
MAP_KW: L_PAREN 'map' SEP+;
+STRING_KW: L_PAREN 'string' SEP+;
IMP_MAP_KW: L_PAREN 'map!' SEP+;
MAX_KW: L_PAREN ('max'('imum'?)) SEP+;
LAMBDA_KW: L_PAREN 'lambda' SEP+;
@@ -164,9 +165,24 @@ VISIT_KW: L_PAREN ('call'|'visit')(US(('seq'('uence'?))|('proc'('edure'?))))? SE
CONTINUE_AS_KW: L_PAREN (('continue'US('as'|'to'|'with'))|('jump'(US'to')?)|('go'US'to')|'exec')(US(('seq'('uence'?))|('proc'('edure'?))))? SEP+;
WHILE_KW: L_PAREN 'while' SEP+;
-WORD: ((~([ \t\r\n()]))|'(lp)'|'(rp)')+
+WORD: ((~([ \t\r\n()]))|'(lp)'|'(rp)'|'(sp)')+
{
- setText(getText().replaceAll("\\(lp\\)", "(").replaceAll("\\(rp\\)", ")"));
+ setText
+ (
+ getText().replaceAll
+ (
+ "\\(sp\\)",
+ " "
+ ).replaceAll
+ (
+ "\\(lp\\)",
+ "("
+ ).replaceAll
+ (
+ "\\(rp\\)",
+ ")"
+ )
+ );
};
COMMENT: WS* ';' .*? '\n' -> channel(HIDDEN);
diff --git a/src/core/src/tonkadur/fate/v1/parser/FateParser.g4 b/src/core/src/tonkadur/fate/v1/parser/FateParser.g4
index 8465af6..dc01452 100644
--- a/src/core/src/tonkadur/fate/v1/parser/FateParser.g4
+++ b/src/core/src/tonkadur/fate/v1/parser/FateParser.g4
@@ -2726,7 +2726,12 @@ returns [Computation result]
final StringBuilder string_builder = new StringBuilder();
}
:
+ STRING_KW sentence WS* R_PAREN
+ {
+ $result = ($sentence.result);
+ }
+ |
first_word=WORD
{
string_builder.append(($first_word.text));
@@ -3672,6 +3677,11 @@ returns [Computation result]
/* TODO: temporarily disable an compiler error category */
}
+ | STRING_KW sentence WS* R_PAREN
+ {
+ $result = ($sentence.result);
+ }
+
| L_PAREN WS+ sentence WS* R_PAREN
{
$result = ($sentence.result);