| summaryrefslogtreecommitdiff | 
diff options
| author | nsensfel <SpamShield0@noot-noot.org> | 2020-09-07 10:34:31 +0200 | 
|---|---|---|
| committer | nsensfel <SpamShield0@noot-noot.org> | 2020-09-07 10:34:31 +0200 | 
| commit | e7e5ec29417559a155c6f79e1bbeed77a9fe1ff3 (patch) | |
| tree | 088cb618845f00a5eee0642a6571b4f0ef8ea42c /src/core | |
| parent | 07c0f271e1f30fdc87da9ef122781c83ff410f64 (diff) | |
Adds syntax for https://github.com/nsensfel/tonkadur/issues/11
Diffstat (limited to 'src/core')
| -rw-r--r-- | src/core/src/tonkadur/fate/v1/parser/FateLexer.g4 | 18 | ||||
| -rw-r--r-- | src/core/src/tonkadur/fate/v1/parser/FateParser.g4 | 147 | 
2 files changed, 162 insertions, 3 deletions
| diff --git a/src/core/src/tonkadur/fate/v1/parser/FateLexer.g4 b/src/core/src/tonkadur/fate/v1/parser/FateLexer.g4 index 03014ac..3ac7851 100644 --- a/src/core/src/tonkadur/fate/v1/parser/FateLexer.g4 +++ b/src/core/src/tonkadur/fate/v1/parser/FateLexer.g4 @@ -23,9 +23,12 @@ AND_KW: L_PAREN ('and'|'/\\') SEP+;  ASSERT_KW: L_PAREN 'assert' SEP+;  AT_KW: L_PAREN 'at' SEP+;  BREAK_KW: L_PAREN 'break)'; +CAR_KW: L_PAREN 'car' SEP+;  CAST_KW: L_PAREN 'cast' SEP+; +CDR_KW: L_PAREN 'cdr' SEP+;  CLEAR_KW: L_PAREN 'clear' SEP+;  COND_KW: L_PAREN 'cond' SEP+; +CONS_KW: L_PAREN 'cons' SEP+;  COUNT_KW: L_PAREN 'count' SEP+;  DECLARE_ALIAS_TYPE_KW:     L_PAREN ((('declare'|'define'|'def')US(('sub'|'alias')US)?'type')|'typedef') SEP+; @@ -49,8 +52,11 @@ FALSE_KW: L_PAREN 'false)';  IGNORE_ERROR_KW: L_PAREN 'ignore'US('error'|'warning') SEP+;  FATE_VERSION_KW: L_PAREN 'fate'US'version' SEP+;  FIELD_KW: L_PAREN 'field' SEP+; +FILTER_KW: L_PAREN 'filter' SEP+;  FOR_EACH_KW: L_PAREN ('for'US'each') SEP+;  FOR_KW: L_PAREN 'for' SEP+; +FOLDR_KW: L_PAREN 'foldr' SEP+; +FOLDL_KW: L_PAREN 'foldl' SEP+;  FREE_KW: L_PAREN ('free'|'release'|'destroy') SEP+;  GREATER_EQUAL_THAN_KW: L_PAREN ('greater'US'equal'US'than'|'>='|'ge') SEP+;  GREATER_THAN_KW: L_PAREN ('greater'US'than'|'>'|'gt') SEP+; @@ -59,6 +65,7 @@ IF_KW: L_PAREN 'if' SEP+;  IMPLIES_KW: L_PAREN ('implies'|'=>'|'->') SEP+;  INCLUDE_KW: L_PAREN 'include' SEP+;  INDEX_OF_KW: L_PAREN ('index'US'of') SEP+; +INDEXED_MAP_KW: L_PAREN 'indexed'US'map' SEP+;  IS_MEMBER_KW: L_PAREN ('is'US'member'|'contains'|'has') SEP+;  IS_EMPTY_KW: L_PAREN 'is'US'empty' SEP+;  LOWER_EQUAL_THAN_KW: L_PAREN ('lower'US'equal'US'than'|'=<'|'<='|'le') SEP+; @@ -66,20 +73,28 @@ LOWER_THAN_KW: L_PAREN ('lower'US'than'|'<'|'lt') SEP+;  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+;  MAX_KW: L_PAREN ('max'('imum'?)) SEP+;  LAMBDA_KW: L_PAREN 'lambda' SEP+;  EVAL_KW: L_PAREN 'eval'('uate'?) SEP+;  CLAMP_KW: L_PAREN ('clamp') SEP+;  MODULO_KW: L_PAREN ('modulo'|'%'|'mod') SEP+; +MERGE_KW : L_PAREN 'merge' SEP+;  NEWLINE_KW: L_PAREN 'newline)';  NEW_KW: L_PAREN ('new'|'reserve'|'create') SEP+;  NOT_KW: L_PAREN ('not'|'~'|'!') SEP+;  ONE_IN_KW: L_PAREN ('exactly'US)?'one'(US'in')? SEP+;  OR_KW: L_PAREN ('or'|'\\/') SEP+;  RICH_TEXT_KW: L_PAREN (('rich'US)?'text') SEP+; +PARTITION_KW: L_PAREN 'partition' SEP+; +POP_LEFT: L_PAREN 'pop'US'left' SEP+; +POP_RIGHT: L_PAREN 'pop'US'right' SEP+; +PUSH_LEFT: L_PAREN 'push'US'left' SEP+; +PUSH_RIGHT: L_PAREN 'push'US'right' SEP+;  PLAYER_CHOICE_KW: L_PAREN ('choice'|'user'US'choice'|'player'US'choice') SEP+;  PLUS_KW: L_PAREN ('plus'|'+') SEP+;  POWER_KW: L_PAREN ('power'|'^'|'**'|'pow') SEP+; +RANGE_KW: L_PAREN 'range' SEP+;  RANDOM_KW: L_PAREN ('random'|'rand'|'rnd') SEP+;  REF_KW: L_PAREN (((('ref'('erence'?))|'ptr'|'pointer')(US'to')?)|('address'(US'of'))) SEP+;  REMOVE_ALL_KW: L_PAREN 'remove'US'all' SEP+; @@ -90,8 +105,11 @@ REQUIRE_EXTENSION_KW: L_PAREN 'require'US'extension' SEP+;  REQUIRE_KW: L_PAREN 'require' SEP+;  PROMPT_STRING_KW: L_PAREN 'prompt_string' SEP+;  PROMPT_INTEGER_KW: L_PAREN 'prompt_int'('eger'?) SEP+; +SHUFFLE_KW: L_PAREN 'shuffle' SEP+; +SORT_KW: L_PAREN 'sort' SEP+;  SET_FIELDS_KW: L_PAREN 'set'US'fields' SEP+;  SET_KW: L_PAREN 'set'(US(('val''ue'?)|('var''iable'?)))? SEP+; +SUB_LIST_KW: L_PAREN 'sub'US'list' SEP+;  LIST_KW: L_PAREN 'list' SEP+;  SIZE_KW: L_PAREN 'size' SEP+;  SWITCH_KW: L_PAREN 'switch' SEP+; diff --git a/src/core/src/tonkadur/fate/v1/parser/FateParser.g4 b/src/core/src/tonkadur/fate/v1/parser/FateParser.g4 index 4cf3f8f..b84313e 100644 --- a/src/core/src/tonkadur/fate/v1/parser/FateParser.g4 +++ b/src/core/src/tonkadur/fate/v1/parser/FateParser.g4 @@ -25,7 +25,8 @@ options     import tonkadur.parser.Location;     import tonkadur.parser.Origin; -   import tonkadur.fate.v1.Utils; +/* Conflicts with an existing package */ +/*   import tonkadur.fate.v1.tonkadur.fate.v1.Utils; */     import tonkadur.fate.v1.error.DuplicateLocalVariableException;     import tonkadur.fate.v1.error.IllegalReferenceNameException; @@ -376,7 +377,7 @@ first_level_fate_instr:              filename           ); -         Utils.add_file_content(filename, CONTEXT, WORLD); +         tonkadur.fate.v1.Utils.add_file_content(filename, CONTEXT, WORLD);           CONTEXT.pop();        } @@ -398,7 +399,7 @@ first_level_fate_instr:           filename        ); -      Utils.add_file_content(filename, CONTEXT, WORLD); +      tonkadur.fate.v1.Utils.add_file_content(filename, CONTEXT, WORLD);        CONTEXT.pop();     } @@ -707,6 +708,118 @@ returns [Instruction result]           );     } +   | MAP_KW value WS+ inr=value_reference WS+ outr=value_reference WS* R_PAREN +   { +      /* TODO */ + +      $result = null; +   } + +   | INDEXED_MAP_KW value WS+ inr=value_reference WS+ outr=value_reference WS* R_PAREN +   { +      /* TODO */ + +      $result = null; +   } + +   | FOLDL_KW fun=value WS+ init=value WS+ inr=value_reference WS+ outv=value WS* R_PAREN +   { +      /* TODO */ + +      $result = null; +   } + +   | FOLDR_KW fun=value WS+ init=value WS+ inr=value_reference WS+ outv=value WS* R_PAREN +   { +      /* TODO */ + +      $result = null; +   } + +   | MERGE_KW +      fun=value WS+ +      init=value WS+ +      inr0=value_reference WS+ +      inr1=value_reference WS+ +      outr=value_reference WS* +      R_PAREN +   { +      /* TODO */ + +      $result = null; +   } + +   | MERGE_KW +      fun=value WS+ +      init=value WS+ +      def0=value WS+ +      inr0=value_reference WS+ +      def1=value WS+ +      inr1=value_reference WS+ +      outr=value_reference WS* +      R_PAREN +   { +      /* TODO */ + +      $result = null; +   } + +   | SUB_LIST_KW +      start=value WS+ +      end=value WS+ +      inr=value_reference WS+ +      outr=value_reference WS* +      R_PAREN +   { +      /* TODO */ + +      $result = null; +   } + +   | FILTER_KW value WS+ value_reference WS* R_PAREN +   { +      /* TODO */ + +      $result = null; +   } + +   | PARTITION_KW +      value WS+ +      iftrue=value_reference WS+ +      iffalse=value_reference WS* +      R_PAREN +   { +      /* TODO */ + +      $result = null; +   } + +   | SORT_KW value WS+ value_reference WS* R_PAREN +   { +      /* TODO */ + +      $result = null; +   } + +   | RANGE_KW +      start=value WS+ +      end=value WS+ +      inc=value WS+ +      value_reference WS* +      R_PAREN +   { +      /* TODO */ + +      $result = null; +   } + +   | SHUFFLE_KW value_reference WS* R_PAREN +   { +      /* TODO */ + +      $result = null; +   } +     | SET_KW value_reference WS+ value WS* R_PAREN     {        $result = @@ -1853,6 +1966,13 @@ returns [Type result]           );     } +   | CONS_KW t0=type WS+ t1=type WS* R_PAREN +   { +      /* TODO */ + +      $result = null; +   } +     | LAMBDA_KW type WS* L_PAREN WS* type_list WS* R_PAREN WS* R_PAREN     {        final Origin start_origin; @@ -2692,6 +2812,27 @@ returns [Computation result]           );     } +   | CONS_KW v0=value WS+ t1=value WS* R_PAREN +   { +      /* TODO */ + +      $result = null; +   } + +   | CAR_KW value WS* R_PAREN +   { +      /* TODO */ + +      $result = null; +   } + +   | CDR_KW value WS* R_PAREN +   { +      /* TODO */ + +      $result = null; +   } +     | COND_KW value_cond_list WS* R_PAREN     {        $result = | 


