OSDN Git Service

regularize defs.txt; new andies.
authorSimon Forman <sforman@hushmail.com>
Tue, 14 Feb 2023 16:27:17 +0000 (08:27 -0800)
committerSimon Forman <sforman@hushmail.com>
Tue, 14 Feb 2023 16:27:17 +0000 (08:27 -0800)
I made a crude facility in the C impl for excluding definitions that
would replace built-in commands.  This should be improved, eh?

I also started on renameing the logical Boolean ops
https://todo.sr.ht/~sforman/thun-der/29

implementations/C/KEYWORDS.in
implementations/C/KEYWORDS.txt
implementations/C/convert_defs.py
implementations/C/definitions.c
implementations/C/definitions.h
implementations/C/keywords.c

index 90f3e7a..56251f1 100644 (file)
@@ -14,8 +14,6 @@ struct dict_entry;
 "<>", def_neq
 "<=", def_le
 ">=", def_ge
-"&", def_and
-"|", def_or
 "%", fdiv_r
 mod, fdiv_r
 *, mul
index 8459469..8c02c70 100644 (file)
@@ -19,8 +19,6 @@ struct dict_entry;
 "<>", def_neq
 "<=", def_le
 ">=", def_ge
-"&", def_and
-"|", def_or
 "%", fdiv_r
 mod, fdiv_r
 *, mul
@@ -171,6 +169,6 @@ _mape, def__mape
 _map0, def__map0
 _map1, def__map1
 _map2, def__map2
-xor, def_xor
-and, def_and
-or, def_or
+_\/_, def___REVERSE_SOLIDUS_SOLIDUS__
+/\, def_SOLIDUS_REVERSE_SOLIDUS
+\/, def_REVERSE_SOLIDUS_SOLIDUS
index 55ad253..6bdb935 100644 (file)
@@ -26,6 +26,17 @@ shouldn't matter.
 import sys, unicodedata
 
 
+#"&", def_and
+#"|", def_or
+
+SKIP = '''\
+clear
+cmp
+first
+mod
+rest'''.splitlines()
+
+
 def filt(name):
     '''
     Pass alphanumeric chars and underscores, convert other chars
@@ -81,6 +92,8 @@ Do not edit.
 if sys.argv[-1] == '--header':
     for line in defs:
         name, body = line.split(None, 1)
+        if name in SKIP:
+          continue
         name = convert_name(name)
         print(f'void def_{name}(JoyListPtr stack, JoyListPtr expression);')
 
@@ -88,6 +101,8 @@ elif sys.argv[-1] == '--keywords':
     sys.stdout.write(open('KEYWORDS.in').read())
     for line in defs:
         name, body = line.split(None, 1)
+        if name in SKIP:
+          continue
         print(f'{name}, def_{convert_name(name)}')
 
 else:
@@ -103,6 +118,8 @@ of the definitions.
     ''')
     for line in defs:
         name, body = line.split(None, 1)
+        if name in SKIP:
+          continue
         name = convert_name(name)
         print(f'JoyList def_{name}_body;')
 
@@ -120,6 +137,8 @@ init_defs(void)
     ''')
     for line in defs:
         name, body = line.split(None, 1)
+        if name in SKIP:
+          continue
         name = convert_name(name)
         print(f'\tdef_{name}_body = text_to_expression("{body}");')
     print('}')
@@ -134,5 +153,7 @@ Last, a set of functions to go in the wordlist, one for each definition.
     ''')
     for line in defs:
         name, body = line.split(None, 1)
+        if name in SKIP:
+          continue
         name = convert_name(name)
         print(f'void def_{name}(__attribute__((unused)) JoyListPtr stack, JoyListPtr expression) {{ push_quote_onto_expression(def_{name}_body, expression); }}')
index 9bfd770..62ec5b5 100644 (file)
@@ -135,9 +135,9 @@ JoyList def__mape_body;
 JoyList def__map0_body;
 JoyList def__map1_body;
 JoyList def__map2_body;
