| 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); |


