astn 0.110.15 → 1.20.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (185) hide show
  1. package/.eslintignore +5 -0
  2. package/.eslintrc.js +20 -0
  3. package/.vscode/extensions.json +9 -0
  4. package/.vscode/launch.json +39 -0
  5. package/.vscode/settings.json +8 -0
  6. package/.vscode/tasks.json +33 -0
  7. package/.vscodeignore +15 -0
  8. package/LICENSE.md +204 -0
  9. package/README.md +3 -410
  10. package/backend/package-lock.json +123 -0
  11. package/backend/package.json +6 -0
  12. package/backend/src/index.ts +133 -0
  13. package/backend/tsconfig.json +16 -0
  14. package/client/package-lock.json +581 -0
  15. package/client/package.json +23 -0
  16. package/client/src/extension.ts +249 -0
  17. package/client/src/test/completion.test.ts +43 -0
  18. package/client/src/test/diagnostics.test.ts +41 -0
  19. package/client/src/test/helper.ts +47 -0
  20. package/client/src/test/index.ts +43 -0
  21. package/client/src/test/runTest.ts +27 -0
  22. package/client/testFixture/diagnostics.txt +1 -0
  23. package/client/tsconfig.json +12 -0
  24. package/client/tsconfig.tsbuildinfo +1 -0
  25. package/development.md +12 -0
  26. package/images/icon.png +0 -0
  27. package/language-configuration.json +36 -0
  28. package/package.json +102 -58
  29. package/scripts/e2e.sh +6 -0
  30. package/server/package-lock.json +127 -0
  31. package/server/package.json +22 -0
  32. package/server/src/backend.ts +53 -0
  33. package/server/src/backendapi.ts +66 -0
  34. package/server/src/server.ts +296 -0
  35. package/server/tsconfig.json +14 -0
  36. package/server/tsconfig.tsbuildinfo +1 -0
  37. package/syntaxes/astn.tmLanguage.json +320 -0
  38. package/tsconfig.json +21 -0
  39. package/LICENSE +0 -17
  40. package/dist/bin/convert_to_json.d.ts +0 -2
  41. package/dist/bin/convert_to_json.js +0 -63
  42. package/dist/bin/validate_astn.d.ts +0 -2
  43. package/dist/bin/validate_astn.js +0 -58
  44. package/dist/generated/generic/resolve.d.ts +0 -90
  45. package/dist/generated/generic/resolve.js +0 -259
  46. package/dist/generated/implementation/schemas/ast/migration_boilerplate.d.ts +0 -13
  47. package/dist/generated/implementation/schemas/ast/migration_boilerplate.js +0 -174
  48. package/dist/generated/implementation/schemas/ide/migration_boilerplate.d.ts +0 -2
  49. package/dist/generated/implementation/schemas/ide/migration_boilerplate.js +0 -56
  50. package/dist/generated/implementation/schemas/parse_result/migration_boilerplate.d.ts +0 -6
  51. package/dist/generated/implementation/schemas/parse_result/migration_boilerplate.js +0 -136
  52. package/dist/generated/implementation/schemas/target/migration_boilerplate.d.ts +0 -3
  53. package/dist/generated/implementation/schemas/target/migration_boilerplate.js +0 -73
  54. package/dist/generated/implementation/schemas/target_json/migration_boilerplate.d.ts +0 -3
  55. package/dist/generated/implementation/schemas/target_json/migration_boilerplate.js +0 -67
  56. package/dist/generated/interface/core/poormans_parser.d.ts +0 -184
  57. package/dist/generated/interface/core/poormans_parser.js +0 -3
  58. package/dist/generated/interface/core/resolved.d.ts +0 -100
  59. package/dist/generated/interface/core/resolved.js +0 -3
  60. package/dist/generated/interface/core/unresolved.d.ts +0 -35
  61. package/dist/generated/interface/core/unresolved.js +0 -3
  62. package/dist/generated/interface/schemas/ast/migration_boilerplate.d.ts +0 -266
  63. package/dist/generated/interface/schemas/ast/migration_boilerplate.js +0 -3
  64. package/dist/generated/interface/schemas/ast/poormans_parser.d.ts +0 -1087
  65. package/dist/generated/interface/schemas/ast/poormans_parser.js +0 -3
  66. package/dist/generated/interface/schemas/ast/resolved.d.ts +0 -1087
  67. package/dist/generated/interface/schemas/ast/resolved.js +0 -3
  68. package/dist/generated/interface/schemas/ast/unresolved.d.ts +0 -1087
  69. package/dist/generated/interface/schemas/ast/unresolved.js +0 -3
  70. package/dist/generated/interface/schemas/ide/migration_boilerplate.d.ts +0 -24
  71. package/dist/generated/interface/schemas/ide/migration_boilerplate.js +0 -3
  72. package/dist/generated/interface/schemas/ide/poormans_parser.d.ts +0 -161
  73. package/dist/generated/interface/schemas/ide/poormans_parser.js +0 -3
  74. package/dist/generated/interface/schemas/ide/resolved.d.ts +0 -161
  75. package/dist/generated/interface/schemas/ide/resolved.js +0 -3
  76. package/dist/generated/interface/schemas/ide/unresolved.d.ts +0 -161
  77. package/dist/generated/interface/schemas/ide/unresolved.js +0 -3
  78. package/dist/generated/interface/schemas/parse_result/migration_boilerplate.d.ts +0 -112
  79. package/dist/generated/interface/schemas/parse_result/migration_boilerplate.js +0 -3
  80. package/dist/generated/interface/schemas/parse_result/poormans_parser.d.ts +0 -416
  81. package/dist/generated/interface/schemas/parse_result/poormans_parser.js +0 -3
  82. package/dist/generated/interface/schemas/parse_result/resolved.d.ts +0 -416
  83. package/dist/generated/interface/schemas/parse_result/resolved.js +0 -3
  84. package/dist/generated/interface/schemas/parse_result/unresolved.d.ts +0 -416
  85. package/dist/generated/interface/schemas/parse_result/unresolved.js +0 -3
  86. package/dist/generated/interface/schemas/target/migration_boilerplate.d.ts +0 -46
  87. package/dist/generated/interface/schemas/target/migration_boilerplate.js +0 -3
  88. package/dist/generated/interface/schemas/target/poormans_parser.d.ts +0 -186
  89. package/dist/generated/interface/schemas/target/poormans_parser.js +0 -3
  90. package/dist/generated/interface/schemas/target/resolved.d.ts +0 -186
  91. package/dist/generated/interface/schemas/target/resolved.js +0 -3
  92. package/dist/generated/interface/schemas/target/unresolved.d.ts +0 -186
  93. package/dist/generated/interface/schemas/target/unresolved.js +0 -3
  94. package/dist/generated/interface/schemas/target_json/migration_boilerplate.d.ts +0 -46
  95. package/dist/generated/interface/schemas/target_json/migration_boilerplate.js +0 -3
  96. package/dist/generated/interface/schemas/target_json/poormans_parser.d.ts +0 -169
  97. package/dist/generated/interface/schemas/target_json/poormans_parser.js +0 -3
  98. package/dist/generated/interface/schemas/target_json/resolved.d.ts +0 -169
  99. package/dist/generated/interface/schemas/target_json/resolved.js +0 -3
  100. package/dist/generated/interface/schemas/target_json/unresolved.d.ts +0 -169
  101. package/dist/generated/interface/schemas/target_json/unresolved.js +0 -3
  102. package/dist/globals.d.ts +0 -24
  103. package/dist/globals.js +0 -2
  104. package/dist/index.d.ts +0 -6
  105. package/dist/index.js +0 -43
  106. package/dist/lib/globals.d.ts +0 -24
  107. package/dist/lib/globals.js +0 -2
  108. package/dist/lib/transformations/create_error_message.d.ts +0 -5
  109. package/dist/lib/transformations/create_error_message.js +0 -89
  110. package/dist/lib/transformations/format.d.ts +0 -42
  111. package/dist/lib/transformations/format.js +0 -166
  112. package/dist/lib/transformations/fountain_pen/astn.d.ts +0 -11
  113. package/dist/lib/transformations/fountain_pen/astn.js +0 -156
  114. package/dist/lib/transformations/fountain_pen/json.d.ts +0 -4
  115. package/dist/lib/transformations/fountain_pen/json.js +0 -113
  116. package/dist/lib/transformations/parse.d.ts +0 -11
  117. package/dist/lib/transformations/parse.js +0 -257
  118. package/dist/lib/transformations/parse_generic.d.ts +0 -43
  119. package/dist/lib/transformations/parse_generic.js +0 -644
  120. package/dist/parse/parse.d.ts +0 -11
  121. package/dist/parse/parse.js +0 -267
  122. package/dist/parse/parse_generic.d.ts +0 -43
  123. package/dist/parse/parse_generic.js +0 -656
  124. package/dist/serializers/astn.js +0 -28
  125. package/dist/serializers/json.d.ts +0 -5
  126. package/dist/serializers/json.js +0 -46
  127. package/dist/serializers/parse_result.d.ts +0 -5
  128. package/dist/serializers/parse_result.js +0 -99
  129. package/dist/transformations/ast/ide.d.ts +0 -42
  130. package/dist/transformations/ast/ide.js +0 -176
  131. package/dist/transformations/ast/json_target.d.ts +0 -6
  132. package/dist/transformations/ast/json_target.js +0 -88
  133. package/dist/transformations/create_error_message.d.ts +0 -5
  134. package/dist/transformations/create_error_message.js +0 -89
  135. package/dist/transformations/format.d.ts +0 -42
  136. package/dist/transformations/format.js +0 -166
  137. package/dist/transformations/fountain_pen/astn.d.ts +0 -11
  138. package/dist/transformations/fountain_pen/astn.js +0 -166
  139. package/dist/transformations/fountain_pen/json.d.ts +0 -4
  140. package/dist/transformations/fountain_pen/json.js +0 -123
  141. package/dist/transformations/parse.d.ts +0 -11
  142. package/dist/transformations/parse.js +0 -257
  143. package/dist/transformations/parse_generic.d.ts +0 -43
  144. package/dist/transformations/parse_generic.js +0 -644
  145. package/dist/transformations/target/fountain_pen/astn.d.ts +0 -11
  146. package/dist/transformations/target/fountain_pen/astn.js +0 -156
  147. package/dist/transformations/target/fountain_pen/json.d.ts +0 -4
  148. package/dist/transformations/target/fountain_pen/json.js +0 -113
  149. package/dist/transformations/target/fountain_pen_block.d.ts +0 -11
  150. package/dist/transformations/target/fountain_pen_block.js +0 -166
  151. package/dist/transformations/target_json/fountain_pen_block.d.ts +0 -4
  152. package/dist/transformations/target_json/fountain_pen_block.js +0 -101
  153. package/documentation/railroad_diagram/diagram/apostrophed_string.png +0 -0
  154. package/documentation/railroad_diagram/diagram/astn_document.png +0 -0
  155. package/documentation/railroad_diagram/diagram/backticked_string.png +0 -0
  156. package/documentation/railroad_diagram/diagram/comment.png +0 -0
  157. package/documentation/railroad_diagram/diagram/concise_group.png +0 -0
  158. package/documentation/railroad_diagram/diagram/content.png +0 -0
  159. package/documentation/railroad_diagram/diagram/dictionary.png +0 -0
  160. package/documentation/railroad_diagram/diagram/elements.png +0 -0
  161. package/documentation/railroad_diagram/diagram/escaped_character.png +0 -0
  162. package/documentation/railroad_diagram/diagram/four_hexadecimal_digits.png +0 -0
  163. package/documentation/railroad_diagram/diagram/header.png +0 -0
  164. package/documentation/railroad_diagram/diagram/hexadecimal_digit.png +0 -0
  165. package/documentation/railroad_diagram/diagram/ignorable.png +0 -0
  166. package/documentation/railroad_diagram/diagram/include.png +0 -0
  167. package/documentation/railroad_diagram/diagram/key_value_pairs.png +0 -0
  168. package/documentation/railroad_diagram/diagram/line_comment.png +0 -0
  169. package/documentation/railroad_diagram/diagram/list.png +0 -0
  170. package/documentation/railroad_diagram/diagram/newline_character.png +0 -0
  171. package/documentation/railroad_diagram/diagram/normal_character.png +0 -0
  172. package/documentation/railroad_diagram/diagram/normal_or_newline_character.png +0 -0
  173. package/documentation/railroad_diagram/diagram/quoted_string.png +0 -0
  174. package/documentation/railroad_diagram/diagram/rr-2.5.png +0 -0
  175. package/documentation/railroad_diagram/diagram/set_optional_value.png +0 -0
  176. package/documentation/railroad_diagram/diagram/string.png +0 -0
  177. package/documentation/railroad_diagram/diagram/string_content_character.png +0 -0
  178. package/documentation/railroad_diagram/diagram/tagged_value.png +0 -0
  179. package/documentation/railroad_diagram/diagram/traditional_comment.png +0 -0
  180. package/documentation/railroad_diagram/diagram/undelimited_string.png +0 -0
  181. package/documentation/railroad_diagram/diagram/value.png +0 -0
  182. package/documentation/railroad_diagram/diagram/verbose_group.png +0 -0
  183. package/documentation/railroad_diagram/diagram/whitespace.png +0 -0
  184. package/documentation/railroad_diagram/index.md +0 -425
  185. /package/{dist/serializers/astn.d.ts → client/testFixture/completion.txt} +0 -0
