tree-sitter-sed 0.7.0 → 0.9.0
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.
- package/Cargo.toml +43 -0
- package/README.md +6 -4
- package/bindings/rust/build.rs +40 -0
- package/bindings/rust/lib.rs +572 -0
- package/common/grammar.js +365 -350
- package/common/regex.js +104 -208
- package/common/scanner.h +968 -1387
- package/package.json +7 -8
- package/queries/highlights.scm +25 -26
- package/sed_ere/queries/highlights.scm +25 -26
- package/sed_ere/src/grammar.json +1939 -2053
- package/sed_ere/src/node-types.json +309 -501
- package/sed_ere/src/parser.c +36568 -38566
- package/src/grammar.json +1926 -1899
- package/src/node-types.json +329 -566
- package/src/parser.c +43892 -45119
- package/tree-sitter.json +3 -3
- package/CMakeLists.txt +0 -121
- package/Makefile +0 -145
- package/bindings/c/tree-sitter-sed.pc.in +0 -10
- package/bindings/c/tree_sitter/tree-sitter-sed.h +0 -17
- package/test/binding.test.c +0 -9
package/common/regex.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const { issueField, namedExternal } = require("./dsl");
|
|
1
|
+
const { issueField, issueNode, namedExternal } = require("./dsl");
|
|
2
2
|
|
|
3
3
|
function subexpressionBody($, expression) {
|
|
4
4
|
return choice(
|
|
@@ -10,6 +10,10 @@ function subexpressionBody($, expression) {
|
|
|
10
10
|
}
|
|
11
11
|
|
|
12
12
|
function intervalExpression($, openingName, closingName) {
|
|
13
|
+
const closing = field(
|
|
14
|
+
"closing",
|
|
15
|
+
namedExternal($, $._regex_interval_close, closingName),
|
|
16
|
+
);
|
|
13
17
|
return seq(
|
|
14
18
|
field("opening", namedExternal($, $._regex_interval_open, openingName)),
|
|
15
19
|
choice(
|
|
@@ -29,19 +33,8 @@ function intervalExpression($, openingName, closingName) {
|
|
|
29
33
|
),
|
|
30
34
|
),
|
|
31
35
|
choice(
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
namedExternal($, $._regex_interval_close, closingName),
|
|
35
|
-
),
|
|
36
|
-
seq(
|
|
37
|
-
issueField($, "malformed_interval"),
|
|
38
|
-
optional(
|
|
39
|
-
field(
|
|
40
|
-
"closing",
|
|
41
|
-
namedExternal($, $._regex_interval_close, closingName),
|
|
42
|
-
),
|
|
43
|
-
),
|
|
44
|
-
),
|
|
36
|
+
closing,
|
|
37
|
+
seq(issueField($, "malformed_interval"), optional(closing)),
|
|
45
38
|
issueField($, "incomplete_interval"),
|
|
46
39
|
),
|
|
47
40
|
),
|
|
@@ -50,12 +43,7 @@ function intervalExpression($, openingName, closingName) {
|
|
|
50
43
|
issueField($, "malformed_interval"),
|
|
51
44
|
issueField($, "incomplete_interval"),
|
|
52
45
|
),
|
|
53
|
-
optional(
|
|
54
|
-
field(
|
|
55
|
-
"closing",
|
|
56
|
-
namedExternal($, $._regex_interval_close, closingName),
|
|
57
|
-
),
|
|
58
|
-
),
|
|
46
|
+
optional(closing),
|
|
59
47
|
),
|
|
60
48
|
),
|
|
61
49
|
);
|
|
@@ -75,7 +63,15 @@ function compoundBracketExpression(
|
|
|
75
63
|
marker,
|
|
76
64
|
choice(
|
|
77
65
|
seq(
|
|
78
|
-
|
|
66
|
+
repeat1(
|
|
67
|
+
choice(
|
|
68
|
+
field(contentField, content),
|
|
69
|
+
issueField($, "invalid_regular_expression_character"),
|
|
70
|
+
...(marker === ":"
|
|
71
|
+
? [issueField($, "invalid_character_class_name")]
|
|
72
|
+
: []),
|
|
73
|
+
),
|
|
74
|
+
),
|
|
79
75
|
choice(
|
|
80
76
|
closing,
|
|
81
77
|
seq(issueField($, "malformed_bracket_term"), optional(closing)),
|
|
@@ -93,17 +89,41 @@ function compoundBracketExpression(
|
|
|
93
89
|
);
|
|
94
90
|
}
|
|
95
91
|
|
|
92
|
+
function bracketListBody($) {
|
|
93
|
+
return choice(
|
|
94
|
+
field("elements", $.bracket_list),
|
|
95
|
+
issueField($, "missing_bracket_list"),
|
|
96
|
+
issueField($, "incomplete_missing_bracket_list"),
|
|
97
|
+
);
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
function subexpressionClose($, tokenName) {
|
|
101
|
+
return choice(
|
|
102
|
+
namedExternal($, $._regex_group_close, tokenName),
|
|
103
|
+
issueField($, "unclosed_subexpression"),
|
|
104
|
+
issueField($, "incomplete_unclosed_subexpression"),
|
|
105
|
+
);
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
function bracketExpression($, ambiguous) {
|
|
109
|
+
return seq(
|
|
110
|
+
field("opening", namedExternal($, $._regex_bracket_open, "open_bracket")),
|
|
111
|
+
field("list", choice($.matching_list, $.nonmatching_list)),
|
|
112
|
+
...(ambiguous ? [$._ambiguous_bracket_expression_marker] : []),
|
|
113
|
+
field("closing", $.close_bracket),
|
|
114
|
+
);
|
|
115
|
+
}
|
|
116
|
+
|
|
96
117
|
function bracketRules() {
|
|
97
118
|
return {
|
|
98
|
-
bracket_expression: ($) =>
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
field("closing", $.close_bracket),
|
|
119
|
+
bracket_expression: ($) => bracketExpression($, false),
|
|
120
|
+
|
|
121
|
+
_ambiguous_bracket_expression: ($) => bracketExpression($, true),
|
|
122
|
+
|
|
123
|
+
_bracket_expression: ($) =>
|
|
124
|
+
choice(
|
|
125
|
+
$.bracket_expression,
|
|
126
|
+
issueField($, "ambiguous_bracket_expression"),
|
|
107
127
|
),
|
|
108
128
|
|
|
109
129
|
close_bracket: ($) =>
|
|
@@ -113,12 +133,7 @@ function bracketRules() {
|
|
|
113
133
|
issueField($, "incomplete_unclosed_bracket_expression"),
|
|
114
134
|
),
|
|
115
135
|
|
|
116
|
-
matching_list:
|
|
117
|
-
choice(
|
|
118
|
-
field("elements", $.bracket_list),
|
|
119
|
-
issueField($, "missing_bracket_list"),
|
|
120
|
-
issueField($, "incomplete_missing_bracket_list"),
|
|
121
|
-
),
|
|
136
|
+
matching_list: bracketListBody,
|
|
122
137
|
|
|
123
138
|
nonmatching_list: ($) =>
|
|
124
139
|
seq(
|
|
@@ -130,11 +145,7 @@ function bracketRules() {
|
|
|
130
145
|
"nonmatching_list_operator",
|
|
131
146
|
),
|
|
132
147
|
),
|
|
133
|
-
|
|
134
|
-
field("elements", $.bracket_list),
|
|
135
|
-
issueField($, "missing_bracket_list"),
|
|
136
|
-
issueField($, "incomplete_missing_bracket_list"),
|
|
137
|
-
),
|
|
148
|
+
bracketListBody($),
|
|
138
149
|
),
|
|
139
150
|
|
|
140
151
|
bracket_list: ($) =>
|
|
@@ -204,8 +215,7 @@ function bracketRules() {
|
|
|
204
215
|
|
|
205
216
|
_character_class_start_range: ($) =>
|
|
206
217
|
seq(
|
|
207
|
-
field("start",
|
|
208
|
-
issueField($, "character_class_range_start"),
|
|
218
|
+
field("start", issueNode($, "character_class_range_start")),
|
|
209
219
|
field(
|
|
210
220
|
"operator",
|
|
211
221
|
namedExternal($, $._regex_bracket_hyphen, "range_operator"),
|
|
@@ -214,8 +224,7 @@ function bracketRules() {
|
|
|
214
224
|
|
|
215
225
|
_equivalence_class_start_range: ($) =>
|
|
216
226
|
seq(
|
|
217
|
-
field("start",
|
|
218
|
-
issueField($, "equivalence_class_range_start"),
|
|
227
|
+
field("start", issueNode($, "equivalence_class_range_start")),
|
|
219
228
|
field(
|
|
220
229
|
"operator",
|
|
221
230
|
namedExternal($, $._regex_bracket_hyphen, "range_operator"),
|
|
@@ -223,16 +232,10 @@ function bracketRules() {
|
|
|
223
232
|
),
|
|
224
233
|
|
|
225
234
|
_character_class_end_range: ($) =>
|
|
226
|
-
|
|
227
|
-
issueField($, "character_class_range_end"),
|
|
228
|
-
field("term", $.character_class),
|
|
229
|
-
),
|
|
235
|
+
field("term", issueNode($, "character_class_range_end")),
|
|
230
236
|
|
|
231
237
|
_equivalence_class_end_range: ($) =>
|
|
232
|
-
|
|
233
|
-
issueField($, "equivalence_class_range_end"),
|
|
234
|
-
field("term", $.equivalence_class),
|
|
235
|
-
),
|
|
238
|
+
field("term", issueNode($, "equivalence_class_range_end")),
|
|
236
239
|
|
|
237
240
|
start_range: ($) =>
|
|
238
241
|
seq(
|
|
@@ -246,7 +249,10 @@ function bracketRules() {
|
|
|
246
249
|
end_range: ($) => choice($.collating_element, $.collating_symbol),
|
|
247
250
|
|
|
248
251
|
collating_element: ($) =>
|
|
249
|
-
|
|
252
|
+
choice(
|
|
253
|
+
namedExternal($, $._regex_bracket_literal, "collating_element_token"),
|
|
254
|
+
issueField($, "invalid_regular_expression_character"),
|
|
255
|
+
),
|
|
250
256
|
|
|
251
257
|
collating_symbol: ($) =>
|
|
252
258
|
compoundBracketExpression(
|
|
@@ -289,39 +295,32 @@ function bracketRules() {
|
|
|
289
295
|
|
|
290
296
|
function commonRegularExpressionRules() {
|
|
291
297
|
return {
|
|
292
|
-
dup_count: ($) =>
|
|
298
|
+
dup_count: ($) => $._regex_dup_count,
|
|
293
299
|
|
|
294
|
-
ordinary_character: ($) =>
|
|
295
|
-
namedExternal($, $._regex_literal, "ordinary_character_token"),
|
|
300
|
+
ordinary_character: ($) => $._regex_literal,
|
|
296
301
|
|
|
297
302
|
quoted_character: ($) =>
|
|
298
303
|
choice(
|
|
299
304
|
namedExternal($, $._regex_quoted_escape, "quoted_character_token"),
|
|
305
|
+
seq(
|
|
306
|
+
$._escape_prefix,
|
|
307
|
+
issueField($, "invalid_regular_expression_character"),
|
|
308
|
+
),
|
|
300
309
|
$.escaped_delimiter,
|
|
301
310
|
issueField($, "ordinary_character_escape"),
|
|
302
311
|
issueField($, "incomplete_regular_expression_escape"),
|
|
303
312
|
issueField($, "forbidden_regular_expression_newline"),
|
|
304
313
|
),
|
|
305
314
|
|
|
306
|
-
escaped_delimiter: ($) =>
|
|
307
|
-
field(
|
|
308
|
-
"token",
|
|
309
|
-
namedExternal($, $._regex_escaped_delimiter, "escaped_delimiter_token"),
|
|
310
|
-
),
|
|
311
|
-
|
|
312
|
-
ambiguous_delimiter_escape: ($) =>
|
|
313
|
-
issueField($, "special_delimiter_escape"),
|
|
315
|
+
escaped_delimiter: ($) => $._regex_escaped_delimiter,
|
|
314
316
|
|
|
315
|
-
sed_newline_escape: ($) =>
|
|
316
|
-
namedExternal($, $._regex_newline_escape, "sed_newline_escape_token"),
|
|
317
|
+
sed_newline_escape: ($) => $._regex_newline_escape,
|
|
317
318
|
|
|
318
|
-
period: ($) =>
|
|
319
|
+
period: ($) => $._regex_period,
|
|
319
320
|
|
|
320
|
-
left_anchor: ($) =>
|
|
321
|
-
namedExternal($, $._regex_beginning_anchor, "left_anchor_token"),
|
|
321
|
+
left_anchor: ($) => $._regex_beginning_anchor,
|
|
322
322
|
|
|
323
|
-
right_anchor: ($) =>
|
|
324
|
-
namedExternal($, $._regex_end_anchor, "right_anchor_token"),
|
|
323
|
+
right_anchor: ($) => $._regex_end_anchor,
|
|
325
324
|
|
|
326
325
|
...bracketRules(),
|
|
327
326
|
};
|
|
@@ -334,47 +333,8 @@ function breDuplicationSymbol($) {
|
|
|
334
333
|
);
|
|
335
334
|
}
|
|
336
335
|
|
|
337
|
-
function misplacedBreDuplSymbol($, reason) {
|
|
338
|
-
return choice(
|
|
339
|
-
seq(issueField($, reason), field("operator", $.bre_dupl_symbol)),
|
|
340
|
-
issueField($, "malformed_interval"),
|
|
341
|
-
issueField($, "incomplete_interval"),
|
|
342
|
-
);
|
|
343
|
-
}
|
|
344
|
-
|
|
345
336
|
function breRules() {
|
|
346
337
|
return {
|
|
347
|
-
bre_extension_escape: ($) =>
|
|
348
|
-
choice(
|
|
349
|
-
seq(
|
|
350
|
-
field(
|
|
351
|
-
"token",
|
|
352
|
-
namedExternal($, $._regex_bre_vertical_line_escape, "back_bar"),
|
|
353
|
-
),
|
|
354
|
-
issueField($, "bre_vertical_line_escape"),
|
|
355
|
-
),
|
|
356
|
-
seq(
|
|
357
|
-
field(
|
|
358
|
-
"token",
|
|
359
|
-
namedExternal($, $._regex_bre_question_mark_escape, "back_qm"),
|
|
360
|
-
),
|
|
361
|
-
issueField($, "bre_question_mark_escape"),
|
|
362
|
-
),
|
|
363
|
-
seq(
|
|
364
|
-
field(
|
|
365
|
-
"token",
|
|
366
|
-
namedExternal($, $._regex_bre_plus_escape, "back_plus"),
|
|
367
|
-
),
|
|
368
|
-
issueField($, "bre_plus_escape"),
|
|
369
|
-
),
|
|
370
|
-
),
|
|
371
|
-
|
|
372
|
-
bre_subexpression_anchor: ($) =>
|
|
373
|
-
choice(
|
|
374
|
-
issueField($, "bre_subexpression_right_anchor"),
|
|
375
|
-
issueField($, "bre_subexpression_left_anchor"),
|
|
376
|
-
),
|
|
377
|
-
|
|
378
338
|
basic_reg_exp: ($) => $.bre_branch,
|
|
379
339
|
|
|
380
340
|
bre_branch: ($) =>
|
|
@@ -435,10 +395,10 @@ function breRules() {
|
|
|
435
395
|
-1,
|
|
436
396
|
seq(
|
|
437
397
|
field("operand", $.simple_bre),
|
|
438
|
-
field("operator",
|
|
398
|
+
field("operator", issueNode($, "adjacent_duplication_symbol")),
|
|
439
399
|
),
|
|
440
400
|
),
|
|
441
|
-
field("operator",
|
|
401
|
+
field("operator", issueNode($, "leading_duplication_symbol")),
|
|
442
402
|
),
|
|
443
403
|
|
|
444
404
|
nondupl_bre: ($) =>
|
|
@@ -458,37 +418,30 @@ function breRules() {
|
|
|
458
418
|
),
|
|
459
419
|
|
|
460
420
|
back_close_parenthesis: ($) =>
|
|
461
|
-
|
|
462
|
-
namedExternal($, $._regex_group_close, "back_close_parenthesis_token"),
|
|
463
|
-
issueField($, "unclosed_subexpression"),
|
|
464
|
-
issueField($, "incomplete_unclosed_subexpression"),
|
|
465
|
-
),
|
|
421
|
+
subexpressionClose($, "back_close_parenthesis_token"),
|
|
466
422
|
|
|
467
|
-
backreference: ($) =>
|
|
468
|
-
namedExternal($, $._regex_backreference, "backreference_token"),
|
|
423
|
+
backreference: ($) => $._regex_backreference,
|
|
469
424
|
|
|
470
425
|
one_char_or_coll_elem_bre: ($) =>
|
|
471
426
|
choice(
|
|
427
|
+
issueField($, "invalid_regular_expression_character"),
|
|
472
428
|
$.ordinary_character,
|
|
473
429
|
$.quoted_character,
|
|
474
430
|
$.sed_newline_escape,
|
|
475
431
|
$.period,
|
|
476
|
-
$.
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
432
|
+
$._bracket_expression,
|
|
433
|
+
issueField($, "special_delimiter_escape"),
|
|
434
|
+
issueField($, "bre_vertical_line_escape"),
|
|
435
|
+
issueField($, "bre_question_mark_escape"),
|
|
436
|
+
issueField($, "bre_plus_escape"),
|
|
437
|
+
issueField($, "bre_subexpression_right_anchor"),
|
|
438
|
+
issueField($, "bre_subexpression_left_anchor"),
|
|
480
439
|
),
|
|
481
440
|
|
|
482
441
|
bre_dupl_symbol: ($) => breDuplicationSymbol($),
|
|
483
442
|
|
|
484
443
|
_bre_interval: ($) =>
|
|
485
444
|
intervalExpression($, "back_open_brace", "back_close_brace"),
|
|
486
|
-
|
|
487
|
-
leading_bre_dupl_symbol: ($) =>
|
|
488
|
-
misplacedBreDuplSymbol($, "leading_duplication_symbol"),
|
|
489
|
-
|
|
490
|
-
adjacent_bre_dupl_symbol: ($) =>
|
|
491
|
-
misplacedBreDuplSymbol($, "adjacent_duplication_symbol"),
|
|
492
445
|
};
|
|
493
446
|
}
|
|
494
447
|
|
|
@@ -503,42 +456,20 @@ function ereDuplicationSymbol($) {
|
|
|
503
456
|
|
|
504
457
|
function ereRules() {
|
|
505
458
|
return {
|
|
506
|
-
extended_reg_exp: ($) =>
|
|
507
|
-
|
|
459
|
+
extended_reg_exp: ($) => {
|
|
460
|
+
const emptyBranch = alias($._empty_ere_branch, $.ere_branch);
|
|
461
|
+
return choice(
|
|
508
462
|
$.ere_branch,
|
|
509
463
|
prec.left(
|
|
510
464
|
1,
|
|
511
465
|
seq(
|
|
512
|
-
field("left", $.extended_reg_exp),
|
|
513
|
-
field("operator", $.ere_alternation_operator),
|
|
514
|
-
field("right", $.ere_branch),
|
|
515
|
-
),
|
|
516
|
-
),
|
|
517
|
-
prec.left(
|
|
518
|
-
1,
|
|
519
|
-
seq(
|
|
520
|
-
field("left", alias($._empty_ere_branch, $.ere_branch)),
|
|
521
|
-
field("operator", $.ere_alternation_operator),
|
|
522
|
-
field("right", $.ere_branch),
|
|
523
|
-
),
|
|
524
|
-
),
|
|
525
|
-
prec.left(
|
|
526
|
-
1,
|
|
527
|
-
seq(
|
|
528
|
-
field("left", $.extended_reg_exp),
|
|
529
|
-
field("operator", $.ere_alternation_operator),
|
|
530
|
-
field("right", alias($._empty_ere_branch, $.ere_branch)),
|
|
531
|
-
),
|
|
532
|
-
),
|
|
533
|
-
prec.left(
|
|
534
|
-
1,
|
|
535
|
-
seq(
|
|
536
|
-
field("left", alias($._empty_ere_branch, $.ere_branch)),
|
|
466
|
+
field("left", choice($.extended_reg_exp, emptyBranch)),
|
|
537
467
|
field("operator", $.ere_alternation_operator),
|
|
538
|
-
field("right",
|
|
468
|
+
field("right", choice($.ere_branch, emptyBranch)),
|
|
539
469
|
),
|
|
540
470
|
),
|
|
541
|
-
)
|
|
471
|
+
);
|
|
472
|
+
},
|
|
542
473
|
|
|
543
474
|
_empty_ere_branch: ($) =>
|
|
544
475
|
choice(
|
|
@@ -546,12 +477,7 @@ function ereRules() {
|
|
|
546
477
|
issueField($, "incomplete_alternative"),
|
|
547
478
|
),
|
|
548
479
|
|
|
549
|
-
ere_alternation_operator: ($) =>
|
|
550
|
-
namedExternal(
|
|
551
|
-
$,
|
|
552
|
-
$._regex_alternation_operator,
|
|
553
|
-
"ere_alternation_operator_token",
|
|
554
|
-
),
|
|
480
|
+
ere_alternation_operator: ($) => $._regex_alternation_operator,
|
|
555
481
|
|
|
556
482
|
ere_branch: ($) =>
|
|
557
483
|
choice(
|
|
@@ -578,70 +504,40 @@ function ereRules() {
|
|
|
578
504
|
1,
|
|
579
505
|
seq(
|
|
580
506
|
field("operand", $.ere_expression),
|
|
581
|
-
field(
|
|
507
|
+
field(
|
|
508
|
+
"operator",
|
|
509
|
+
choice(
|
|
510
|
+
$.ere_dupl_symbol,
|
|
511
|
+
issueNode($, "adjacent_duplication_symbol"),
|
|
512
|
+
),
|
|
513
|
+
),
|
|
582
514
|
),
|
|
583
515
|
),
|
|
584
|
-
field("operator",
|
|
516
|
+
field("operator", issueNode($, "leading_duplication_symbol")),
|
|
585
517
|
),
|
|
586
518
|
|
|
587
|
-
close_parenthesis: ($) =>
|
|
588
|
-
choice(
|
|
589
|
-
namedExternal($, $._regex_group_close, "close_parenthesis_token"),
|
|
590
|
-
issueField($, "unclosed_subexpression"),
|
|
591
|
-
issueField($, "incomplete_unclosed_subexpression"),
|
|
592
|
-
),
|
|
519
|
+
close_parenthesis: ($) => subexpressionClose($, "close_parenthesis_token"),
|
|
593
520
|
|
|
594
521
|
one_char_or_coll_elem_ere: ($) =>
|
|
595
522
|
choice(
|
|
523
|
+
issueField($, "invalid_regular_expression_character"),
|
|
596
524
|
$.ordinary_character,
|
|
597
525
|
$.quoted_character,
|
|
598
526
|
$.sed_newline_escape,
|
|
599
527
|
$.period,
|
|
600
|
-
$.
|
|
601
|
-
|
|
528
|
+
$._bracket_expression,
|
|
529
|
+
issueField($, "special_delimiter_escape"),
|
|
602
530
|
),
|
|
603
531
|
|
|
604
532
|
ere_dupl_symbol: ($) =>
|
|
605
533
|
seq(
|
|
606
|
-
|
|
607
|
-
ereDuplicationSymbol($),
|
|
608
|
-
seq(
|
|
609
|
-
issueField($, "adjacent_duplication_symbol"),
|
|
610
|
-
ereDuplicationSymbol($),
|
|
611
|
-
),
|
|
612
|
-
issueField($, "malformed_interval"),
|
|
613
|
-
issueField($, "incomplete_interval"),
|
|
614
|
-
),
|
|
534
|
+
ereDuplicationSymbol($),
|
|
615
535
|
optional(field("modifier", $.repetition_modifier)),
|
|
616
536
|
),
|
|
617
537
|
|
|
618
538
|
_ere_interval: ($) => intervalExpression($, "open_brace", "close_brace"),
|
|
619
539
|
|
|
620
540
|
repetition_modifier: ($) => $._regex_repetition_modifier,
|
|
621
|
-
|
|
622
|
-
_leading_ere_dupl_symbol: ($) =>
|
|
623
|
-
seq(
|
|
624
|
-
ereDuplicationSymbol($),
|
|
625
|
-
optional(field("modifier", $.repetition_modifier)),
|
|
626
|
-
),
|
|
627
|
-
|
|
628
|
-
leading_ere_dupl_symbol: ($) =>
|
|
629
|
-
choice(
|
|
630
|
-
seq(
|
|
631
|
-
issueField($, "leading_duplication_symbol"),
|
|
632
|
-
field(
|
|
633
|
-
"operator",
|
|
634
|
-
alias($._leading_ere_dupl_symbol, $.ere_dupl_symbol),
|
|
635
|
-
),
|
|
636
|
-
),
|
|
637
|
-
seq(
|
|
638
|
-
choice(
|
|
639
|
-
issueField($, "malformed_interval"),
|
|
640
|
-
issueField($, "incomplete_interval"),
|
|
641
|
-
),
|
|
642
|
-
optional(field("modifier", $.repetition_modifier)),
|
|
643
|
-
),
|
|
644
|
-
),
|
|
645
541
|
};
|
|
646
542
|
}
|
|
647
543
|
|