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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2VfZ2VuZXJpYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90cmFuc2Zvcm1hdGlvbnMvcGFyc2VfZ2VuZXJpYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHNEQUF1QztBQU9oQyxNQUFNLGlCQUFpQixHQUFHLENBQzdCLElBQW9DLEVBQ3BDLEtBQWdCLEVBQ1gsRUFBRTtJQUNQLE1BQU0sSUFBSSxHQUFHLENBQUMsS0FBSyxDQUEyQjtRQUMxQyxNQUFNLEVBQUUsSUFBSTtRQUNaLE9BQU8sRUFBRSxLQUFLO0tBQ2pCLENBQUMsQ0FBQTtBQUNOLENBQUMsQ0FBQTtBQVJZLFFBQUEsaUJBQWlCLHFCQVE3QjtBQUVNLE1BQU0sc0JBQXNCLEdBQUcsQ0FDbEMsS0FBbUMsRUFDbkMsUUFBd0UsRUFDbkUsRUFBRTtJQUNQLE9BQU8sSUFBQSx5QkFBaUIsRUFDcEIsQ0FBQyxRQUFRLEVBQUU7WUFDUCxVQUFVLEVBQUUsUUFBUTtZQUNwQixPQUFPLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRTtvQkFDMUIsT0FBTyxFQUFFLEtBQUssQ0FBQyxJQUFJO2lCQUN0QixDQUFDO1NBQ0wsQ0FBQyxFQUNGO1FBQ0ksT0FBTyxFQUFFLEtBQUssQ0FBQyxLQUFLO1FBQ3BCLEtBQUssRUFBRSxLQUFLLENBQUMsR0FBRztLQUNuQixDQUNKLENBQUE7QUFDTCxDQUFDLENBQUE7QUFoQlksUUFBQSxzQkFBc0IsMEJBZ0JsQztBQTRCRCxNQUFNLEVBQUUsR0FBRztJQUNQLG1CQUFtQixFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDO0lBQ3pELGFBQWEsRUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUM7Q0FDaEQsQ0FBQTtBQUVELE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxlQUFnQyxFQUFrQixFQUFFO0lBQzFFLE1BQU0sS0FBSyxH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