@@ -1,644 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
25
- Object.defineProperty(exports, "__esModule", { value: true });
26
- exports.create_token_iterator = exports.Tokenizer_Result = exports.Annotated_Token = exports.create_string_iterator = exports.throw_unexpected_token = exports.throw_parse_error = void 0;
27
- const _ea = __importStar(require("exupery-core-alg"));
28
- const throw_parse_error = (type, range) => {
29
- throw new _ea.Error({
30
- 'type': type,
31
- 'range': range
32
- });
33
- };
34
- exports.throw_parse_error = throw_parse_error;
35
- const throw_unexpected_token = (found, expected) => {
36
- return (0, exports.throw_parse_error)(['parser', {
37
- 'expected': expected,
38
- 'cause': ['unexpected token', {
39
- 'found': found.type,
40
- }]
41
- }], {
42
- 'start': found.start,
43
- 'end': found.end
44
- });
45
- };
46
- exports.throw_unexpected_token = throw_unexpected_token;
47
- const op = {
48
- 'to character list': _ea.impure.text['to character list'],
49
- 'starts with': _ea.impure.text['starts with'],
50
- };
51
- const parse_whitespace = (string_iterator) => {
52
- const start = string_iterator['create location info']();
53
- return {
54
- 'value': _ea.impure.text['from character list'](_ea.pure.list.build(($i) => {
55
- while (true) {
56
- const Character = {
57
- tab: 0x09, // \t
58
- line_feed: 0x0A, // \n
59
- carriage_return: 0x0D, // \r
60
- space: 0x20, //
61
- };
62
- {
63
- const $ = string_iterator['get current character']();
64
- if ($ === null) {
65
- return;
66
- }
67
- switch ($) {
68
- case Character.tab:
69
- string_iterator['consume character']();
70
- $i['add element']($);
71
- break;
72
- case Character.line_feed:
73
- string_iterator['consume character']();
74
- $i['add element']($);
75
- break;
76
- case Character.carriage_return:
77
- string_iterator['consume character']();
78
- $i['add element']($);
79
- break;
80
- case Character.space:
81
- string_iterator['consume character']();
82
- $i['add element']($);
83
- break;
84
- default:
85
- return;
86
- }
87
- }
88
- }
89
- })),
90
- 'range': {
91
- 'start': start,
92
- 'end': string_iterator['create location info'](),
93
- }
94
- };
95
- };
96
- const parse_trivia = (string_iterator) => {
97
- return {
98
- 'leading whitespace': parse_whitespace(string_iterator),
99
- 'comments': _ea.pure.list.build(($i) => {
100
- while (true) {
101
- const $ = string_iterator['get current character']();
102
- if ($ === null) {
103
- return; //normal end of input
104
- }
105
- switch ($) {
106
- case 0x2F: // /
107
- const start = string_iterator['create location info']();
108
- const next_char = string_iterator['look ahead'](1);
109
- if (next_char === null) {
110
- const start = string_iterator['create location info']();
111
- string_iterator['consume character']();
112
- const end = string_iterator['create location info']();
113
- return (0, exports.throw_parse_error)(['lexer', ['dangling slash', null]], {
114
- 'start': start,
115
- 'end': end
116
- });
117
- }
118
- switch (next_char) {
119
- case 0x2F: // /
120
- string_iterator['consume character'](); // consume the first /
121
- string_iterator['consume character'](); // consume the second /
122
- const Character = {
123
- line_feed: 0x0A, // \n
124
- carriage_return: 0x0D, // \r
125
- solidus: 0x2F, // /
126
- };
127
- $i['add element']({
128
- 'type': ['line', null],
129
- 'content': _ea.impure.text['from character list'](_ea.pure.list.build(($i) => {
130
- while (true) {
131
- const $ = string_iterator['get current character']();
132
- if ($ === null) {
133
- return;
134
- }
135
- switch ($) {
136
- case Character.line_feed:
137
- return;
138
- case Character.carriage_return:
139
- return;
140
- default:
141
- string_iterator['consume character']();
142
- $i['add element']($);
143
- }
144
- }
145
- })),
146
- 'range': {
147
- 'start': start,
148
- 'end': string_iterator['create location info'](),
149
- },
150
- 'trailing whitespace': parse_whitespace(string_iterator)
151
- });
152
- break;
153
- case 0x2A: { // *
154
- string_iterator['consume character'](); // consume the first /
155
- string_iterator['consume character'](); // consume the asterisk
156
- $i['add element']({
157
- 'type': ['block', null],
158
- 'content': _ea.impure.text['from character list'](_ea.pure.list.build(($i) => {
159
- let found_asterisk = false;
160
- const Character = {
161
- solidus: 0x2F, // /
162
- asterisk: 0x2A, // *
163
- };
164
- while (true) {
165
- const $ = string_iterator['get current character']();
166
- if ($ === null) {
167
- return (0, exports.throw_parse_error)(['lexer', ['unterminated block comment', null]], {
168
- 'start': start,
169
- 'end': string_iterator['create location info']()
170
- });
171
- }
172
- if ($ === Character.solidus && found_asterisk) {
173
- string_iterator['consume character'](); // consume the solidus
174
- //found asterisk before solidus, so this is the end of the comment
175
- return;
176
- }
177
- //not a solidus, so this is part of the comment
178
- if (found_asterisk) {
179
- $i['add element'](Character.asterisk); // add the asterisk that was found before but was not part of the end delimiter
180
- }
181
- if ($ === Character.asterisk) {
182
- found_asterisk = true;
183
- }
184
- else {
185
- $i['add element']($);
186
- }
187
- string_iterator['consume character']();
188
- }
189
- })),
190
- 'range': {
191
- 'start': start,
192
- 'end': string_iterator['create location info'](),
193
- },
194
- 'trailing whitespace': parse_whitespace(string_iterator)
195
- });
196
- break;
197
- }
198
- default:
199
- return (0, exports.throw_parse_error)(['lexer', ['dangling slash', null]], {
200
- 'start': start,
201
- 'end': string_iterator['create location info']()
202
- });
203
- }
204
- break;
205
- default:
206
- return;
207
- }
208
- }
209
- })
210
- };
211
- };
212
- const parse_delimited_string = (string_iterator, is_end_character, allow_newlines) => {
213
- const Character = {
214
- backspace: 0x08, // \b
215
- form_feed: 0x0C, // \f
216
- tab: 0x09, // \t
217
- line_feed: 0x0A, // \n
218
- carriage_return: 0x0D, // \r
219
- quotation_mark: 0x22, // "
220
- backtick: 0x60, // `
221
- apostrophe: 0x27, // '
222
- reverse_solidus: 0x5C, // \
223
- solidus: 0x2F, // /
224
- a: 0x61, // a
225
- b: 0x62, // b
226
- f: 0x66, // f
227
- n: 0x6E, // n
228
- r: 0x72, // r
229
- t: 0x74, // t
230
- u: 0x75, // u
231
- A: 0x41, // A
232
- F: 0x46, // F
233
- };
234
- const start = string_iterator['create location info']();
235
- const txt = _ea.impure.text['from character list'](_ea.pure.list.build(($i) => {
236
- while (true) {
237
- const $ = string_iterator['get current character']();
238
- if ($ === null) {
239
- return (0, exports.throw_parse_error)(['lexer', ['unterminated string', null]], {
240
- 'start': start,
241
- 'end': string_iterator['create location info']()
242
- });
243
- }
244
- if (is_end_character($)) {
245
- string_iterator['consume character'](); // consume the end character
246
- return;
247
- }
248
- switch ($) {
249
- case Character.reverse_solidus:
250
- string_iterator['consume character']();
251
- {
252
- const $ = string_iterator['get current character']();
253
- if ($ === null) {
254
- return (0, exports.throw_parse_error)(['lexer', ['missing character after escape', null]], {
255
- 'start': start,
256
- 'end': string_iterator['create location info']()
257
- });
258
- }
259
- switch ($) {
260
- case Character.quotation_mark:
261
- string_iterator['consume character']();
262
- $i['add element'](Character.quotation_mark);
263
- break;
264
- case Character.reverse_solidus:
265
- string_iterator['consume character']();
266
- $i['add element'](Character.reverse_solidus);
267
- break;
268
- case Character.solidus:
269
- string_iterator['consume character']();
270
- $i['add element'](Character.solidus);
271
- break;
272
- case Character.b:
273
- string_iterator['consume character']();
274
- $i['add element'](Character.backspace);
275
- break;
276
- case Character.f:
277
- string_iterator['consume character']();
278
- $i['add element'](Character.form_feed);
279
- break;
280
- case Character.n:
281
- if (allow_newlines) {
282
- return (0, exports.throw_parse_error)(['lexer', ['unexpected end of line in delimited string', null]], {
283
- 'start': start,
284
- 'end': string_iterator['create location info']()
285
- });
286
- }
287
- string_iterator['consume character']();
288
- $i['add element'](Character.line_feed);
289
- break;
290
- case Character.r:
291
- if (allow_newlines) {
292
- return (0, exports.throw_parse_error)(['lexer', ['unexpected end of line in delimited string', null]], {
293
- 'start': start,
294
- 'end': string_iterator['create location info']()
295
- });
296
- }
297
- string_iterator['consume character']();
298
- $i['add element'](Character.carriage_return);
299
- break;
300
- case Character.t:
301
- string_iterator['consume character']();
302
- $i['add element'](Character.tab);
303
- break;
304
- case Character.u:
305
- string_iterator['consume character']();
306
- $i['add element'](_ea.impure.integer['parse hexadecimal'](_ea.impure.text['from character list']((_ea.pure.list.build(($i) => {
307
- const get_char = () => {
308
- const char = string_iterator['get current character']();
309
- if (char === null) {
310
- return (0, exports.throw_parse_error)(['lexer', ['unterminated unicode escape sequence', null]], {
311
- 'start': start,
312
- 'end': string_iterator['create location info']()
313
- });
314
- }
315
- if (char < Character.a || (char > Character.f && char < Character.A) || char > Character.F || char < 0x30 || char > 0x39) {
316
- return (0, exports.throw_parse_error)(['lexer', ['invalid unicode escape sequence', null]], {
317
- 'start': start,
318
- 'end': string_iterator['create location info']()
319
- });
320
- }
321
- string_iterator['consume character']();
322
- return char;
323
- };
324
- $i['add element'](get_char());
325
- $i['add element'](get_char());
326
- $i['add element'](get_char());
327
- $i['add element'](get_char());
328
- })))));
329
- break;
330
- default:
331
- return (0, exports.throw_parse_error)(['lexer', ['unknown escape character', null]], {
332
- 'start': start,
333
- 'end': string_iterator['create location info']()
334
- });
335
- }
336
- }
337
- break;
338
- default:
339
- string_iterator['consume character']();
340
- $i['add element']($);
341
- }
342
- }
343
- }));
344
- return txt;
345
- };
346
- const Whitespace = {
347
- tab: 0x09, // \t
348
- line_feed: 0x0A, // \n
349
- carriage_return: 0x0D, // \r
350
- space: 0x20, //
351
- };
352
- /**
353
- * Creates a string iterator that allows iterating over characters in a string,
354
- * while keeping track of line numbers, columns, and line indentation.
355
- */
356
- const create_string_iterator = ($, $p) => {
357
- const source = $;
358
- const characters = op['to character list']($);
359
- const length = characters.__get_length();
360
- let found_carriage_return_before = false;
361
- let position = 0;
362
- let relative_position = {
363
- 'line': 0,
364
- 'column': 0,
365
- 'line indentation': null
366
- };
367
- const consume_character = () => {
368
- const c = characters.__get_element_at(position);
369
- const start = relative_position;
370
- relative_position = c.transform(($) => {
371
- return $ === Whitespace.line_feed
372
- ? {
373
- 'line': relative_position.line + 1,
374
- 'column': 0,
375
- 'line indentation': null,
376
- }
377
- : found_carriage_return_before
378
- ? {
379
- 'line': relative_position.line + 1,
380
- 'column': 0,
381
- 'line indentation': null,
382
- }
383
- : {
384
- 'line': relative_position.line,
385
- 'column': relative_position['column'] + ($ === Whitespace.tab
386
- ? $p['tab size']
387
- : 1),
388
- 'line indentation': relative_position['line indentation'] !== null
389
- ? relative_position['line indentation']
390
- : $ === Whitespace.space || $ === Whitespace.tab
391
- ? null
392
- : relative_position['column'],
393
- };
394
- }, () => relative_position //this is weird, we were already at the end of the list
395
- );
396
- // check for control characters
397
- c.map(($) => {
398
- if ($ < 0x20 && $ !== Whitespace.tab && $ !== Whitespace.line_feed && $ !== Whitespace.carriage_return) {
399
- (0, exports.throw_parse_error)(['lexer', ['unexpected control character', $]], {
400
- 'start': {
401
- 'absolute': position - 1,
402
- 'relative': {
403
- 'line': relative_position.line,
404
- 'column': relative_position['column'] - 1,
405
- }
406
- },
407
- 'end': {
408
- 'absolute': position,
409
- 'relative': {
410
- 'line': relative_position.line,
411
- 'column': relative_position['column'],
412
- }
413
- }
414
- });
415
- }
416
- });
417
- found_carriage_return_before = c.transform(($) => $ === Whitespace.carriage_return, () => false);
418
- position += 1;
419
- };
420
- return {
421
- 'consume string': ($) => {
422
- op['to character list']($).__for_each(() => {
423
- consume_character();
424
- });
425
- },
426
- 'consume character': consume_character,
427
- 'get current character': () => {
428
- if (position === length) {
429
- return null;
430
- }
431
- return characters.__get_element_at(position).transform(($) => $, () => null);
432
- },
433
- 'look ahead': ($) => {
434
- const next_position = position + $;
435
- if (next_position >= length) {
436
- return null;
437
- }
438
- return characters.__get_element_at(next_position).transform(($) => $, () => null);
439
- },
440
- 'create location info': () => {
441
- return {
442
- 'absolute': position,
443
- 'relative': {
444
- 'line': relative_position.line,
445
- 'column': relative_position['column'],
446
- }
447
- };
448
- },
449
- 'create offset location info': (subtract) => {
450
- return {
451
- 'absolute': position - subtract,
452
- 'relative': {
453
- 'line': relative_position.line,
454
- 'column': relative_position['column'] - subtract,
455
- }
456
- };
457
- },
458
- 'create location info string': () => `${relative_position.line}:${relative_position['column']}`,
459
- 'get line indentation': () => {
460
- return relative_position['line indentation'] !== null
461
- ? relative_position['line indentation']
462
- : relative_position['column'];
463
- },
464
- 'starts with': ($) => {
465
- return op['starts with'](source, $, position);
466
- }
467
- };
468
- };
469
- exports.create_string_iterator = create_string_iterator;
470
- const Annotated_Token = (st) => {
471
- const $ = st['get current character']();
472
- if ($ === null) {
473
- return (0, exports.throw_parse_error)(['lexer', ['unexpected end of input', null]], {
474
- 'start': st['create location info'](),
475
- 'end': st['create location info'](),
476
- });
477
- }
478
- return {
479
- 'start': st['create location info'](),
480
- 'type': _ea.block(() => {
481
- const Character = {
482
- open_angle_bracket: 0x3C, // <
483
- open_brace: 0x7B, // {
484
- open_bracket: 0x5B, // [
485
- open_paren: 0x28, // (
486
- close_angle_bracket: 0x3E, // >
487
- close_brace: 0x7D, // }
488
- close_bracket: 0x5D, // ]
489
- close_paren: 0x29, // )
490
- apostrophe: 0x27, // '
491
- asterisk: 0x2A, // *
492
- at: 0x40, // @
493
- backtick: 0x60, // `
494
- bang: 0x21,
495
- colon: 0x3A, // :
496
- comma: 0x2C, // ,
497
- pipe: 0x7C, // |
498
- quotation_mark: 0x22, // "
499
- slash: 0x2F, // /
500
- tilde: 0x7E, // ~
501
- space: 0x20, // space
502
- tab: 0x09, // \t
503
- };
504
- switch ($) {
505
- case Character.open_brace:
506
- st['consume character']();
507
- return ['{', null];
508
- case Character.open_bracket:
509
- st['consume character']();
510
- return ['[', null];
511
- case Character.open_angle_bracket:
512
- st['consume character']();
513
- return ['<', null];
514
- case Character.open_paren:
515
- st['consume character']();
516
- return ['(', null];
517
- case Character.close_brace:
518
- st['consume character']();
519
- return ['}', null];
520
- case Character.close_bracket:
521
- st['consume character']();
522
- return [']', null];
523
- case Character.close_angle_bracket:
524
- st['consume character']();
525
- return ['>', null];
526
- case Character.close_paren:
527
- st['consume character']();
528
- return [')', null];
529
- //individuals
530
- case Character.pipe:
531
- st['consume character']();
532
- return ['|', null];
533
- case Character.tilde:
534
- st['consume character']();
535
- return ['~', null];
536
- case Character.asterisk:
537
- st['consume character']();
538
- return ['*', null];
539
- case Character.at:
540
- st['consume character']();
541
- return ['@', null];
542
- case Character.bang:
543
- st['consume character']();
544
- return ['!', null];
545
- case Character.colon:
546
- st['consume character']();
547
- return [':', null];
548
- case Character.comma:
549
- st['consume character']();
550
- return [',', null];
551
- case Character.quotation_mark:
552
- st['consume character']();
553
- return ['string', {
554
- 'value': parse_delimited_string(st, ($) => $ === Character.quotation_mark, true),
555
- 'type': ['quoted', null],
556
- }];
557
- case Character.backtick:
558
- st['consume character']();
559
- return ['string', {
560
- 'value': parse_delimited_string(st, ($) => $ === Character.backtick, false),
561
- 'type': ['backticked', null],
562
- }];
563
- case Character.apostrophe:
564
- st['consume character']();
565
- return ['string', {
566
- 'value': parse_delimited_string(st, ($) => $ === Character.apostrophe, false),
567
- 'type': ['apostrophed', null],
568
- }];
569
- default:
570
- return ['string', {
571
- 'value': _ea.impure.text['from character list'](_ea.pure.list.build(($i) => {
572
- while (true) {
573
- const $ = st['get current character']();
574
- if ($ === null) {
575
- return;
576
- }
577
- if ($ === Character.open_brace ||
578
- $ === Character.close_brace ||
579
- $ === Character.open_bracket ||
580
- $ === Character.close_bracket ||
581
- $ === Character.open_angle_bracket ||
582
- $ === Character.close_angle_bracket ||
583
- $ === Character.open_paren ||
584
- $ === Character.close_paren ||
585
- $ === Character.apostrophe ||
586
- $ === Character.asterisk ||
587
- $ === Character.at ||
588
- $ === Character.backtick ||
589
- $ === Character.bang ||
590
- $ === Character.colon ||
591
- $ === Character.comma ||
592
- $ === Character.pipe ||
593
- $ === Character.quotation_mark ||
594
- $ === Character.slash ||
595
- $ === Character.tilde ||
596
- $ === Whitespace.space ||
597
- $ === Whitespace.tab) {
598
- return;
599
- }
600
- st['consume character']();
601
- $i['add element']($);
602
- }
603
- })),
604
- 'type': ['undelimited', null],
605
- }];
606
- }
607
- }),
608
- 'end': st['create location info'](),
609
- 'trailing trivia': parse_trivia(st)
610
- };
611
- };
612
- exports.Annotated_Token = Annotated_Token;
613
- const Tokenizer_Result = ($, $p) => {
614
- return {
615
- 'leading trivia': parse_trivia($p['string iterator']),
616
- 'tokens': _ea.pure.list.build($i => {
617
- while ($p['string iterator']['get current character']() !== null) {
618
- const token = (0, exports.Annotated_Token)($p['string iterator']);
619
- $i['add element'](token);
620
- }
621
- }),
622
- 'end': $p['string iterator']['create location info']()
623
- };
624
- };
625
- exports.Tokenizer_Result = Tokenizer_Result;
626
- const create_token_iterator = ($) => {
627
- let position = 0;
628
- return {
629
- 'get required token': (pet) => {
630
- return $.tokens.__get_element_at(position).transform(($) => $, () => (0, exports.throw_parse_error)(['parser', {
631
- 'expected': pet,
632
- 'cause': ['missing token', null]
633
- }], {
634
- 'start': $.end,
635
- 'end': $.end,
636
- }));
637
- },
638
- 'consume token': () => {
639
- position += 1;
640
- },
641
- };
642
- };
643
- exports.create_token_iterator = create_token_iterator;
644
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2VfZ2VuZXJpYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvdHJhbnNmb3JtYXRpb25zL3BhcnNlX2dlbmVyaWMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxzREFBdUM7QUFPaEMsTUFBTSxpQkFBaUIsR0FBRyxDQUM3QixJQUFvQyxFQUNwQyxLQUFnQixFQUNYLEVBQUU7SUFDUCxNQUFNLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBMkI7UUFDMUMsTUFBTSxFQUFFLElBQUk7UUFDWixPQUFPLEVBQUUsS0FBSztLQUNqQixDQUFDLENBQUE7QUFDTixDQUFDLENBQUE7QUFSWSxRQUFBLGlCQUFpQixxQkFRN0I7QUFFTSxNQUFNLHNCQUFzQixHQUFHLENBQ2xDLEtBQW1DLEVBQ25DLFFBQXdFLEVBQ25FLEVBQUU7SUFDUCxPQUFPLElBQUEseUJBQWlCLEVBQ3BCLENBQUMsUUFBUSxFQUFFO1lBQ1AsVUFBVSxFQUFFLFFBQVE7WUFDcEIsT0FBTyxFQUFFLENBQUMsa0JBQWtCLEVBQUU7b0JBQzFCLE9BQU8sRUFBRSxLQUFLLENBQUMsSUFBSTtpQkFDdEIsQ0FBQztTQUNMLENBQUMsRUFDRjtRQUNJLE9BQU8sRUFBRSxLQUFLLENBQUMsS0FBSztRQUNwQixLQUFLLEVBQUUsS0FBSyxDQUFDLEdBQUc7S0FDbkIsQ0FDSixDQUFBO0FBQ0wsQ0FBQyxDQUFBO0FBaEJZLFFBQUEsc0JBQXNCLDBCQWdCbEM7QUE0QkQsTUFBTSxFQUFFLEdBQUc7SUFDUCxtQkFBbUIsRUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQztJQUN6RCxhQUFhLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDO0NBQ2hELENBQUE7QUFFRCxNQUFNLGdCQUFnQixHQUFHLENBQUMsZUFBZ0MsRUFBa0IsRUFBRTtJQUMxRSxNQUFN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