| summaryrefslogtreecommitdiff | 
diff options
| -rw-r--r-- | data/tests/locales.fate | 8 | ||||
| -rw-r--r-- | data/tests/sequences.fate | 18 | ||||
| -rw-r--r-- | src/core/src/tonkadur/fate/v1/parser/FateLexer.g4 | 20 | ||||
| -rw-r--r-- | src/core/src/tonkadur/fate/v1/parser/FateParser.g4 | 10 | 
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); | 