-JoyList def_xor_body;
-JoyList def_and_body;
-JoyList def_or_body;
+JoyList def___REVERSE_SOLIDUS_SOLIDUS___body;
+JoyList def_SOLIDUS_REVERSE_SOLIDUS_body;
+JoyList def_REVERSE_SOLIDUS_SOLIDUS_body;
 
 
 /*
@@ -271,9 +271,9 @@ init_defs(void)
        def__map0_body = text_to_expression("[_map1] dipd _map2");
        def__map1_body = text_to_expression("stackd shift");
        def__map2_body = text_to_expression("[infrst] cons dipd roll< swons");
-       def_xor_body = text_to_expression("[not not] [not] branch");
-       def_and_body = text_to_expression("[pop false] [not not] branch");
-       def_or_body = text_to_expression("[not not] [pop true] branch");
+       def___REVERSE_SOLIDUS_SOLIDUS___body = text_to_expression("[not not] [not] branch");
+       def_SOLIDUS_REVERSE_SOLIDUS_body = text_to_expression("[pop false] [not not] branch");
+       def_REVERSE_SOLIDUS_SOLIDUS_body = text_to_expression("[not not] [pop true] branch");
 }
 
 
@@ -404,6 +404,6 @@ void def__mape(__attribute__((unused)) JoyListPtr stack, JoyListPtr expression)
 void def__map0(__attribute__((unused)) JoyListPtr stack, JoyListPtr expression) { push_quote_onto_expression(def__map0_body, expression); }
 void def__map1(__attribute__((unused)) JoyListPtr stack, JoyListPtr expression) { push_quote_onto_expression(def__map1_body, expression); }
 void def__map2(__attribute__((unused)) JoyListPtr stack, JoyListPtr expression) { push_quote_onto_expression(def__map2_body, expression); }
-void def_xor(__attribute__((unused)) JoyListPtr stack, JoyListPtr expression) { push_quote_onto_expression(def_xor_body, expression); }
-void def_and(__attribute__((unused)) JoyListPtr stack, JoyListPtr expression) { push_quote_onto_expression(def_and_body, expression); }
-void def_or(__attribute__((unused)) JoyListPtr stack, JoyListPtr expression) { push_quote_onto_expression(def_or_body, expression); }
+void def___REVERSE_SOLIDUS_SOLIDUS__(__attribute__((unused)) JoyListPtr stack, JoyListPtr expression) { push_quote_onto_expression(def___REVERSE_SOLIDUS_SOLIDUS___body, expression); }
+void def_SOLIDUS_REVERSE_SOLIDUS(__attribute__((unused)) JoyListPtr stack, JoyListPtr expression) { push_quote_onto_expression(def_SOLIDUS_REVERSE_SOLIDUS_body, expression); }
+void def_REVERSE_SOLIDUS_SOLIDUS(__attribute__((unused)) JoyListPtr stack, JoyListPtr expression) { push_quote_onto_expression(def_REVERSE_SOLIDUS_SOLIDUS_body, expression); }
index 2e806b0..37a2cf8 100644 (file)
@@ -126,6 +126,6 @@ void def__mape(JoyListPtr stack, JoyListPtr expression);
 void def__map0(JoyListPtr stack, JoyListPtr expression);
 void def__map1(JoyListPtr stack, JoyListPtr expression);
 void def__map2(JoyListPtr stack, JoyListPtr expression);
-void def_xor(JoyListPtr stack, JoyListPtr expression);
-void def_and(JoyListPtr stack, JoyListPtr expression);
-void def_or(JoyListPtr stack, JoyListPtr expression);
+void def___REVERSE_SOLIDUS_SOLIDUS__(JoyListPtr stack, JoyListPtr expression);
+void def_SOLIDUS_REVERSE_SOLIDUS(JoyListPtr stack, JoyListPtr expression);
+void def_REVERSE_SOLIDUS_SOLIDUS(JoyListPtr stack, JoyListPtr expression);
index e93d717..a0472b8 100644 (file)
@@ -36,7 +36,7 @@
 #line 13 "KEYWORDS.txt"
 struct dict_entry;
 #include <string.h>
-/* maximum key range = 354, duplicates = 0 */
+/* maximum key range = 304, duplicates = 0 */
 
 #ifdef __GNUC__
 __inline
@@ -50,32 +50,32 @@ keyword_hash (register const char *str, register size_t len)
 {
   static const unsigned short asso_values[] =
     {
-      355, 355, 355, 355, 355, 355, 355, 355, 355, 355,
-      355, 355, 355, 355, 355, 355, 355, 355, 355, 355,
-      355, 355, 355, 355, 355, 355, 355, 355, 355, 355,
-      355, 355, 355,  15, 355, 355, 355, 105, 100, 355,
-      355, 355,  30,  95, 355,  75, 355,  25,  15,  45,
-       35,  20, 355, 355, 355, 355, 355, 355, 355, 355,
-       10,  90,   0,  85, 355, 355, 355, 355, 355, 355,
-      355, 355, 355, 355, 355, 355, 355, 355,   0, 355,
-      355, 355, 355, 355, 355, 355, 355, 355, 355, 355,
-      355, 355, 355, 355, 355,  15, 355, 100,  70,   0,
-        5,  30,  40, 110,   5,  15, 355,   5,  40,  60,
-        0,  15,   0,  85,  70,  30,  25,   0,  85,  35,
-       20,   5,   0,  40,  80,   0, 355, 355, 355, 355,
-      355, 355, 355, 355, 355, 355, 355, 355, 355, 355,
-      355, 355, 355, 355, 355, 355, 355, 355, 355, 355,
-      355, 355, 355, 355, 355, 355, 355, 355, 355, 355,
-      355, 355, 355, 355, 355, 355, 355, 355, 355, 355,
-      355, 355, 355, 355, 355, 355, 355, 355, 355, 355,
-      355, 355, 355, 355, 355, 355, 355, 355, 355, 355,
-      355, 355, 355, 355, 355, 355, 355, 355, 355, 355,
-      355, 355, 355, 355, 355, 355, 355, 355, 355, 355,
-      355, 355, 355, 355, 355, 355, 355, 355, 355, 355,
-      355, 355, 355, 355, 355, 355, 355, 355, 355, 355,
-      355, 355, 355, 355, 355, 355, 355, 355, 355, 355,
-      355, 355, 355, 355, 355, 355, 355, 355, 355, 355,
-      355, 355, 355, 355, 355, 355
+      305, 305, 305, 305, 305, 305, 305, 305, 305, 305,
+      305, 305, 305, 305, 305, 305, 305, 305, 305, 305,
+      305, 305, 305, 305, 305, 305, 305, 305, 305, 305,
+      305, 305, 305,   5, 305, 305, 305,  80,  10, 305,
+      305, 305,  60,  75, 305,  25, 305,  20,  55,  65,
+       15,  75, 305, 305, 305, 305, 305, 305, 305, 305,
+       10, 105,   0,  45, 305, 305, 305, 305, 305, 305,
+      305, 305, 305, 305, 305, 305, 305, 305,  35, 305,
+      305, 305, 305, 305, 305, 305, 305, 305, 305, 305,
+      305, 305,  30, 305, 305,  70, 305,  60,  70,   0,
+        5,  30,  40, 100,  40,  15, 305,   5,  40,  60,
+        0,  15,   0,  85,  70,  30,  25,   0, 115,  80,
+       30,   5,  25,  40,   0,   0, 305, 305, 305, 305,
+      305, 305, 305, 305, 305, 305, 305, 305, 305, 305,
+      305, 305, 305, 305, 305, 305, 305, 305, 305, 305,
+      305, 305, 305, 305, 305, 305, 305, 305, 305, 305,
+      305, 305, 305, 305, 305, 305, 305, 305, 305, 305,
+      305, 305, 305, 305, 305, 305, 305, 305, 305, 305,
+      305, 305, 305, 305, 305, 305, 305, 305, 305, 305,
+      305, 305, 305, 305, 305, 305, 305, 305, 305, 305,
+      305, 305, 305, 305, 305, 305, 305, 305, 305, 305,
+      305, 305, 305, 305, 305, 305, 305, 305, 305, 305,
+      305, 305, 305, 305, 305, 305, 305, 305, 305, 305,
+      305, 305, 305, 305, 305, 305, 305, 305, 305, 305,
+      305, 305, 305, 305, 305, 305, 305, 305, 305, 305,
+      305, 305, 305, 305, 305, 305
     };
   register unsigned int hval = len;
 
@@ -99,11 +99,11 @@ in_word_set (register const char *str, register size_t len)
 {
   enum
     {
-      TOTAL_KEYWORDS = 162,
+      TOTAL_KEYWORDS = 160,
       MIN_WORD_LENGTH = 1,
       MAX_WORD_LENGTH = 14,
       MIN_HASH_VALUE = 1,
-      MAX_HASH_VALUE = 354
+      MAX_HASH_VALUE = 304
     };
 
   static const struct dict_entry wordlist[] =
@@ -111,394 +111,380 @@ in_word_set (register const char *str, register size_t len)
       {""},
 #line 16 "KEYWORDS.txt"
       {">", def_gt},
-      {""}, {""}, {""}, {""}, {""}, {""},
-#line 41 "KEYWORDS.txt"
+#line 59 "KEYWORDS.txt"
+      {"||", def_VERTICAL_LINE_VERTICAL_LINE},
+      {""}, {""}, {""}, {""}, {""},
+#line 39 "KEYWORDS.txt"
       {"dup", dup},
       {""}, {""},
-#line 89 "KEYWORDS.txt"
+#line 87 "KEYWORDS.txt"
       {"dupdip", def_dupdip},
 #line 19 "KEYWORDS.txt"
       {"<>", def_neq},
       {""},
-#line 87 "KEYWORDS.txt"
+#line 85 "KEYWORDS.txt"
       {"dupd", def_dupd},
-#line 88 "KEYWORDS.txt"
+#line 86 "KEYWORDS.txt"
       {"dupdd", def_dupdd},
       {""},
-#line 90 "KEYWORDS.txt"
+#line 88 "KEYWORDS.txt"
       {"dupdipd", def_dupdipd},
-#line 46 "KEYWORDS.txt"
+#line 44 "KEYWORDS.txt"
       {"pop", pop},
       {""},
-#line 115 "KEYWORDS.txt"
+#line 113 "KEYWORDS.txt"
       {"popop", def_popop},
 #line 17 "KEYWORDS.txt"
       {"<", def_lt},
-#line 116 "KEYWORDS.txt"
+#line 114 "KEYWORDS.txt"
       {"popopop", def_popopop},
-#line 40 "KEYWORDS.txt"
+#line 38 "KEYWORDS.txt"
       {"dip", dip},
-#line 113 "KEYWORDS.txt"
+#line 111 "KEYWORDS.txt"
       {"popd", def_popd},
-#line 114 "KEYWORDS.txt"
+#line 112 "KEYWORDS.txt"
       {"popdd", def_popdd},
-#line 117 "KEYWORDS.txt"
+#line 115 "KEYWORDS.txt"
       {"popopd", def_popopd},
-#line 118 "KEYWORDS.txt"
+#line 116 "KEYWORDS.txt"
       {"popopdd", def_popopdd},
       {""},
-#line 82 "KEYWORDS.txt"
+#line 80 "KEYWORDS.txt"
       {"dipd", def_dipd},
       {""},
-#line 43 "KEYWORDS.txt"
+#line 41 "KEYWORDS.txt"
       {"i", i_joyfunc},
-      {""}, {""},
-#line 151 "KEYWORDS.txt"
+#line 57 "KEYWORDS.txt"
+      {"&&", def_AMPERSAND_AMPERSAND},
+      {""},
+#line 149 "KEYWORDS.txt"
       {"tuck", def_tuck},
       {""},
-#line 153 "KEYWORDS.txt"
+#line 151 "KEYWORDS.txt"
       {"uncons", def_uncons},
-#line 75 "KEYWORDS.txt"
+#line 73 "KEYWORDS.txt"
       {"ccccons", def_ccccons},
       {""},
-#line 79 "KEYWORDS.txt"
+#line 77 "KEYWORDS.txt"
       {"codi", def_codi},
-#line 99 "KEYWORDS.txt"
-      {"hypot", def_hypot},
-#line 159 "KEYWORDS.txt"
-      {"x", def_x},
-#line 156 "KEYWORDS.txt"
+      {""},
+#line 30 "KEYWORDS.txt"
+      {"/", fdiv_q},
+#line 154 "KEYWORDS.txt"
       {"unstack", def_unstack},
-#line 80 "KEYWORDS.txt"
+#line 78 "KEYWORDS.txt"
       {"codireco", def_codireco},
-#line 154 "KEYWORDS.txt"
+#line 152 "KEYWORDS.txt"
       {"unit", def_unit},
       {""},
-#line 39 "KEYWORDS.txt"
+#line 37 "KEYWORDS.txt"
       {"concat", concat},
-#line 101 "KEYWORDS.txt"
+#line 99 "KEYWORDS.txt"
       {"ii", def_ii},
       {""},
-#line 38 "KEYWORDS.txt"
+#line 36 "KEYWORDS.txt"
       {"cons", cons},
-#line 76 "KEYWORDS.txt"
+#line 74 "KEYWORDS.txt"
       {"ccons", def_ccons},
-#line 32 "KEYWORDS.txt"
-      {"/", fdiv_q},
-#line 109 "KEYWORDS.txt"
+#line 28 "KEYWORDS.txt"
+      {"-", sub},
+#line 107 "KEYWORDS.txt"
       {"nullary", def_nullary},
-#line 63 "KEYWORDS.txt"
+#line 61 "KEYWORDS.txt"
       {"<{}", def_LESS_THAN_SIGN_LEFT_CURLY_BRACKET_RIGHT_CURLY_BRACKET},
-#line 81 "KEYWORDS.txt"
+#line 79 "KEYWORDS.txt"
       {"dinfrirst", def_dinfrirst},
-#line 150 "KEYWORDS.txt"
-      {"third", def_third},
-      {""}, {""}, {""},
-#line 78 "KEYWORDS.txt"
+      {""}, {""},
+#line 60 "KEYWORDS.txt"
+      {"!-", def_EXCLAMATION_MARK_HYPHEN_MINUS},
+      {""},
+#line 76 "KEYWORDS.txt"
       {"clop", def_clop},
-#line 107 "KEYWORDS.txt"
+#line 105 "KEYWORDS.txt"
       {"nulco", def_nulco},
-#line 26 "KEYWORDS.txt"
-      {"*", mul},
-#line 83 "KEYWORDS.txt"
+#line 157 "KEYWORDS.txt"
+      {"x", def_x},
+#line 81 "KEYWORDS.txt"
       {"disenstacken", def_disenstacken},
-#line 37 "KEYWORDS.txt"
+#line 35 "KEYWORDS.txt"
       {"cmp", cmp_joyfunc},
-#line 64 "KEYWORDS.txt"
+#line 62 "KEYWORDS.txt"
       {"<<{}", def_LESS_THAN_SIGN_LESS_THAN_SIGN_LEFT_CURLY_BRACKET_RIGHT_CURLY_BRACKET},
-#line 133 "KEYWORDS.txt"
-      {"shunt", def_shunt},
-#line 94 "KEYWORDS.txt"
-      {"fourth", def_fourth},
-#line 157 "KEYWORDS.txt"
+      {""}, {""},
+#line 155 "KEYWORDS.txt"
       {"unswons", def_unswons},
-#line 106 "KEYWORDS.txt"
+#line 104 "KEYWORDS.txt"
       {"not", def_not},
-#line 91 "KEYWORDS.txt"
+#line 89 "KEYWORDS.txt"
       {"enstacken", def_enstacken},
-      {""},
-#line 131 "KEYWORDS.txt"
+#line 150 "KEYWORDS.txt"
+      {"unary", def_unary},
+#line 129 "KEYWORDS.txt"
       {"second", def_second},
-      {""},
-#line 130 "KEYWORDS.txt"
+#line 174 "KEYWORDS.txt"
+      {"\\/", def_REVERSE_SOLIDUS_SOLIDUS},
+#line 128 "KEYWORDS.txt"
       {"run", def_run},
-#line 45 "KEYWORDS.txt"
+#line 43 "KEYWORDS.txt"
       {"loop", loop},
-      {""}, {""},
-#line 165 "KEYWORDS.txt"
-      {"_times0", def__times0},
+#line 97 "KEYWORDS.txt"
+      {"hypot", def_hypot},
+      {""},
+#line 55 "KEYWORDS.txt"
+      {"--", def_HYPHEN_MINUS_HYPHEN_MINUS},
+#line 27 "KEYWORDS.txt"
+      {"add", add},
+#line 66 "KEYWORDS.txt"
+      {"app2", def_app2},
       {""},
 #line 134 "KEYWORDS.txt"
-      {"size", def_size},
-#line 132 "KEYWORDS.txt"
-      {"shift", def_shift},
-#line 136 "KEYWORDS.txt"
       {"spiral_next", def_spiral_next},
-#line 85 "KEYWORDS.txt"
-      {"down_to_zero", def_down_to_zero},
-#line 44 "KEYWORDS.txt"
+#line 173 "KEYWORDS.txt"
+      {"/\\", def_SOLIDUS_REVERSE_SOLIDUS},
+#line 42 "KEYWORDS.txt"
       {"inscribe", inscribe},
-#line 108 "KEYWORDS.txt"
+#line 106 "KEYWORDS.txt"
       {"null", def_null},
       {""},
-#line 103 "KEYWORDS.txt"
+#line 101 "KEYWORDS.txt"
       {"infrst", def_infrst},
-#line 167 "KEYWORDS.txt"
-      {"_timest", def__timest},
-#line 25 "KEYWORDS.txt"
+      {""},
+#line 23 "KEYWORDS.txt"
       {"mod", fdiv_r},
-#line 160 "KEYWORDS.txt"
-      {"step", def_step},
 #line 158 "KEYWORDS.txt"
-      {"while", def_while},
-#line 161 "KEYWORDS.txt"
-      {"_step0", def__step0},
-#line 53 "KEYWORDS.txt"
+      {"step", def_step},
+#line 148 "KEYWORDS.txt"
+      {"third", def_third},
+#line 56 "KEYWORDS.txt"
+      {"?", def_QUESTION_MARK},
+#line 51 "KEYWORDS.txt"
       {"lt", def_lt},
-#line 142 "KEYWORDS.txt"
+#line 140 "KEYWORDS.txt"
       {"stuncons", def_stuncons},
-#line 86 "KEYWORDS.txt"
+#line 84 "KEYWORDS.txt"
       {"drop", def_drop},
       {""},
-#line 74 "KEYWORDS.txt"
+#line 72 "KEYWORDS.txt"
       {"binary", def_binary},
-#line 110 "KEYWORDS.txt"
+#line 108 "KEYWORDS.txt"
       {"of", def_of},
-#line 155 "KEYWORDS.txt"
+#line 153 "KEYWORDS.txt"
       {"unquoted", def_unquoted},
-      {""}, {""},
-#line 163 "KEYWORDS.txt"
-      {"_stept", def__stept},
-#line 55 "KEYWORDS.txt"
+#line 68 "KEYWORDS.txt"
+      {"appN", def_appN},
+#line 131 "KEYWORDS.txt"
+      {"shunt", def_shunt},
+#line 92 "KEYWORDS.txt"
+      {"fourth", def_fourth},
+#line 53 "KEYWORDS.txt"
       {"le", def_le},
-#line 137 "KEYWORDS.txt"
+#line 135 "KEYWORDS.txt"
       {"split_at", def_split_at},
-#line 70 "KEYWORDS.txt"
-      {"appN", def_appN},
-#line 138 "KEYWORDS.txt"
+#line 132 "KEYWORDS.txt"
+      {"size", def_size},
+#line 136 "KEYWORDS.txt"
       {"split_list", def_split_list},
-#line 77 "KEYWORDS.txt"
+#line 75 "KEYWORDS.txt"
       {"cleave", def_cleave},
-#line 166 "KEYWORDS.txt"
-      {"_times1", def__times1},
+#line 145 "KEYWORDS.txt"
+      {"tailrec", def_tailrec},
       {""},
-#line 141 "KEYWORDS.txt"
+#line 139 "KEYWORDS.txt"
       {"step_zero", def_step_zero},
-#line 152 "KEYWORDS.txt"
-      {"unary", def_unary},
-#line 120 "KEYWORDS.txt"
+      {""},
+#line 118 "KEYWORDS.txt"
       {"quoted", def_quoted},
-#line 146 "KEYWORDS.txt"
-      {"swoncat", def_swoncat},
-#line 175 "KEYWORDS.txt"
-      {"and", def_and},
-#line 100 "KEYWORDS.txt"
+#line 69 "KEYWORDS.txt"
+      {"at", def_at},
+#line 93 "KEYWORDS.txt"
+      {"gcd", def_gcd},
+#line 98 "KEYWORDS.txt"
       {"ifte", def_ifte},
-#line 145 "KEYWORDS.txt"
-      {"swons", def_swons},
-#line 84 "KEYWORDS.txt"
-      {"divmod", def_divmod},
-#line 119 "KEYWORDS.txt"
+#line 130 "KEYWORDS.txt"
+      {"shift", def_shift},
+      {""},
+#line 117 "KEYWORDS.txt"
       {"product", def_product},
-#line 29 "KEYWORDS.txt"
-      {"add", add},
-#line 123 "KEYWORDS.txt"
-      {"reco", def_reco},
       {""},
-#line 162 "KEYWORDS.txt"
-      {"_step1", def__step1},
-#line 112 "KEYWORDS.txt"
+#line 121 "KEYWORDS.txt"
+      {"reco", def_reco},
+#line 100 "KEYWORDS.txt"
+      {"infra", def_infra},
+#line 24 "KEYWORDS.txt"
+      {"*", mul},
+#line 110 "KEYWORDS.txt"
       {"pm", def_pm},
-#line 95 "KEYWORDS.txt"
-      {"gcd", def_gcd},
-#line 69 "KEYWORDS.txt"
-      {"app3", def_app3},
-      {""}, {""}, {""}, {""}, {""},
-#line 125 "KEYWORDS.txt"
+#line 166 "KEYWORDS.txt"
+      {"map", def_map},
+#line 146 "KEYWORDS.txt"
+      {"take", def_take},
+#line 46 "KEYWORDS.txt"
+      {"stack", stack},
+#line 138 "KEYWORDS.txt"
+      {"stackd", def_stackd},
+#line 83 "KEYWORDS.txt"
+      {"down_to_zero", def_down_to_zero},
+      {""},
+#line 65 "KEYWORDS.txt"
+      {"app1", def_app1},
+#line 123 "KEYWORDS.txt"
       {"roll>", def_roll_GREATER_THAN_SIGN},
-#line 127 "KEYWORDS.txt"
+#line 125 "KEYWORDS.txt"
       {"rollup", def_rollup},
       {""},
-#line 128 "KEYWORDS.txt"
+#line 126 "KEYWORDS.txt"
       {"rolldown", def_rolldown},
-#line 93 "KEYWORDS.txt"
+#line 91 "KEYWORDS.txt"
       {"fork", def_fork},
-#line 164 "KEYWORDS.txt"
+#line 162 "KEYWORDS.txt"
       {"times", def_times},
-      {""},
-#line 149 "KEYWORDS.txt"
+#line 94 "KEYWORDS.txt"
+      {"genrec", def_genrec},
+#line 147 "KEYWORDS.txt"
       {"ternary", def_ternary},
       {""},
-#line 68 "KEYWORDS.txt"
-      {"app2", def_app2},
-#line 126 "KEYWORDS.txt"
+#line 67 "KEYWORDS.txt"
+      {"app3", def_app3},
+#line 124 "KEYWORDS.txt"
       {"roll<", def_roll_LESS_THAN_SIGN},
-#line 73 "KEYWORDS.txt"
+#line 71 "KEYWORDS.txt"
       {"b", def_b},
-      {""},
-#line 27 "KEYWORDS.txt"
+#line 165 "KEYWORDS.txt"
+      {"_timest", def__timest},
+#line 25 "KEYWORDS.txt"
       {"mul", mul},
-#line 34 "KEYWORDS.txt"
+#line 32 "KEYWORDS.txt"
       {"bool", truthy},
-#line 36 "KEYWORDS.txt"
+#line 34 "KEYWORDS.txt"
       {"clear", clear},
-#line 96 "KEYWORDS.txt"
-      {"genrec", def_genrec},
-#line 147 "KEYWORDS.txt"
-      {"tailrec", def_tailrec},
-      {""},
-#line 67 "KEYWORDS.txt"
-      {"app1", def_app1},
-      {""},
-#line 30 "KEYWORDS.txt"
-      {"-", sub},
-#line 71 "KEYWORDS.txt"
-      {"at", def_at},
-#line 143 "KEYWORDS.txt"
+#line 82 "KEYWORDS.txt"
+      {"divmod", def_divmod},
+#line 90 "KEYWORDS.txt"
+      {"flatten", def_flatten},
+      {""}, {""}, {""},
+#line 26 "KEYWORDS.txt"
+      {"+", add},
+#line 50 "KEYWORDS.txt"
+      {"gt", def_gt},
+#line 141 "KEYWORDS.txt"
       {"sum", def_sum},
       {""},
-#line 42 "KEYWORDS.txt"
+#line 40 "KEYWORDS.txt"
       {"first", first},
-      {""},
-#line 176 "KEYWORDS.txt"
-      {"or", def_or},
-      {""},
-#line 47 "KEYWORDS.txt"
+#line 161 "KEYWORDS.txt"
+      {"_stept", def__stept},
+#line 144 "KEYWORDS.txt"
+      {"swoncat", def_swoncat},
+#line 120 "KEYWORDS.txt"
+      {"range_to_zero", def_range_to_zero},
+#line 45 "KEYWORDS.txt"
       {"rest", rest},
-#line 102 "KEYWORDS.txt"
-      {"infra", def_infra},
-#line 23 "KEYWORDS.txt"
-      {"|", def_or},
-#line 52 "KEYWORDS.txt"
-      {"gt", def_gt},
-#line 168 "KEYWORDS.txt"
-      {"map", def_map},
-#line 148 "KEYWORDS.txt"
-      {"take", def_take},
-#line 48 "KEYWORDS.txt"
-      {"stack", stack},
-#line 140 "KEYWORDS.txt"
-      {"stackd", def_stackd},
-#line 62 "KEYWORDS.txt"
-      {"!-", def_EXCLAMATION_MARK_HYPHEN_MINUS},
-      {""},
-#line 50 "KEYWORDS.txt"
-      {"swap", swap},
-      {""},
-#line 58 "KEYWORDS.txt"
-      {"?", def_QUESTION_MARK},
-#line 56 "KEYWORDS.txt"
+#line 143 "KEYWORDS.txt"
+      {"swons", def_swons},
+#line 22 "KEYWORDS.txt"
+      {"%", fdiv_r},
+#line 54 "KEYWORDS.txt"
       {"ge", def_ge},
-#line 31 "KEYWORDS.txt"
-      {"sub", sub},
+      {""}, {""},
+#line 119 "KEYWORDS.txt"
+      {"range", def_range},
+      {""}, {""}, {""}, {""},
+#line 156 "KEYWORDS.txt"
+      {"while", def_while},
       {""},
-#line 144 "KEYWORDS.txt"
+#line 163 "KEYWORDS.txt"
+      {"_times0", def__times0},
+#line 29 "KEYWORDS.txt"
+      {"sub", sub},
+#line 48 "KEYWORDS.txt"
+      {"swap", swap},
+      {""}, {""}, {""}, {""}, {""},
+#line 142 "KEYWORDS.txt"
       {"swapd", def_swapd},
-#line 49 "KEYWORDS.txt"
+#line 47 "KEYWORDS.txt"
       {"swaack", swaack},
-      {""},
-#line 174 "KEYWORDS.txt"
-      {"xor", def_xor},
+#line 164 "KEYWORDS.txt"
+      {"_times1", def__times1},
+#line 109 "KEYWORDS.txt"
+      {"pam", def_pam},
       {""}, {""},
+#line 159 "KEYWORDS.txt"
+      {"_step0", def__step0},
+      {""}, {""}, {""}, {""},
+#line 64 "KEYWORDS.txt"
+      {"anamorphism", def_anamorphism},
+      {""},
+#line 63 "KEYWORDS.txt"
+      {"abs", def_abs},
+#line 172 "KEYWORDS.txt"
+      {"_\\/_", def___REVERSE_SOLIDUS_SOLIDUS__},
+#line 133 "KEYWORDS.txt"
+      {"small", def_small},
+#line 160 "KEYWORDS.txt"
+      {"_step1", def__step1},
+      {""}, {""}, {""},
+#line 127 "KEYWORDS.txt"
+      {"rrest", def_rrest},
+      {""},
+#line 49 "KEYWORDS.txt"
+      {"eq", def_eq},
+#line 52 "KEYWORDS.txt"
+      {"neq", def_neq},
+      {""}, {""}, {""}, {""}, {""},
+#line 102 "KEYWORDS.txt"
+      {"make_generator", def_make_generator},
+#line 171 "KEYWORDS.txt"
+      {"_map2", def__map2},
 #line 15 "KEYWORDS.txt"
       {"=", def_eq},
 #line 21 "KEYWORDS.txt"
       {">=", def_ge},
       {""}, {""}, {""}, {""},
-#line 92 "KEYWORDS.txt"
-      {"flatten", def_flatten},
-      {""}, {""}, {""},
-#line 28 "KEYWORDS.txt"
-      {"+", add},
-#line 20 "KEYWORDS.txt"
-      {"<=", def_le},
-#line 33 "KEYWORDS.txt"
-      {"div", fdiv_q},
-      {""},
-#line 171 "KEYWORDS.txt"
-      {"_map0", def__map0},
-      {""},
 #line 18 "KEYWORDS.txt"
       {"!=", def_neq},
-#line 122 "KEYWORDS.txt"
-      {"range_to_zero", def_range_to_zero},
-      {""},
-#line 129 "KEYWORDS.txt"
-      {"rrest", def_rrest},
-#line 22 "KEYWORDS.txt"
-      {"&", def_and},
-#line 51 "KEYWORDS.txt"
-      {"eq", def_eq},
-#line 54 "KEYWORDS.txt"
-      {"neq", def_neq},
-      {""},
-#line 121 "KEYWORDS.txt"
-      {"range", def_range},
       {""}, {""}, {""}, {""},
-#line 170 "KEYWORDS.txt"
+#line 20 "KEYWORDS.txt"
+      {"<=", def_le},
+      {""}, {""},
+#line 168 "KEYWORDS.txt"
       {"_mape", def__mape},
-#line 24 "KEYWORDS.txt"
-      {"%", fdiv_r},
-      {""}, {""}, {""},
-#line 173 "KEYWORDS.txt"
-      {"_map2", def__map2},
-      {""}, {""}, {""}, {""}, {""}, {""},
-#line 124 "KEYWORDS.txt"
-      {"reverse", def_reverse},
-#line 111 "KEYWORDS.txt"
-      {"pam", def_pam},
       {""},
-#line 172 "KEYWORDS.txt"
-      {"_map1", def__map1},
-      {""},
-#line 57 "KEYWORDS.txt"
-      {"--", def_HYPHEN_MINUS_HYPHEN_MINUS},
+#line 58 "KEYWORDS.txt"
+      {"++", def_PLUS_SIGN_PLUS_SIGN},
       {""}, {""}, {""}, {""}, {""},
-#line 65 "KEYWORDS.txt"
-      {"abs", def_abs},
-      {""},
-#line 135 "KEYWORDS.txt"
-      {"small", def_small},
-      {""}, {""}, {""}, {""}, {""}, {""},
-#line 61 "KEYWORDS.txt"
-      {"||", def_VERTICAL_LINE_VERTICAL_LINE},
+#line 103 "KEYWORDS.txt"
+      {"neg", def_neg},
       {""}, {""}, {""}, {""}, {""}, {""},
-#line 104 "KEYWORDS.txt"
-      {"make_generator", def_make_generator},
+#line 167 "KEYWORDS.txt"
+      {"_map?", def__map_QUESTION_MARK},
       {""},
-#line 35 "KEYWORDS.txt"
-      {"branch", branch},
-#line 72 "KEYWORDS.txt"
+#line 70 "KEYWORDS.txt"
       {"average", def_average},
-#line 105 "KEYWORDS.txt"
-      {"neg", def_neg},
-      {""}, {""}, {""}, {""},
-#line 139 "KEYWORDS.txt"
-      {"sqr", def_sqr},
-      {""}, {""}, {""}, {""}, {""}, {""},
+      {""}, {""}, {""},
+#line 33 "KEYWORDS.txt"
+      {"branch", branch},
+      {""}, {""}, {""},
 #line 169 "KEYWORDS.txt"
-      {"_map?", def__map_QUESTION_MARK},
-      {""}, {""}, {""}, {""}, {""},
-#line 66 "KEYWORDS.txt"
-      {"anamorphism", def_anamorphism},
-      {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+      {"_map0", def__map0},
+      {""},
+#line 122 "KEYWORDS.txt"
+      {"reverse", def_reverse},
+#line 31 "KEYWORDS.txt"
+      {"div", fdiv_q},
       {""}, {""}, {""}, {""},
-#line 97 "KEYWORDS.txt"
-      {"grabN", def_grabN},
+#line 137 "KEYWORDS.txt"
+      {"sqr", def_sqr},
       {""},
-#line 60 "KEYWORDS.txt"
-      {"++", def_PLUS_SIGN_PLUS_SIGN},
-      {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
-      {""}, {""}, {""}, {""}, {""},
-#line 59 "KEYWORDS.txt"
-      {"&&", def_AMPERSAND_AMPERSAND},
-      {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+#line 170 "KEYWORDS.txt"
+      {"_map1", def__map1},
       {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+#line 95 "KEYWORDS.txt"
+      {"grabN", def_grabN},
       {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
       {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
       {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
       {""}, {""}, {""}, {""}, {""}, {""},
-#line 98 "KEYWORDS.txt"
+#line 96 "KEYWORDS.txt"
       {"grba", def_grba}
     };