From e3953e09914587768d446ac08a1d95efbbd95254 Mon Sep 17 00:00:00 2001 From: Ronald Tse Date: Wed, 7 Oct 2026 06:41:47 +0800 Subject: [PATCH] Declaration modifiers: canonical block form, package visibility, UML vocabulary Implements the signed-off RS 3001 par. Declaration modifiers (lutaml docs PR: spec/element-modifiers): - canonical in-block declarations: `visibility {level}` in class/enum bodies (flows through the generic attribute path) and `abstract true|false` mapping onto `is_abstract` - package declarations take the visibility prefix again: the `package` visibility keyword is guarded by a declaration-keyword lookahead, so `private package P { }` parses while bare `package P { }` still binds as a package declaration - vocabulary: `~` maps to UML 2.5 `package` visibility (was "friendly"); the GraphViz symbol table gains the `~` mapping --- lib/lutaml/lml/document_builder.rb | 11 + .../lml/formatter/graphviz/node_formatter.rb | 3 +- lib/lutaml/lml/grammar/lml.artifact.json | 3997 +++++++++-------- lib/lutaml/lml/grammar/lml.parg | 18 +- lib/lutaml/lml/transform.rb | 2 +- spec/lutaml/lml/element_visibility_spec.rb | 40 + spec/lutaml/lml/transform_spec.rb | 4 +- spec/lutaml/parsers/dsl_spec.rb | 2 +- 8 files changed, 2224 insertions(+), 1853 deletions(-) diff --git a/lib/lutaml/lml/document_builder.rb b/lib/lutaml/lml/document_builder.rb index 8c7016f..5bee90c 100644 --- a/lib/lutaml/lml/document_builder.rb +++ b/lib/lutaml/lml/document_builder.rb @@ -237,6 +237,7 @@ def expand_nested_members(model, hash) # `value` members, mapping sections, class declarations, enum # member_fields and from_table all arrive as bare member hashes. def expand_declared_members(model, hash) + expand_abstract_declaration(model, hash) expand_definition_text(model, hash) expand_value_declaration(model, hash) expand_value_set_declaration(model, hash) @@ -287,6 +288,16 @@ def normalize_operation_param(param) # RS 3001 §Definition single-line form (`definition "text"`) arrives # as a quoted-string capture; unwrap it for the entity's definition. + # RS 3001 declaration modifiers: `abstract true` maps onto the + # is_abstract field (the visibility declaration flows through the + # generic attribute path). + def expand_abstract_declaration(model, hash) + value = hash.delete(:abstract) + return unless value && model.class.attributes.key?(:is_abstract) + + model.is_abstract = value.to_s == 'true' + end + def expand_definition_text(model, hash) return unless hash.key?(:definition) && model.class.attributes.key?(:definition) diff --git a/lib/lutaml/lml/formatter/graphviz/node_formatter.rb b/lib/lutaml/lml/formatter/graphviz/node_formatter.rb index 8edad81..1c41ba0 100644 --- a/lib/lutaml/lml/formatter/graphviz/node_formatter.rb +++ b/lib/lutaml/lml/formatter/graphviz/node_formatter.rb @@ -7,7 +7,8 @@ module NodeFormatter ACCESS_SYMBOLS = { 'public' => '+', 'protected' => '#', - 'private' => '-' + 'private' => '-', + 'package' => '~' }.freeze def format_attribute(node) diff --git a/lib/lutaml/lml/grammar/lml.artifact.json b/lib/lutaml/lml/grammar/lml.artifact.json index 743efae..7962f32 100644 --- a/lib/lutaml/lml/grammar/lml.artifact.json +++ b/lib/lutaml/lml/grammar/lml.artifact.json @@ -245,7 +245,7 @@ } }, { - "Ignore": { + "Trivia": { "atom": 35 } }, @@ -611,12 +611,12 @@ }, { "Entity": { - "atom": 1999 + "atom": 2044 } }, { "Entity": { - "atom": 1686 + "atom": 1731 } }, { @@ -1127,12 +1127,12 @@ }, { "Entity": { - "atom": 1678 + "atom": 1723 } }, { "Entity": { - "atom": 1677 + "atom": 1722 } }, { @@ -2795,12 +2795,12 @@ }, { "Entity": { - "atom": 1205 + "atom": 1262 } }, { "Entity": { - "atom": 431 + "atom": 462 } }, { @@ -2823,20 +2823,221 @@ "pattern": "package" } }, + { + "Str": { + "pattern": " " + } + }, + { + "Repetition": { + "atom": 427, + "min": 1, + "max": null, + "tag": "Repetition" + } + }, + { + "Entity": { + "atom": 433 + } + }, + { + "Str": { + "pattern": "class" + } + }, + { + "Str": { + "pattern": " " + } + }, + { + "Repetition": { + "atom": 431, + "min": 1, + "max": null, + "tag": "Repetition" + } + }, + { + "Sequence": { + "atoms": [ + 430, + 432 + ] + } + }, + { + "Entity": { + "atom": 438 + } + }, + { + "Str": { + "pattern": "enum" + } + }, + { + "Str": { + "pattern": " " + } + }, + { + "Repetition": { + "atom": 436, + "min": 1, + "max": null, + "tag": "Repetition" + } + }, + { + "Sequence": { + "atoms": [ + 435, + 437 + ] + } + }, + { + "Entity": { + "atom": 443 + } + }, + { + "Str": { + "pattern": "data_type" + } + }, + { + "Str": { + "pattern": " " + } + }, + { + "Repetition": { + "atom": 441, + "min": 1, + "max": null, + "tag": "Repetition" + } + }, + { + "Sequence": { + "atoms": [ + 440, + 442 + ] + } + }, + { + "Entity": { + "atom": 448 + } + }, + { + "Str": { + "pattern": "primitive" + } + }, + { + "Str": { + "pattern": " " + } + }, + { + "Repetition": { + "atom": 446, + "min": 1, + "max": null, + "tag": "Repetition" + } + }, + { + "Sequence": { + "atoms": [ + 445, + 447 + ] + } + }, + { + "Entity": { + "atom": 453 + } + }, + { + "Str": { + "pattern": "package" + } + }, + { + "Str": { + "pattern": " " + } + }, + { + "Repetition": { + "atom": 451, + "min": 1, + "max": null, + "tag": "Repetition" + } + }, + { + "Sequence": { + "atoms": [ + 450, + 452 + ] + } + }, + { + "Alternative": { + "atoms": [ + 429, + 434, + 439, + 444, + 449 + ] + } + }, + { + "Sequence": { + "atoms": [ + 428, + 454 + ] + } + }, + { + "Lookahead": { + "atom": 455, + "positive": true + } + }, + { + "Sequence": { + "atoms": [ + 426, + 456 + ] + } + }, { "Alternative": { "atoms": [ 423, 424, 425, - 426 + 457 ] } }, { "Named": { "name": "visibility", - "atom": 427 + "atom": 458 } }, { @@ -2846,7 +3047,7 @@ }, { "Repetition": { - "atom": 429, + "atom": 460, "min": 1, "max": null, "tag": "Repetition" @@ -2855,8 +3056,8 @@ { "Sequence": { "atoms": [ - 428, - 430 + 459, + 461 ] } }, @@ -2870,7 +3071,7 @@ }, { "Entity": { - "atom": 445 + "atom": 476 } }, { @@ -2880,7 +3081,7 @@ }, { "Repetition": { - "atom": 434, + "atom": 465, "min": 0, "max": 1, "tag": "Maybe" @@ -2888,7 +3089,7 @@ }, { "Entity": { - "atom": 443 + "atom": 474 } }, { @@ -2904,15 +3105,15 @@ { "Alternative": { "atoms": [ - 437, - 438 + 468, + 469 ] } }, { "Named": { "name": "modifier", - "atom": 439 + "atom": 470 } }, { @@ -2922,7 +3123,7 @@ }, { "Repetition": { - "atom": 441, + "atom": 472, "min": 1, "max": null, "tag": "Repetition" @@ -2931,23 +3132,23 @@ { "Sequence": { "atoms": [ - 440, - 442 + 471, + 473 ] } }, { "Sequence": { "atoms": [ - 435, + 466, 36, - 436 + 467 ] } }, { "Repetition": { - "atom": 444, + "atom": 475, "min": 0, "max": 1, "tag": "Maybe" @@ -2960,7 +3161,7 @@ }, { "Repetition": { - "atom": 446, + "atom": 477, "min": 0, "max": 1, "tag": "Maybe" @@ -2968,43 +3169,17 @@ }, { "Entity": { - "atom": 452 - } - }, - { - "Str": { - "pattern": "class" - } - }, - { - "Str": { - "pattern": " " - } - }, - { - "Repetition": { - "atom": 450, - "min": 1, - "max": null, - "tag": "Repetition" - } - }, - { - "Sequence": { - "atoms": [ - 449, - 451 - ] + "atom": 433 } }, { "Entity": { - "atom": 470 + "atom": 497 } }, { "Entity": { - "atom": 464 + "atom": 491 } }, { @@ -3050,20 +3225,20 @@ { "Alternative": { "atoms": [ - 455, - 456, - 457, - 458, - 459, - 460, - 461, - 462 + 482, + 483, + 484, + 485, + 486, + 487, + 488, + 489 ] } }, { "Repetition": { - "atom": 463, + "atom": 490, "min": 1, "max": null, "tag": "Repetition" @@ -3076,7 +3251,7 @@ }, { "Entity": { - "atom": 464 + "atom": 491 } }, { @@ -3087,16 +3262,16 @@ { "Sequence": { "atoms": [ - 465, + 492, 36, - 466, - 467 + 493, + 494 ] } }, { "Repetition": { - "atom": 468, + "atom": 495, "min": 0, "max": 1, "tag": "Maybe" @@ -3106,21 +3281,21 @@ "Sequence": { "atoms": [ 36, - 454, + 481, 36, - 469 + 496 ] } }, { "Named": { "name": "name", - "atom": 453 + "atom": 480 } }, { "Entity": { - "atom": 477 + "atom": 504 } }, { @@ -3132,34 +3307,34 @@ "Sequence": { "atoms": [ 36, - 473 + 500 ] } }, { "Entity": { - "atom": 464 + "atom": 491 } }, { "Named": { "name": "parent_class", - "atom": 475 + "atom": 502 } }, { "Sequence": { "atoms": [ 36, - 474, + 501, 36, - 476 + 503 ] } }, { "Repetition": { - "atom": 472, + "atom": 499, "min": 0, "max": 1, "tag": "Maybe" @@ -3167,7 +3342,7 @@ }, { "Entity": { - "atom": 493 + "atom": 520 } }, { @@ -3179,7 +3354,7 @@ "Sequence": { "atoms": [ 36, - 480 + 507 ] } }, @@ -3216,18 +3391,18 @@ { "Alternative": { "atoms": [ - 482, - 483, - 484, - 485, - 486, - 487 + 509, + 510, + 511, + 512, + 513, + 514 ] } }, { "Repetition": { - "atom": 488, + "atom": 515, "min": 1, "max": null, "tag": "Repetition" @@ -3236,7 +3411,7 @@ { "Named": { "name": "stereotype", - "atom": 489 + "atom": 516 } }, { @@ -3248,7 +3423,7 @@ "Sequence": { "atoms": [ 36, - 491 + 518 ] } }, @@ -3256,17 +3431,17 @@ "Sequence": { "atoms": [ 36, - 481, + 508, 36, - 490, + 517, 36, - 492 + 519 ] } }, { "Repetition": { - "atom": 479, + "atom": 506, "min": 0, "max": 1, "tag": "Maybe" @@ -3274,7 +3449,7 @@ }, { "Entity": { - "atom": 1203 + "atom": 1260 } }, { @@ -3286,7 +3461,7 @@ "Sequence": { "atoms": [ 36, - 496 + 523 ] } }, @@ -3297,7 +3472,7 @@ }, { "Repetition": { - "atom": 498, + "atom": 525, "min": 0, "max": 1, "tag": "Maybe" @@ -3305,29 +3480,229 @@ }, { "Entity": { - "atom": 1200 + "atom": 1257 + } + }, + { + "Entity": { + "atom": 1254 } }, { "Entity": { - "atom": 1197 + "atom": 545 } }, { "Entity": { - "atom": 529 + "atom": 534 } }, { "Str": { - "pattern": "definition" + "pattern": "visibility" + } + }, + { + "Str": { + "pattern": " " + } + }, + { + "Repetition": { + "atom": 532, + "min": 1, + "max": null, + "tag": "Repetition" + } + }, + { + "Sequence": { + "atoms": [ + 531, + 533 + ] + } + }, + { + "Str": { + "pattern": "public" } }, { "Sequence": { "atoms": [ 36, - 503 + 535 + ] + } + }, + { + "Str": { + "pattern": "private" + } + }, + { + "Sequence": { + "atoms": [ + 36, + 537 + ] + } + }, + { + "Str": { + "pattern": "protected" + } + }, + { + "Sequence": { + "atoms": [ + 36, + 539 + ] + } + }, + { + "Str": { + "pattern": "package" + } + }, + { + "Sequence": { + "atoms": [ + 36, + 541 + ] + } + }, + { + "Alternative": { + "atoms": [ + 536, + 538, + 540, + 542 + ] + } + }, + { + "Named": { + "name": "visibility", + "atom": 543 + } + }, + { + "Sequence": { + "atoms": [ + 36, + 530, + 36, + 544 + ] + } + }, + { + "Entity": { + "atom": 558 + } + }, + { + "Entity": { + "atom": 551 + } + }, + { + "Str": { + "pattern": "abstract" + } + }, + { + "Str": { + "pattern": " " + } + }, + { + "Repetition": { + "atom": 549, + "min": 1, + "max": null, + "tag": "Repetition" + } + }, + { + "Sequence": { + "atoms": [ + 548, + 550 + ] + } + }, + { + "Str": { + "pattern": "true" + } + }, + { + "Sequence": { + "atoms": [ + 36, + 552 + ] + } + }, + { + "Str": { + "pattern": "false" + } + }, + { + "Sequence": { + "atoms": [ + 36, + 554 + ] + } + }, + { + "Alternative": { + "atoms": [ + 553, + 555 + ] + } + }, + { + "Named": { + "name": "abstract", + "atom": 556 + } + }, + { + "Sequence": { + "atoms": [ + 36, + 547, + 36, + 557 + ] + } + }, + { + "Entity": { + "atom": 586 + } + }, + { + "Str": { + "pattern": "definition" + } + }, + { + "Sequence": { + "atoms": [ + 36, + 560 ] } }, @@ -3338,7 +3713,7 @@ }, { "Repetition": { - "atom": 505, + "atom": 562, "min": 0, "max": 1, "tag": "Maybe" @@ -3353,13 +3728,13 @@ "Sequence": { "atoms": [ 36, - 507 + 564 ] } }, { "Entity": { - "atom": 525 + "atom": 582 } }, { @@ -3375,8 +3750,8 @@ { "Sequence": { "atoms": [ - 510, - 511 + 567, + 568 ] } }, @@ -3387,7 +3762,7 @@ }, { "Entity": { - "atom": 522 + "atom": 579 } }, { @@ -3398,9 +3773,9 @@ { "Sequence": { "atoms": [ - 513, - 514, - 515 + 570, + 571, + 572 ] } }, @@ -3411,7 +3786,7 @@ }, { "Lookahead": { - "atom": 517, + "atom": 574, "positive": false } }, @@ -3423,23 +3798,23 @@ { "Sequence": { "atoms": [ - 518, - 519 + 575, + 576 ] } }, { "Alternative": { "atoms": [ - 512, - 516, - 520 + 569, + 573, + 577 ] } }, { "Repetition": { - "atom": 521, + "atom": 578, "min": 0, "max": null, "tag": "Repetition" @@ -3448,24 +3823,24 @@ { "Sequence": { "atoms": [ - 513, - 514, - 515 + 570, + 571, + 572 ] } }, { "Alternative": { "atoms": [ - 512, - 523, - 520 + 569, + 580, + 577 ] } }, { "Repetition": { - "atom": 524, + "atom": 581, "min": 0, "max": null, "tag": "Repetition" @@ -3474,7 +3849,7 @@ { "Named": { "name": "definition", - "atom": 509 + "atom": 566 } }, { @@ -3486,7 +3861,7 @@ "Sequence": { "atoms": [ 36, - 527 + 584 ] } }, @@ -3494,26 +3869,26 @@ "Sequence": { "atoms": [ 36, - 504, + 561, 36, - 506, + 563, 36, - 508, + 565, 36, - 526, + 583, 36, - 528 + 585 ] } }, { "Entity": { - "atom": 543 + "atom": 600 } }, { "Entity": { - "atom": 535 + "atom": 592 } }, { @@ -3528,7 +3903,7 @@ }, { "Repetition": { - "atom": 533, + "atom": 590, "min": 1, "max": null, "tag": "Repetition" @@ -3537,8 +3912,8 @@ { "Sequence": { "atoms": [ - 532, - 534 + 589, + 591 ] } }, @@ -3555,8 +3930,8 @@ { "Alternative": { "atoms": [ - 536, - 537 + 593, + 594 ] } }, @@ -3564,16 +3939,16 @@ "Sequence": { "atoms": [ 36, - 531, + 588, 36, - 538 + 595 ] } }, { "Named": { "name": "definition", - "atom": 539 + "atom": 596 } }, { @@ -3583,7 +3958,7 @@ }, { "Repetition": { - "atom": 541, + "atom": 598, "min": 0, "max": 1, "tag": "Maybe" @@ -3593,15 +3968,15 @@ "Sequence": { "atoms": [ 36, - 540, + 597, 36, - 542 + 599 ] } }, { "Entity": { - "atom": 555 + "atom": 612 } }, { @@ -3611,7 +3986,7 @@ }, { "Repetition": { - "atom": 545, + "atom": 602, "min": 0, "max": 1, "tag": "Maybe" @@ -3629,7 +4004,7 @@ }, { "Repetition": { - "atom": 548, + "atom": 605, "min": 1, "max": null, "tag": "Repetition" @@ -3638,7 +4013,7 @@ { "Named": { "name": "format", - "atom": 549 + "atom": 606 } }, { @@ -3653,7 +4028,7 @@ }, { "Repetition": { - "atom": 552, + "atom": 609, "min": 0, "max": 1, "tag": "Maybe" @@ -3663,27 +4038,27 @@ "Sequence": { "atoms": [ 36, - 546, + 603, 36, - 547, + 604, 36, - 550, + 607, 36, - 551, + 608, 36, - 553 + 610 ] } }, { "Named": { "name": "serialization_mappings", - "atom": 554 + "atom": 611 } }, { "Entity": { - "atom": 610 + "atom": 667 } }, { @@ -3693,7 +4068,7 @@ }, { "Repetition": { - "atom": 557, + "atom": 614, "min": 0, "max": 1, "tag": "Maybe" @@ -3701,7 +4076,7 @@ }, { "Entity": { - "atom": 563 + "atom": 620 } }, { @@ -3716,7 +4091,7 @@ }, { "Repetition": { - "atom": 561, + "atom": 618, "min": 1, "max": null, "tag": "Repetition" @@ -3725,19 +4100,19 @@ { "Sequence": { "atoms": [ - 560, - 562 + 617, + 619 ] } }, { "Entity": { - "atom": 575 + "atom": 632 } }, { "Entity": { - "atom": 573 + "atom": 630 } }, { @@ -3778,19 +4153,19 @@ { "Alternative": { "atoms": [ - 566, - 567, - 568, - 569, - 570, - 571, - 572 + 623, + 624, + 625, + 626, + 627, + 628, + 629 ] } }, { "Repetition": { - "atom": 565, + "atom": 622, "min": 1, "max": null, "tag": "Repetition" @@ -3799,7 +4174,7 @@ { "Named": { "name": "name", - "atom": 574 + "atom": 631 } }, { @@ -3811,13 +4186,13 @@ "Sequence": { "atoms": [ 36, - 576 + 633 ] } }, { "Entity": { - "atom": 583 + "atom": 640 } }, { @@ -3829,7 +4204,7 @@ "Sequence": { "atoms": [ 36, - 579 + 636 ] } }, @@ -3842,21 +4217,21 @@ "Sequence": { "atoms": [ 36, - 581 + 638 ] } }, { "Alternative": { "atoms": [ - 580, - 582 + 637, + 639 ] } }, { "Repetition": { - "atom": 578, + "atom": 635, "min": 0, "max": 1, "tag": "Maybe" @@ -3864,7 +4239,7 @@ }, { "Entity": { - "atom": 602 + "atom": 659 } }, { @@ -3880,20 +4255,20 @@ { "Alternative": { "atoms": [ - 586, - 587 + 643, + 644 ] } }, { "Lookahead": { - "atom": 588, + "atom": 645, "positive": false } }, { "Entity": { - "atom": 600 + "atom": 657 } }, { @@ -3944,29 +4319,29 @@ { "Alternative": { "atoms": [ - 591, - 592, - 593, - 594, - 595, - 596, - 597, - 598, - 599 + 648, + 649, + 650, + 651, + 652, + 653, + 654, + 655, + 656 ] } }, { "Sequence": { "atoms": [ - 589, - 590 + 646, + 647 ] } }, { "Repetition": { - "atom": 601, + "atom": 658, "min": 1, "max": null, "tag": "Repetition" @@ -3975,17 +4350,17 @@ { "Named": { "name": "type", - "atom": 585 + "atom": 642 } }, { "Entity": { - "atom": 583 + "atom": 640 } }, { "Repetition": { - "atom": 604, + "atom": 661, "min": 0, "max": 1, "tag": "Maybe" @@ -3995,26 +4370,26 @@ "Sequence": { "atoms": [ 36, - 558, + 615, 36, - 559, + 616, 36, - 564, + 621, 36, - 577, + 634, 36, - 584, + 641, 36, - 603, + 660, 36, - 605 + 662 ] } }, { "Named": { "name": "derived_field", - "atom": 606 + "atom": 663 } }, { @@ -4024,7 +4399,7 @@ }, { "Repetition": { - "atom": 608, + "atom": 665, "min": 0, "max": 1, "tag": "Maybe" @@ -4034,9 +4409,9 @@ "Sequence": { "atoms": [ 36, - 607, + 664, 36, - 609 + 666 ] } }, @@ -4047,7 +4422,7 @@ }, { "Entity": { - "atom": 743 + "atom": 800 } }, { @@ -4057,7 +4432,7 @@ }, { "Repetition": { - "atom": 613, + "atom": 670, "min": 0, "max": 1, "tag": "Maybe" @@ -4065,12 +4440,12 @@ }, { "Entity": { - "atom": 626 + "atom": 683 } }, { "Entity": { - "atom": 625 + "atom": 682 } }, { @@ -4082,7 +4457,7 @@ "Sequence": { "atoms": [ 36, - 617 + 674 ] } }, @@ -4095,7 +4470,7 @@ "Sequence": { "atoms": [ 36, - 619 + 676 ] } }, @@ -4108,7 +4483,7 @@ "Sequence": { "atoms": [ 36, - 621 + 678 ] } }, @@ -4121,29 +4496,29 @@ "Sequence": { "atoms": [ 36, - 623 + 680 ] } }, { "Alternative": { "atoms": [ - 618, - 620, - 622, - 624 + 675, + 677, + 679, + 681 ] } }, { "Named": { "name": "visibility_modifier", - "atom": 616 + "atom": 673 } }, { "Repetition": { - "atom": 615, + "atom": 672, "min": 0, "max": 1, "tag": "Maybe" @@ -4156,7 +4531,7 @@ }, { "Repetition": { - "atom": 628, + "atom": 685, "min": 1, "max": null, "tag": "Repetition" @@ -4165,7 +4540,7 @@ { "Named": { "name": "name", - "atom": 629 + "atom": 686 } }, { @@ -4177,18 +4552,18 @@ "Sequence": { "atoms": [ 36, - 631 + 688 ] } }, { "Entity": { - "atom": 682 + "atom": 739 } }, { "Entity": { - "atom": 675 + "atom": 732 } }, { @@ -4209,16 +4584,16 @@ { "Alternative": { "atoms": [ - 635, - 636, - 637 + 692, + 693, + 694 ] } }, { "Named": { "name": "direction", - "atom": 638 + "atom": 695 } }, { @@ -4228,7 +4603,7 @@ }, { "Repetition": { - "atom": 640, + "atom": 697, "min": 1, "max": null, "tag": "Repetition" @@ -4237,14 +4612,14 @@ { "Sequence": { "atoms": [ - 639, - 641 + 696, + 698 ] } }, { "Repetition": { - "atom": 642, + "atom": 699, "min": 0, "max": 1, "tag": "Maybe" @@ -4257,7 +4632,7 @@ }, { "Repetition": { - "atom": 644, + "atom": 701, "min": 1, "max": null, "tag": "Repetition" @@ -4266,7 +4641,7 @@ { "Named": { "name": "name", - "atom": 645 + "atom": 702 } }, { @@ -4276,7 +4651,7 @@ }, { "Repetition": { - "atom": 647, + "atom": 704, "min": 0, "max": 1, "tag": "Maybe" @@ -4284,17 +4659,17 @@ }, { "Entity": { - "atom": 651 + "atom": 708 } }, { "Entity": { - "atom": 602 + "atom": 659 } }, { "Repetition": { - "atom": 650, + "atom": 707, "min": 0, "max": 1, "tag": "Maybe" @@ -4303,7 +4678,7 @@ { "Named": { "name": "type", - "atom": 649 + "atom": 706 } }, { @@ -4313,7 +4688,7 @@ }, { "Repetition": { - "atom": 653, + "atom": 710, "min": 0, "max": 1, "tag": "Maybe" @@ -4321,7 +4696,7 @@ }, { "Entity": { - "atom": 673 + "atom": 730 } }, { @@ -4336,7 +4711,7 @@ }, { "Repetition": { - "atom": 657, + "atom": 714, "min": 1, "max": null, "tag": "Repetition" @@ -4344,7 +4719,7 @@ }, { "Entity": { - "atom": 671 + "atom": 728 } }, { @@ -4354,7 +4729,7 @@ }, { "Repetition": { - "atom": 660, + "atom": 717, "min": 1, "max": null, "tag": "Repetition" @@ -4369,7 +4744,7 @@ "Sequence": { "atoms": [ 36, - 662 + 719 ] } }, @@ -4380,7 +4755,7 @@ }, { "Repetition": { - "atom": 664, + "atom": 721, "min": 1, "max": null, "tag": "Repetition" @@ -4390,18 +4765,18 @@ "Sequence": { "atoms": [ 36, - 661, + 718, 36, - 663, + 720, 36, - 665 + 722 ] } }, { "Named": { "name": "float", - "atom": 666 + "atom": 723 } }, { @@ -4411,7 +4786,7 @@ }, { "Repetition": { - "atom": 668, + "atom": 725, "min": 1, "max": null, "tag": "Repetition" @@ -4420,29 +4795,29 @@ { "Named": { "name": "number", - "atom": 669 + "atom": 726 } }, { "Alternative": { "atoms": [ - 667, - 670 + 724, + 727 ] } }, { "Alternative": { "atoms": [ - 656, - 658, - 659 + 713, + 715, + 716 ] } }, { "Repetition": { - "atom": 672, + "atom": 729, "min": 0, "max": 1, "tag": "Maybe" @@ -4451,24 +4826,24 @@ { "Named": { "name": "param_default", - "atom": 655 + "atom": 712 } }, { "Sequence": { "atoms": [ 36, - 643, + 700, 36, - 646, + 703, 36, - 648, + 705, 36, - 652, + 709, 36, - 654, + 711, 36, - 674 + 731 ] } }, @@ -4484,7 +4859,7 @@ }, { "Repetition": { - "atom": 677, + "atom": 734, "min": 0, "max": 1, "tag": "Maybe" @@ -4492,22 +4867,22 @@ }, { "Entity": { - "atom": 675 + "atom": 732 } }, { "Sequence": { "atoms": [ - 676, - 678, + 733, + 735, 36, - 679 + 736 ] } }, { "Repetition": { - "atom": 680, + "atom": 737, "min": 0, "max": null, "tag": "Repetition" @@ -4517,21 +4892,21 @@ "Sequence": { "atoms": [ 36, - 634, + 691, 36, - 681 + 738 ] } }, { "Named": { "name": "owned_parameter", - "atom": 633 + "atom": 690 } }, { "Repetition": { - "atom": 683, + "atom": 740, "min": 0, "max": 1, "tag": "Maybe" @@ -4546,13 +4921,13 @@ "Sequence": { "atoms": [ 36, - 685 + 742 ] } }, { "Entity": { - "atom": 717 + "atom": 774 } }, { @@ -4564,24 +4939,24 @@ "Sequence": { "atoms": [ 36, - 688 + 745 ] } }, { "Entity": { - "atom": 602 + "atom": 659 } }, { "Named": { "name": "return_type", - "atom": 690 + "atom": 747 } }, { "Entity": { - "atom": 715 + "atom": 772 } }, { @@ -4593,18 +4968,18 @@ "Sequence": { "atoms": [ 36, - 693 + 750 ] } }, { "Entity": { - "atom": 711 + "atom": 768 } }, { "Entity": { - "atom": 703 + "atom": 760 } }, { @@ -4616,7 +4991,7 @@ "Sequence": { "atoms": [ 36, - 697 + 754 ] } }, @@ -4629,7 +5004,7 @@ "Sequence": { "atoms": [ 36, - 699 + 756 ] } }, @@ -4642,23 +5017,23 @@ "Sequence": { "atoms": [ 36, - 701 + 758 ] } }, { "Alternative": { "atoms": [ - 698, - 700, - 702 + 755, + 757, + 759 ] } }, { "Named": { "name": "min", - "atom": 696 + "atom": 753 } }, { @@ -4668,18 +5043,18 @@ }, { "Entity": { - "atom": 703 + "atom": 760 } }, { "Named": { "name": "max", - "atom": 706 + "atom": 763 } }, { "Repetition": { - "atom": 707, + "atom": 764, "min": 0, "max": 1, "tag": "Maybe" @@ -4688,14 +5063,14 @@ { "Sequence": { "atoms": [ - 705, - 708 + 762, + 765 ] } }, { "Repetition": { - "atom": 709, + "atom": 766, "min": 0, "max": 1, "tag": "Maybe" @@ -4705,16 +5080,16 @@ "Sequence": { "atoms": [ 36, - 704, + 761, 36, - 710 + 767 ] } }, { "Named": { "name": "cardinality", - "atom": 695 + "atom": 752 } }, { @@ -4726,7 +5101,7 @@ "Sequence": { "atoms": [ 36, - 713 + 770 ] } }, @@ -4734,17 +5109,17 @@ "Sequence": { "atoms": [ 36, - 694, + 751, 36, - 712, + 769, 36, - 714 + 771 ] } }, { "Repetition": { - "atom": 692, + "atom": 749, "min": 0, "max": 1, "tag": "Maybe" @@ -4754,17 +5129,17 @@ "Sequence": { "atoms": [ 36, - 689, + 746, 36, - 691, + 748, 36, - 716 + 773 ] } }, { "Repetition": { - "atom": 687, + "atom": 744, "min": 0, "max": 1, "tag": "Maybe" @@ -4772,7 +5147,7 @@ }, { "Entity": { - "atom": 739 + "atom": 796 } }, { @@ -4784,7 +5159,7 @@ "Sequence": { "atoms": [ 36, - 720 + 777 ] } }, @@ -4795,7 +5170,7 @@ }, { "Repetition": { - "atom": 722, + "atom": 779, "min": 0, "max": 1, "tag": "Maybe" @@ -4808,7 +5183,7 @@ }, { "Repetition": { - "atom": 724, + "atom": 781, "min": 1, "max": null, "tag": "Repetition" @@ -4817,7 +5192,7 @@ { "Named": { "name": "stereotype", - "atom": 725 + "atom": 782 } }, { @@ -4827,7 +5202,7 @@ }, { "Repetition": { - "atom": 727, + "atom": 784, "min": 0, "max": 1, "tag": "Maybe" @@ -4840,7 +5215,7 @@ }, { "Repetition": { - "atom": 729, + "atom": 786, "min": 0, "max": 1, "tag": "Maybe" @@ -4849,15 +5224,15 @@ { "Sequence": { "atoms": [ - 726, - 728, - 730 + 783, + 785, + 787 ] } }, { "Repetition": { - "atom": 731, + "atom": 788, "min": 0, "max": null, "tag": "Repetition" @@ -4866,12 +5241,12 @@ { "Named": { "name": "stereotype", - "atom": 732 + "atom": 789 } }, { "Repetition": { - "atom": 733, + "atom": 790, "min": 0, "max": 1, "tag": "Maybe" @@ -4884,7 +5259,7 @@ }, { "Repetition": { - "atom": 735, + "atom": 792, "min": 0, "max": 1, "tag": "Maybe" @@ -4899,7 +5274,7 @@ "Sequence": { "atoms": [ 36, - 737 + 794 ] } }, @@ -4907,21 +5282,21 @@ "Sequence": { "atoms": [ 36, - 721, + 778, 36, - 723, + 780, 36, - 734, + 791, 36, - 736, + 793, 36, - 738 + 795 ] } }, { "Repetition": { - "atom": 719, + "atom": 776, "min": 0, "max": 1, "tag": "Maybe" @@ -4934,7 +5309,7 @@ }, { "Repetition": { - "atom": 741, + "atom": 798, "min": 0, "max": 1, "tag": "Maybe" @@ -4944,35 +5319,35 @@ "Sequence": { "atoms": [ 36, - 614, + 671, 36, - 627, + 684, 36, - 630, + 687, 36, - 632, + 689, 36, - 684, + 741, 36, - 686, + 743, 36, - 718, + 775, 36, - 740, + 797, 36, - 742 + 799 ] } }, { "Named": { "name": "operations", - "atom": 612 + "atom": 669 } }, { "Entity": { - "atom": 1116 + "atom": 1173 } }, { @@ -4982,7 +5357,7 @@ }, { "Repetition": { - "atom": 746, + "atom": 803, "min": 0, "max": 1, "tag": "Maybe" @@ -4990,7 +5365,7 @@ }, { "Entity": { - "atom": 752 + "atom": 809 } }, { @@ -5005,7 +5380,7 @@ }, { "Repetition": { - "atom": 750, + "atom": 807, "min": 1, "max": null, "tag": "Repetition" @@ -5014,14 +5389,14 @@ { "Sequence": { "atoms": [ - 749, - 751 + 806, + 808 ] } }, { "Entity": { - "atom": 575 + "atom": 632 } }, { @@ -5033,19 +5408,19 @@ "Sequence": { "atoms": [ 36, - 754 + 811 ] } }, { "Entity": { - "atom": 602 + "atom": 659 } }, { "Named": { "name": "type", - "atom": 756 + "atom": 813 } }, { @@ -5060,7 +5435,7 @@ }, { "Repetition": { - "atom": 759, + "atom": 816, "min": 0, "max": 1, "tag": "Maybe" @@ -5068,12 +5443,12 @@ }, { "Entity": { - "atom": 1107 + "atom": 1164 } }, { "Entity": { - "atom": 770 + "atom": 827 } }, { @@ -5085,7 +5460,7 @@ "Sequence": { "atoms": [ 36, - 763 + 820 ] } }, @@ -5096,7 +5471,7 @@ }, { "Repetition": { - "atom": 765, + "atom": 822, "min": 1, "max": null, "tag": "Repetition" @@ -5105,7 +5480,7 @@ { "Named": { "name": "type", - "atom": 766 + "atom": 823 } }, { @@ -5115,7 +5490,7 @@ }, { "Repetition": { - "atom": 768, + "atom": 825, "min": 0, "max": 1, "tag": "Maybe" @@ -5125,17 +5500,17 @@ "Sequence": { "atoms": [ 36, - 764, + 821, 36, - 767, + 824, 36, - 769 + 826 ] } }, { "Entity": { - "atom": 778 + "atom": 835 } }, { @@ -5147,19 +5522,19 @@ "Sequence": { "atoms": [ 36, - 772 + 829 ] } }, { "Entity": { - "atom": 711 + "atom": 768 } }, { "Named": { "name": "cardinality", - "atom": 774 + "atom": 831 } }, { @@ -5169,7 +5544,7 @@ }, { "Repetition": { - "atom": 776, + "atom": 833, "min": 0, "max": 1, "tag": "Maybe" @@ -5179,22 +5554,22 @@ "Sequence": { "atoms": [ 36, - 773, + 830, 36, - 775, + 832, 36, - 777 + 834 ] } }, { "Entity": { - "atom": 845 + "atom": 902 } }, { "Entity": { - "atom": 784 + "atom": 841 } }, { @@ -5209,7 +5584,7 @@ }, { "Repetition": { - "atom": 782, + "atom": 839, "min": 1, "max": null, "tag": "Repetition" @@ -5218,14 +5593,14 @@ { "Sequence": { "atoms": [ - 781, - 783 + 838, + 840 ] } }, { "Entity": { - "atom": 838 + "atom": 895 } }, { @@ -5237,7 +5612,7 @@ "Sequence": { "atoms": [ 36, - 786 + 843 ] } }, @@ -5248,7 +5623,7 @@ }, { "Repetition": { - "atom": 788, + "atom": 845, "min": 0, "max": 1, "tag": "Maybe" @@ -5256,12 +5631,12 @@ }, { "Entity": { - "atom": 825 + "atom": 882 } }, { "Entity": { - "atom": 797 + "atom": 854 } }, { @@ -5273,7 +5648,7 @@ "Sequence": { "atoms": [ 36, - 792 + 849 ] } }, @@ -5286,27 +5661,27 @@ "Sequence": { "atoms": [ 36, - 794 + 851 ] } }, { "Alternative": { "atoms": [ - 793, - 795 + 850, + 852 ] } }, { "Named": { "name": "boolean", - "atom": 796 + "atom": 853 } }, { "Entity": { - "atom": 813 + "atom": 870 } }, { @@ -5318,7 +5693,7 @@ "Sequence": { "atoms": [ 36, - 799 + 856 ] } }, @@ -5331,15 +5706,15 @@ "Sequence": { "atoms": [ 36, - 801 + 858 ] } }, { "Alternative": { "atoms": [ - 800, - 802 + 857, + 859 ] } }, @@ -5361,15 +5736,15 @@ { "Sequence": { "atoms": [ - 805, + 862, 36, - 806 + 863 ] } }, { "Repetition": { - "atom": 807, + "atom": 864, "min": 0, "max": null, "tag": "Repetition" @@ -5379,16 +5754,16 @@ "Sequence": { "atoms": [ 36, - 804, + 861, 36, - 808 + 865 ] } }, { "Named": { "name": "reference", - "atom": 809 + "atom": 866 } }, { @@ -5400,7 +5775,7 @@ "Sequence": { "atoms": [ 36, - 811 + 868 ] } }, @@ -5408,17 +5783,17 @@ "Sequence": { "atoms": [ 36, - 803, + 860, 36, - 810, + 867, 36, - 812 + 869 ] } }, { "Entity": { - "atom": 822 + "atom": 879 } }, { @@ -5429,7 +5804,7 @@ { "Named": { "name": "start", - "atom": 815 + "atom": 872 } }, { @@ -5441,7 +5816,7 @@ "Sequence": { "atoms": [ 36, - 817 + 874 ] } }, @@ -5453,30 +5828,30 @@ { "Named": { "name": "end", - "atom": 819 + "atom": 876 } }, { "Sequence": { "atoms": [ 36, - 816, + 873, 36, - 818, + 875, 36, - 820 + 877 ] } }, { "Named": { "name": "range", - "atom": 821 + "atom": 878 } }, { "Entity": { - "atom": 671 + "atom": 728 } }, { @@ -5487,11 +5862,11 @@ { "Alternative": { "atoms": [ - 791, - 798, - 814, - 823, - 824 + 848, + 855, + 871, + 880, + 881 ] } }, @@ -5503,15 +5878,15 @@ { "Alternative": { "atoms": [ - 790, - 826 + 847, + 883 ] } }, { "Named": { "name": "item", - "atom": 827 + "atom": 884 } }, { @@ -5521,7 +5896,7 @@ }, { "Repetition": { - "atom": 829, + "atom": 886, "min": 0, "max": 1, "tag": "Maybe" @@ -5534,7 +5909,7 @@ }, { "Repetition": { - "atom": 831, + "atom": 888, "min": 0, "max": 1, "tag": "Maybe" @@ -5543,15 +5918,15 @@ { "Sequence": { "atoms": [ - 828, - 830, - 832 + 885, + 887, + 889 ] } }, { "Repetition": { - "atom": 833, + "atom": 890, "min": 0, "max": null, "tag": "Repetition" @@ -5560,7 +5935,7 @@ { "Named": { "name": "items", - "atom": 834 + "atom": 891 } }, { @@ -5572,7 +5947,7 @@ "Sequence": { "atoms": [ 36, - 836 + 893 ] } }, @@ -5580,20 +5955,20 @@ "Sequence": { "atoms": [ 36, - 787, + 844, 36, - 789, + 846, 36, - 835, + 892, 36, - 837 + 894 ] } }, { "Named": { "name": "value_set", - "atom": 785 + "atom": 842 } }, { @@ -5604,14 +5979,14 @@ { "Named": { "name": "value_set_ref", - "atom": 840 + "atom": 897 } }, { "Alternative": { "atoms": [ - 839, - 841 + 896, + 898 ] } }, @@ -5622,7 +5997,7 @@ }, { "Repetition": { - "atom": 843, + "atom": 900, "min": 0, "max": 1, "tag": "Maybe" @@ -5632,22 +6007,22 @@ "Sequence": { "atoms": [ 36, - 780, + 837, 36, - 842, + 899, 36, - 844 + 901 ] } }, { "Entity": { - "atom": 868 + "atom": 925 } }, { "Entity": { - "atom": 851 + "atom": 908 } }, { @@ -5662,7 +6037,7 @@ }, { "Repetition": { - "atom": 849, + "atom": 906, "min": 1, "max": null, "tag": "Repetition" @@ -5671,8 +6046,8 @@ { "Sequence": { "atoms": [ - 848, - 850 + 905, + 907 ] } }, @@ -5685,7 +6060,7 @@ "Sequence": { "atoms": [ 36, - 852 + 909 ] } }, @@ -5702,8 +6077,8 @@ { "Sequence": { "atoms": [ - 854, - 855 + 911, + 912 ] } }, @@ -5714,7 +6089,7 @@ }, { "Lookahead": { - "atom": 857, + "atom": 914, "positive": false } }, @@ -5726,22 +6101,22 @@ { "Sequence": { "atoms": [ - 858, - 859 + 915, + 916 ] } }, { "Alternative": { "atoms": [ - 856, - 860 + 913, + 917 ] } }, { "Repetition": { - "atom": 861, + "atom": 918, "min": 0, "max": null, "tag": "Repetition" @@ -5750,7 +6125,7 @@ { "Named": { "name": "pattern", - "atom": 862 + "atom": 919 } }, { @@ -5762,7 +6137,7 @@ "Sequence": { "atoms": [ 36, - 864 + 921 ] } }, @@ -5773,7 +6148,7 @@ }, { "Repetition": { - "atom": 866, + "atom": 923, "min": 0, "max": 1, "tag": "Maybe" @@ -5783,26 +6158,26 @@ "Sequence": { "atoms": [ 36, - 847, + 904, 36, - 853, + 910, 36, - 863, + 920, 36, - 865, + 922, 36, - 867 + 924 ] } }, { "Entity": { - "atom": 1104 + "atom": 1161 } }, { "Entity": { - "atom": 877 + "atom": 934 } }, { @@ -5818,14 +6193,14 @@ { "Alternative": { "atoms": [ - 871, - 872 + 928, + 929 ] } }, { "Lookahead": { - "atom": 873, + "atom": 930, "positive": false } }, @@ -5837,14 +6212,14 @@ { "Sequence": { "atoms": [ - 874, - 875 + 931, + 932 ] } }, { "Repetition": { - "atom": 876, + "atom": 933, "min": 1, "max": null, "tag": "Repetition" @@ -5853,7 +6228,7 @@ { "Named": { "name": "name", - "atom": 870 + "atom": 927 } }, { @@ -5869,14 +6244,14 @@ { "Alternative": { "atoms": [ - 879, - 880 + 936, + 937 ] } }, { "Repetition": { - "atom": 881, + "atom": 938, "min": 0, "max": 1, "tag": "Maybe" @@ -5884,17 +6259,17 @@ }, { "Entity": { - "atom": 1100 + "atom": 1157 } }, { "Entity": { - "atom": 1099 + "atom": 1156 } }, { "Entity": { - "atom": 1098 + "atom": 1155 } }, { @@ -5904,7 +6279,7 @@ }, { "Repetition": { - "atom": 886, + "atom": 943, "min": 0, "max": 1, "tag": "Maybe" @@ -5912,7 +6287,7 @@ }, { "Entity": { - "atom": 892 + "atom": 949 } }, { @@ -5927,7 +6302,7 @@ }, { "Repetition": { - "atom": 890, + "atom": 947, "min": 1, "max": null, "tag": "Repetition" @@ -5936,8 +6311,8 @@ { "Sequence": { "atoms": [ - 889, - 891 + 946, + 948 ] } }, @@ -5949,12 +6324,12 @@ { "Named": { "name": "name", - "atom": 893 + "atom": 950 } }, { "Entity": { - "atom": 901 + "atom": 958 } }, { @@ -5975,15 +6350,15 @@ { "Sequence": { "atoms": [ - 897, + 954, 36, - 898 + 955 ] } }, { "Repetition": { - "atom": 899, + "atom": 956, "min": 0, "max": null, "tag": "Repetition" @@ -5993,21 +6368,21 @@ "Sequence": { "atoms": [ 36, - 896, + 953, 36, - 900 + 957 ] } }, { "Named": { "name": "instance_type", - "atom": 895 + "atom": 952 } }, { "Repetition": { - "atom": 902, + "atom": 959, "min": 0, "max": 1, "tag": "Maybe" @@ -6022,7 +6397,7 @@ "Sequence": { "atoms": [ 36, - 904 + 961 ] } }, @@ -6033,7 +6408,7 @@ }, { "Repetition": { - "atom": 906, + "atom": 963, "min": 0, "max": 1, "tag": "Maybe" @@ -6041,12 +6416,12 @@ }, { "Entity": { - "atom": 1090 + "atom": 1147 } }, { "Entity": { - "atom": 1089 + "atom": 1146 } }, { @@ -6056,7 +6431,7 @@ }, { "Repetition": { - "atom": 910, + "atom": 967, "min": 0, "max": 1, "tag": "Maybe" @@ -6071,24 +6446,24 @@ "Sequence": { "atoms": [ 36, - 912 + 969 ] } }, { "Entity": { - "atom": 901 + "atom": 958 } }, { "Named": { "name": "instance_type", - "atom": 914 + "atom": 971 } }, { "Repetition": { - "atom": 915, + "atom": 972, "min": 0, "max": 1, "tag": "Maybe" @@ -6103,7 +6478,7 @@ "Sequence": { "atoms": [ 36, - 917 + 974 ] } }, @@ -6114,7 +6489,7 @@ }, { "Repetition": { - "atom": 919, + "atom": 976, "min": 0, "max": 1, "tag": "Maybe" @@ -6122,7 +6497,7 @@ }, { "Entity": { - "atom": 933 + "atom": 990 } }, { @@ -6132,7 +6507,7 @@ }, { "Repetition": { - "atom": 922, + "atom": 979, "min": 0, "max": 1, "tag": "Maybe" @@ -6140,7 +6515,7 @@ }, { "Entity": { - "atom": 928 + "atom": 985 } }, { @@ -6155,7 +6530,7 @@ }, { "Repetition": { - "atom": 926, + "atom": 983, "min": 1, "max": null, "tag": "Repetition" @@ -6164,20 +6539,20 @@ { "Sequence": { "atoms": [ - 925, - 927 + 982, + 984 ] } }, { "Entity": { - "atom": 901 + "atom": 958 } }, { "Named": { "name": "isa", - "atom": 929 + "atom": 986 } }, { @@ -6187,7 +6562,7 @@ }, { "Repetition": { - "atom": 931, + "atom": 988, "min": 0, "max": 1, "tag": "Maybe" @@ -6197,19 +6572,19 @@ "Sequence": { "atoms": [ 36, - 923, + 980, 36, - 924, + 981, 36, - 930, + 987, 36, - 932 + 989 ] } }, { "Repetition": { - "atom": 921, + "atom": 978, "min": 0, "max": 1, "tag": "Maybe" @@ -6217,12 +6592,12 @@ }, { "Entity": { - "atom": 1080 + "atom": 1137 } }, { "Entity": { - "atom": 1079 + "atom": 1136 } }, { @@ -6233,7 +6608,7 @@ { "Named": { "name": "instance_type", - "atom": 937 + "atom": 994 } }, { @@ -6243,7 +6618,7 @@ }, { "Repetition": { - "atom": 939, + "atom": 996, "min": 0, "max": 1, "tag": "Maybe" @@ -6257,7 +6632,7 @@ { "Named": { "name": "name", - "atom": 941 + "atom": 998 } }, { @@ -6267,7 +6642,7 @@ }, { "Repetition": { - "atom": 943, + "atom": 1000, "min": 0, "max": 1, "tag": "Maybe" @@ -6280,7 +6655,7 @@ }, { "Repetition": { - "atom": 945, + "atom": 1002, "min": 0, "max": 1, "tag": "Maybe" @@ -6298,7 +6673,7 @@ }, { "Repetition": { - "atom": 948, + "atom": 1005, "min": 0, "max": 1, "tag": "Maybe" @@ -6312,7 +6687,7 @@ { "Named": { "name": "parent", - "atom": 950 + "atom": 1007 } }, { @@ -6322,7 +6697,7 @@ }, { "Repetition": { - "atom": 952, + "atom": 1009, "min": 0, "max": 1, "tag": "Maybe" @@ -6331,17 +6706,17 @@ { "Sequence": { "atoms": [ - 946, - 947, - 949, - 951, - 953 + 1003, + 1004, + 1006, + 1008, + 1010 ] } }, { "Repetition": { - "atom": 954, + "atom": 1011, "min": 0, "max": 1, "tag": "Maybe" @@ -6356,7 +6731,7 @@ "Sequence": { "atoms": [ 36, - 956 + 1013 ] } }, @@ -6367,7 +6742,7 @@ }, { "Repetition": { - "atom": 958, + "atom": 1015, "min": 0, "max": 1, "tag": "Maybe" @@ -6375,17 +6750,17 @@ }, { "Entity": { - "atom": 1071 + "atom": 1128 } }, { "Entity": { - "atom": 1068 + "atom": 1125 } }, { "Entity": { - "atom": 1065 + "atom": 1122 } }, { @@ -6395,7 +6770,7 @@ }, { "Repetition": { - "atom": 963, + "atom": 1020, "min": 0, "max": 1, "tag": "Maybe" @@ -6410,7 +6785,7 @@ "Sequence": { "atoms": [ 36, - 965 + 1022 ] } }, @@ -6421,7 +6796,7 @@ }, { "Repetition": { - "atom": 967, + "atom": 1024, "min": 0, "max": 1, "tag": "Maybe" @@ -6436,7 +6811,7 @@ "Sequence": { "atoms": [ 36, - 969 + 1026 ] } }, @@ -6447,7 +6822,7 @@ }, { "Repetition": { - "atom": 971, + "atom": 1028, "min": 0, "max": 1, "tag": "Maybe" @@ -6455,32 +6830,32 @@ }, { "Entity": { - "atom": 1060 + "atom": 1117 } }, { "Entity": { - "atom": 529 + "atom": 586 } }, { "Entity": { - "atom": 543 + "atom": 600 } }, { "Entity": { - "atom": 1056 + "atom": 1113 } }, { "Entity": { - "atom": 1050 + "atom": 1107 } }, { "Entity": { - "atom": 990 + "atom": 1047 } }, { @@ -6492,7 +6867,7 @@ "Sequence": { "atoms": [ 36, - 979 + 1036 ] } }, @@ -6505,15 +6880,15 @@ "Sequence": { "atoms": [ 36, - 981 + 1038 ] } }, { "Alternative": { "atoms": [ - 980, - 982 + 1037, + 1039 ] } }, @@ -6524,7 +6899,7 @@ }, { "Lookahead": { - "atom": 984, + "atom": 1041, "positive": false } }, @@ -6536,14 +6911,14 @@ { "Sequence": { "atoms": [ - 985, - 986 + 1042, + 1043 ] } }, { "Repetition": { - "atom": 987, + "atom": 1044, "min": 0, "max": null, "tag": "Repetition" @@ -6552,16 +6927,16 @@ { "Named": { "name": "comments", - "atom": 988 + "atom": 1045 } }, { "Sequence": { "atoms": [ 36, - 983, + 1040, 36, - 989 + 1046 ] } }, @@ -6573,7 +6948,7 @@ { "Named": { "name": "key", - "atom": 991 + "atom": 1048 } }, { @@ -6584,12 +6959,12 @@ { "Named": { "name": "add", - "atom": 993 + "atom": 1050 } }, { "Repetition": { - "atom": 994, + "atom": 1051, "min": 0, "max": 1, "tag": "Maybe" @@ -6602,7 +6977,7 @@ }, { "Repetition": { - "atom": 996, + "atom": 1053, "min": 0, "max": 1, "tag": "Maybe" @@ -6610,12 +6985,12 @@ }, { "Entity": { - "atom": 1047 + "atom": 1104 } }, { "Entity": { - "atom": 1020 + "atom": 1077 } }, { @@ -6627,7 +7002,7 @@ "Sequence": { "atoms": [ 36, - 1000 + 1057 ] } }, @@ -6638,7 +7013,7 @@ }, { "Repetition": { - "atom": 1002, + "atom": 1059, "min": 0, "max": 1, "tag": "Maybe" @@ -6646,33 +7021,33 @@ }, { "Entity": { - "atom": 1008 + "atom": 1065 } }, { "Entity": { - "atom": 1006 + "atom": 1063 } }, { "Alternative": { "atoms": [ - 885, - 909, - 936 + 942, + 966, + 993 ] } }, { "Entity": { - "atom": 825 + "atom": 882 } }, { "Alternative": { "atoms": [ - 1005, - 1007 + 1062, + 1064 ] } }, @@ -6683,7 +7058,7 @@ }, { "Repetition": { - "atom": 1009, + "atom": 1066, "min": 0, "max": 1, "tag": "Maybe" @@ -6696,7 +7071,7 @@ }, { "Repetition": { - "atom": 1011, + "atom": 1068, "min": 0, "max": 1, "tag": "Maybe" @@ -6706,15 +7081,15 @@ "Sequence": { "atoms": [ 36, - 1004, - 1010, - 1012 + 1061, + 1067, + 1069 ] } }, { "Repetition": { - "atom": 1013, + "atom": 1070, "min": 0, "max": null, "tag": "Repetition" @@ -6723,7 +7098,7 @@ { "Named": { "name": "list", - "atom": 1014 + "atom": 1071 } }, { @@ -6733,7 +7108,7 @@ }, { "Repetition": { - "atom": 1016, + "atom": 1073, "min": 0, "max": 1, "tag": "Maybe" @@ -6748,7 +7123,7 @@ "Sequence": { "atoms": [ 36, - 1018 + 1075 ] } }, @@ -6756,21 +7131,21 @@ "Sequence": { "atoms": [ 36, - 1001, + 1058, 36, - 1003, + 1060, 36, - 1015, + 1072, 36, - 1017, + 1074, 36, - 1019 + 1076 ] } }, { "Entity": { - "atom": 1040 + "atom": 1097 } }, { @@ -6782,7 +7157,7 @@ "Sequence": { "atoms": [ 36, - 1022 + 1079 ] } }, @@ -6793,7 +7168,7 @@ }, { "Repetition": { - "atom": 1024, + "atom": 1081, "min": 0, "max": 1, "tag": "Maybe" @@ -6801,7 +7176,7 @@ }, { "Entity": { - "atom": 1033 + "atom": 1090 } }, { @@ -6812,7 +7187,7 @@ { "Named": { "name": "key", - "atom": 1027 + "atom": 1084 } }, { @@ -6822,7 +7197,7 @@ }, { "Repetition": { - "atom": 1029, + "atom": 1086, "min": 0, "max": 1, "tag": "Maybe" @@ -6830,24 +7205,24 @@ }, { "Entity": { - "atom": 825 + "atom": 882 } }, { "Named": { "name": "value", - "atom": 1031 + "atom": 1088 } }, { "Sequence": { "atoms": [ 36, - 1028, + 1085, 36, - 1030, + 1087, 36, - 1032 + 1089 ] } }, @@ -6860,15 +7235,15 @@ "Sequence": { "atoms": [ 36, - 1026, + 1083, 36, - 1034 + 1091 ] } }, { "Repetition": { - "atom": 1035, + "atom": 1092, "min": 0, "max": null, "tag": "Repetition" @@ -6877,7 +7252,7 @@ { "Named": { "name": "key_value_map", - "atom": 1036 + "atom": 1093 } }, { @@ -6889,7 +7264,7 @@ "Sequence": { "atoms": [ 36, - 1038 + 1095 ] } }, @@ -6897,19 +7272,19 @@ "Sequence": { "atoms": [ 36, - 1023, + 1080, 36, - 1025, + 1082, 36, - 1037, + 1094, 36, - 1039 + 1096 ] } }, { "Entity": { - "atom": 825 + "atom": 882 } }, { @@ -6919,7 +7294,7 @@ }, { "Lookahead": { - "atom": 1042, + "atom": 1099, "positive": false } }, @@ -6931,14 +7306,14 @@ { "Sequence": { "atoms": [ - 1043, - 1044 + 1100, + 1101 ] } }, { "Repetition": { - "atom": 1045, + "atom": 1102, "min": 1, "max": null, "tag": "Repetition" @@ -6947,39 +7322,39 @@ { "Alternative": { "atoms": [ - 884, - 999, - 1021, - 1041, - 1046 + 941, + 1056, + 1078, + 1098, + 1103 ] } }, { "Named": { "name": "value", - "atom": 998 + "atom": 1055 } }, { "Sequence": { "atoms": [ 36, - 992, + 1049, 36, - 995, + 1052, 36, - 997, + 1054, 36, - 1048 + 1105 ] } }, { "Alternative": { "atoms": [ - 978, - 1049 + 1035, + 1106 ] } }, @@ -6990,7 +7365,7 @@ }, { "Repetition": { - "atom": 1051, + "atom": 1108, "min": 0, "max": 1, "tag": "Maybe" @@ -7004,15 +7379,15 @@ { "Sequence": { "atoms": [ - 1052, + 1109, 36, - 1053 + 1110 ] } }, { "Repetition": { - "atom": 1054, + "atom": 1111, "min": 0, "max": 1, "tag": "Maybe" @@ -7022,9 +7397,9 @@ "Sequence": { "atoms": [ 36, - 977, + 1034, 36, - 1055 + 1112 ] } }, @@ -7036,16 +7411,16 @@ { "Alternative": { "atoms": [ - 974, - 975, - 976, - 1057 + 1031, + 1032, + 1033, + 1114 ] } }, { "Repetition": { - "atom": 1058, + "atom": 1115, "min": 0, "max": null, "tag": "Repetition" @@ -7054,7 +7429,7 @@ { "Named": { "name": "attributes", - "atom": 1059 + "atom": 1116 } }, { @@ -7064,7 +7439,7 @@ }, { "Repetition": { - "atom": 1061, + "atom": 1118, "min": 0, "max": 1, "tag": "Maybe" @@ -7079,7 +7454,7 @@ "Sequence": { "atoms": [ 36, - 1063 + 1120 ] } }, @@ -7087,40 +7462,40 @@ "Sequence": { "atoms": [ 36, - 964, + 1021, 36, - 966, + 1023, 36, - 968, + 1025, 36, - 970, + 1027, 36, - 972, + 1029, 36, - 973, + 1030, 36, - 1062, + 1119, 36, - 1064 + 1121 ] } }, { "Named": { "name": "template", - "atom": 962 + "atom": 1019 } }, { "Entity": { - "atom": 1060 + "atom": 1117 } }, { "Alternative": { "atoms": [ - 1066, - 1067 + 1123, + 1124 ] } }, @@ -7131,7 +7506,7 @@ }, { "Repetition": { - "atom": 1069, + "atom": 1126, "min": 0, "max": 1, "tag": "Maybe" @@ -7141,15 +7516,15 @@ "Sequence": { "atoms": [ 36, - 961, + 1018, 36, - 1070 + 1127 ] } }, { "Repetition": { - "atom": 960, + "atom": 1017, "min": 0, "max": 1, "tag": "Maybe" @@ -7164,7 +7539,7 @@ "Sequence": { "atoms": [ 36, - 1073 + 1130 ] } }, @@ -7172,30 +7547,30 @@ "Sequence": { "atoms": [ 36, - 938, + 995, 36, - 940, + 997, 36, - 942, + 999, 36, - 944, + 1001, 36, - 955, + 1012, 36, - 957, + 1014, 36, - 959, + 1016, 36, - 1072, + 1129, 36, - 1074 + 1131 ] } }, { "Named": { "name": "instance", - "atom": 1075 + "atom": 1132 } }, { @@ -7205,7 +7580,7 @@ }, { "Repetition": { - "atom": 1077, + "atom": 1134, "min": 0, "max": 1, "tag": "Maybe" @@ -7215,31 +7590,31 @@ "Sequence": { "atoms": [ 36, - 1076, + 1133, 36, - 1078 + 1135 ] } }, { "Alternative": { "atoms": [ - 885, - 909, - 936 + 942, + 966, + 993 ] } }, { "Entity": { - "atom": 1060 + "atom": 1117 } }, { "Alternative": { "atoms": [ - 935, - 1081 + 992, + 1138 ] } }, @@ -7252,7 +7627,7 @@ "Sequence": { "atoms": [ 36, - 1083 + 1140 ] } }, @@ -7260,28 +7635,28 @@ "Sequence": { "atoms": [ 36, - 911, + 968, 36, - 913, + 970, 36, - 916, + 973, 36, - 918, + 975, 36, - 920, + 977, 36, - 934, + 991, 36, - 1082, + 1139, 36, - 1084 + 1141 ] } }, { "Named": { "name": "instance", - "atom": 1085 + "atom": 1142 } }, { @@ -7291,7 +7666,7 @@ }, { "Repetition": { - "atom": 1087, + "atom": 1144, "min": 0, "max": 1, "tag": "Maybe" @@ -7301,31 +7676,31 @@ "Sequence": { "atoms": [ 36, - 1086, + 1143, 36, - 1088 + 1145 ] } }, { "Alternative": { "atoms": [ - 885, - 909, - 936 + 942, + 966, + 993 ] } }, { "Entity": { - "atom": 1060 + "atom": 1117 } }, { "Alternative": { "atoms": [ - 908, - 1091 + 965, + 1148 ] } }, @@ -7338,7 +7713,7 @@ "Sequence": { "atoms": [ 36, - 1093 + 1150 ] } }, @@ -7349,7 +7724,7 @@ }, { "Repetition": { - "atom": 1095, + "atom": 1152, "min": 0, "max": 1, "tag": "Maybe" @@ -7359,56 +7734,56 @@ "Sequence": { "atoms": [ 36, - 887, + 944, 36, - 888, + 945, 36, - 894, + 951, 36, - 903, + 960, 36, - 905, + 962, 36, - 907, + 964, 36, - 1092, + 1149, 36, - 1094, + 1151, 36, - 1096 + 1153 ] } }, { "Named": { "name": "instance", - "atom": 1097 + "atom": 1154 } }, { "Alternative": { "atoms": [ - 885, - 909, - 936 + 942, + 966, + 993 ] } }, { "Alternative": { "atoms": [ - 884, - 999, - 1021, - 1041, - 1046 + 941, + 1056, + 1078, + 1098, + 1103 ] } }, { "Named": { "name": "value", - "atom": 883 + "atom": 940 } }, { @@ -7418,7 +7793,7 @@ }, { "Repetition": { - "atom": 1102, + "atom": 1159, "min": 0, "max": 1, "tag": "Maybe" @@ -7428,36 +7803,36 @@ "Sequence": { "atoms": [ 36, - 878, + 935, 36, - 882, + 939, 36, - 1101, + 1158, 36, - 1103 + 1160 ] } }, { "Named": { "name": "properties", - "atom": 869 + "atom": 926 } }, { "Alternative": { "atoms": [ - 762, - 771, - 779, - 846, - 1105 + 819, + 828, + 836, + 903, + 1162 ] } }, { "Repetition": { - "atom": 1106, + "atom": 1163, "min": 0, "max": null, "tag": "Repetition" @@ -7470,7 +7845,7 @@ }, { "Repetition": { - "atom": 1108, + "atom": 1165, "min": 0, "max": 1, "tag": "Maybe" @@ -7484,18 +7859,18 @@ { "Sequence": { "atoms": [ - 758, - 760, + 815, + 817, 36, - 761, - 1109, - 1110 + 818, + 1166, + 1167 ] } }, { "Repetition": { - "atom": 1111, + "atom": 1168, "min": 0, "max": 1, "tag": "Maybe" @@ -7508,7 +7883,7 @@ }, { "Repetition": { - "atom": 1113, + "atom": 1170, "min": 0, "max": 1, "tag": "Maybe" @@ -7518,52 +7893,52 @@ "Sequence": { "atoms": [ 36, - 747, + 804, 36, - 748, + 805, 36, - 753, + 810, 36, - 755, + 812, 36, - 757, + 814, 36, - 1112, + 1169, 36, - 1114 + 1171 ] } }, { "Named": { "name": "attributes", - "atom": 1115 + "atom": 1172 } }, { "Entity": { - "atom": 752 + "atom": 809 } }, { "Lookahead": { - "atom": 1117, + "atom": 1174, "positive": false } }, { "Entity": { - "atom": 1164 + "atom": 1221 } }, { "Entity": { - "atom": 626 + "atom": 683 } }, { "Repetition": { - "atom": 1120, + "atom": 1177, "min": 0, "max": 1, "tag": "Maybe" @@ -7572,17 +7947,17 @@ { "Named": { "name": "visibility", - "atom": 1121 + "atom": 1178 } }, { "Entity": { - "atom": 1139 + "atom": 1196 } }, { "Entity": { - "atom": 583 + "atom": 640 } }, { @@ -7628,20 +8003,20 @@ { "Alternative": { "atoms": [ - 1125, - 1126, - 1127, - 1128, - 1129, - 1130, - 1131, - 1132 + 1182, + 1183, + 1184, + 1185, + 1186, + 1187, + 1188, + 1189 ] } }, { "Repetition": { - "atom": 1133, + "atom": 1190, "min": 1, "max": null, "tag": "Repetition" @@ -7650,42 +8025,42 @@ { "Named": { "name": "name", - "atom": 1134 + "atom": 1191 } }, { "Entity": { - "atom": 583 + "atom": 640 } }, { "Sequence": { "atoms": [ 36, - 1124, + 1181, 36, - 1135, + 1192, 36, - 1136 + 1193 ] } }, { "Entity": { - "atom": 575 + "atom": 632 } }, { "Alternative": { "atoms": [ - 1137, - 1138 + 1194, + 1195 ] } }, { "Entity": { - "atom": 1152 + "atom": 1209 } }, { @@ -7695,7 +8070,7 @@ }, { "Repetition": { - "atom": 1141, + "atom": 1198, "min": 0, "max": 1, "tag": "Maybe" @@ -7703,12 +8078,12 @@ }, { "Entity": { - "atom": 493 + "atom": 520 } }, { "Repetition": { - "atom": 1143, + "atom": 1200, "min": 0, "max": 1, "tag": "Maybe" @@ -7716,18 +8091,18 @@ }, { "Entity": { - "atom": 583 + "atom": 640 } }, { "Named": { "name": "type_literal", - "atom": 1145 + "atom": 1202 } }, { "Repetition": { - "atom": 1146, + "atom": 1203, "min": 0, "max": 1, "tag": "Maybe" @@ -7735,23 +8110,23 @@ }, { "Entity": { - "atom": 602 + "atom": 659 } }, { "Named": { "name": "type", - "atom": 1148 + "atom": 1205 } }, { "Entity": { - "atom": 583 + "atom": 640 } }, { "Repetition": { - "atom": 1150, + "atom": 1207, "min": 0, "max": 1, "tag": "Maybe" @@ -7761,21 +8136,21 @@ "Sequence": { "atoms": [ 36, - 1142, + 1199, 36, - 1144, + 1201, 36, - 1147, + 1204, 36, - 1149, + 1206, 36, - 1151 + 1208 ] } }, { "Repetition": { - "atom": 1140, + "atom": 1197, "min": 0, "max": 1, "tag": "Maybe" @@ -7783,12 +8158,12 @@ }, { "Entity": { - "atom": 715 + "atom": 772 } }, { "Repetition": { - "atom": 1154, + "atom": 1211, "min": 0, "max": 1, "tag": "Maybe" @@ -7796,12 +8171,12 @@ }, { "Entity": { - "atom": 1161 + "atom": 1218 } }, { "Repetition": { - "atom": 500, + "atom": 527, "min": 0, "max": null, "tag": "Repetition" @@ -7810,7 +8185,7 @@ { "Named": { "name": "members", - "atom": 1157 + "atom": 1214 } }, { @@ -7822,7 +8197,7 @@ "Sequence": { "atoms": [ 36, - 1159 + 1216 ] } }, @@ -7830,19 +8205,19 @@ "Sequence": { "atoms": [ 36, - 497, + 524, 36, - 499, + 526, 36, - 1158, + 1215, 36, - 1160 + 1217 ] } }, { "Repetition": { - "atom": 1156, + "atom": 1213, "min": 0, "max": 1, "tag": "Maybe" @@ -7852,52 +8227,52 @@ "Sequence": { "atoms": [ 36, - 1122, + 1179, 36, - 1123, + 1180, 36, - 1153, + 1210, 36, - 1155, + 1212, 36, - 1162 + 1219 ] } }, { "Named": { "name": "attributes", - "atom": 1163 + "atom": 1220 } }, { "Sequence": { "atoms": [ 36, - 1118, + 1175, 36, - 1119 + 1176 ] } }, { "Entity": { - "atom": 1181 + "atom": 1238 } }, { "Entity": { - "atom": 752 + "atom": 809 } }, { "Entity": { - "atom": 575 + "atom": 632 } }, { "Entity": { - "atom": 1179 + "atom": 1236 } }, { @@ -7909,7 +8284,7 @@ "Sequence": { "atoms": [ 36, - 1170 + 1227 ] } }, @@ -7920,7 +8295,7 @@ }, { "Repetition": { - "atom": 1172, + "atom": 1229, "min": 0, "max": 1, "tag": "Maybe" @@ -7928,7 +8303,7 @@ }, { "Entity": { - "atom": 1107 + "atom": 1164 } }, { @@ -7938,7 +8313,7 @@ }, { "Repetition": { - "atom": 1175, + "atom": 1232, "min": 0, "max": 1, "tag": "Maybe" @@ -7953,7 +8328,7 @@ "Sequence": { "atoms": [ 36, - 1177 + 1234 ] } }, @@ -7961,15 +8336,15 @@ "Sequence": { "atoms": [ 36, - 1171, + 1228, 36, - 1173, + 1230, 36, - 1174, + 1231, 36, - 1176, + 1233, 36, - 1178 + 1235 ] } }, @@ -7977,28 +8352,28 @@ "Sequence": { "atoms": [ 36, - 1167, + 1224, 36, - 1168, + 1225, 36, - 1169 + 1226 ] } }, { "Named": { "name": "attributes", - "atom": 1180 + "atom": 1237 } }, { "Entity": { - "atom": 990 + "atom": 1047 } }, { "Entity": { - "atom": 1196 + "atom": 1253 } }, { @@ -8010,7 +8385,7 @@ "Sequence": { "atoms": [ 36, - 1184 + 1241 ] } }, @@ -8021,7 +8396,7 @@ }, { "Lookahead": { - "atom": 1186, + "atom": 1243, "positive": false } }, @@ -8033,14 +8408,14 @@ { "Sequence": { "atoms": [ - 1187, - 1188 + 1244, + 1245 ] } }, { "Repetition": { - "atom": 1189, + "atom": 1246, "min": 0, "max": null, "tag": "Repetition" @@ -8049,7 +8424,7 @@ { "Named": { "name": "comments", - "atom": 1190 + "atom": 1247 } }, { @@ -8059,7 +8434,7 @@ }, { "Repetition": { - "atom": 1192, + "atom": 1249, "min": 0, "max": 1, "tag": "Maybe" @@ -8074,7 +8449,7 @@ "Sequence": { "atoms": [ 36, - 1194 + 1251 ] } }, @@ -8082,30 +8457,32 @@ "Sequence": { "atoms": [ 36, - 1185, + 1242, 36, - 1191, + 1248, 36, - 1193, + 1250, 36, - 1195 + 1252 ] } }, { "Alternative": { "atoms": [ - 502, - 530, - 544, - 556, - 611, - 744, - 745, - 1165, - 1166, - 1182, - 1183 + 529, + 546, + 559, + 587, + 601, + 613, + 668, + 801, + 802, + 1222, + 1223, + 1239, + 1240 ] } }, @@ -8116,7 +8493,7 @@ }, { "Repetition": { - "atom": 1198, + "atom": 1255, "min": 0, "max": 1, "tag": "Maybe" @@ -8126,15 +8503,15 @@ "Sequence": { "atoms": [ 36, - 501, + 528, 36, - 1199 + 1256 ] } }, { "Repetition": { - "atom": 500, + "atom": 527, "min": 0, "max": null, "tag": "Repetition" @@ -8143,26 +8520,26 @@ { "Named": { "name": "members", - "atom": 1201 + "atom": 1258 } }, { "Sequence": { "atoms": [ 36, - 497, + 524, 36, - 499, + 526, 36, - 1202, + 1259, 36, - 1160 + 1217 ] } }, { "Repetition": { - "atom": 495, + "atom": 522, "min": 0, "max": 1, "tag": "Maybe" @@ -8172,21 +8549,21 @@ "Sequence": { "atoms": [ 36, - 432, + 463, 36, - 433, + 464, 36, - 447, + 478, 36, - 448, + 479, 36, - 471, + 498, 36, - 478, + 505, 36, - 494, + 521, 36, - 1204 + 1261 ] } }, @@ -8198,7 +8575,7 @@ }, { "Entity": { - "atom": 1367 + "atom": 1422 } }, { @@ -8208,7 +8585,7 @@ }, { "Repetition": { - "atom": 1208, + "atom": 1265, "min": 0, "max": 1, "tag": "Maybe" @@ -8216,12 +8593,12 @@ }, { "Entity": { - "atom": 431 + "atom": 462 } }, { "Repetition": { - "atom": 1210, + "atom": 1267, "min": 0, "max": 1, "tag": "Maybe" @@ -8229,43 +8606,17 @@ }, { "Entity": { - "atom": 1216 - } - }, - { - "Str": { - "pattern": "enum" - } - }, - { - "Str": { - "pattern": " " - } - }, - { - "Repetition": { - "atom": 1214, - "min": 1, - "max": null, - "tag": "Repetition" - } - }, - { - "Sequence": { - "atoms": [ - 1213, - 1215 - ] + "atom": 438 } }, { "Entity": { - "atom": 583 + "atom": 640 } }, { "Repetition": { - "atom": 1217, + "atom": 1270, "min": 0, "max": 1, "tag": "Maybe" @@ -8273,23 +8624,23 @@ }, { "Entity": { - "atom": 470 + "atom": 497 } }, { "Named": { "name": "name", - "atom": 1219 + "atom": 1272 } }, { "Entity": { - "atom": 583 + "atom": 640 } }, { "Repetition": { - "atom": 1221, + "atom": 1274, "min": 0, "max": 1, "tag": "Maybe" @@ -8297,12 +8648,12 @@ }, { "Entity": { - "atom": 493 + "atom": 520 } }, { "Repetition": { - "atom": 1223, + "atom": 1276, "min": 0, "max": 1, "tag": "Maybe" @@ -8310,7 +8661,7 @@ }, { "Entity": { - "atom": 1365 + "atom": 1420 } }, { @@ -8322,46 +8673,56 @@ "Sequence": { "atoms": [ 36, - 1226 + 1279 ] } }, { "Entity": { - "atom": 53 + "atom": 53 + } + }, + { + "Repetition": { + "atom": 1281, + "min": 0, + "max": 1, + "tag": "Maybe" + } + }, + { + "Entity": { + "atom": 1415 } }, { - "Repetition": { - "atom": 1228, - "min": 0, - "max": 1, - "tag": "Maybe" + "Entity": { + "atom": 1412 } }, { "Entity": { - "atom": 1360 + "atom": 545 } }, { "Entity": { - "atom": 1357 + "atom": 558 } }, { "Entity": { - "atom": 529 + "atom": 586 } }, { "Entity": { - "atom": 543 + "atom": 600 } }, { "Entity": { - "atom": 1260 + "atom": 1315 } }, { @@ -8371,7 +8732,7 @@ }, { "Repetition": { - "atom": 1235, + "atom": 1290, "min": 0, "max": 1, "tag": "Maybe" @@ -8386,7 +8747,7 @@ "Sequence": { "atoms": [ 36, - 1237 + 1292 ] } }, @@ -8397,7 +8758,7 @@ }, { "Repetition": { - "atom": 1239, + "atom": 1294, "min": 0, "max": 1, "tag": "Maybe" @@ -8412,7 +8773,7 @@ "Sequence": { "atoms": [ 36, - 1241 + 1296 ] } }, @@ -8423,7 +8784,7 @@ }, { "Repetition": { - "atom": 1243, + "atom": 1298, "min": 0, "max": 1, "tag": "Maybe" @@ -8431,12 +8792,12 @@ }, { "Entity": { - "atom": 1252 + "atom": 1307 } }, { "Entity": { - "atom": 575 + "atom": 632 } }, { @@ -8446,7 +8807,7 @@ }, { "Repetition": { - "atom": 1247, + "atom": 1302, "min": 1, "max": null, "tag": "Repetition" @@ -8455,7 +8816,7 @@ { "Named": { "name": "member_field_type", - "atom": 1248 + "atom": 1303 } }, { @@ -8465,7 +8826,7 @@ }, { "Repetition": { - "atom": 1250, + "atom": 1305, "min": 0, "max": 1, "tag": "Maybe" @@ -8475,17 +8836,17 @@ "Sequence": { "atoms": [ 36, - 1246, + 1301, 36, - 1249, + 1304, 36, - 1251 + 1306 ] } }, { "Repetition": { - "atom": 1245, + "atom": 1300, "min": 0, "max": null, "tag": "Repetition" @@ -8494,7 +8855,7 @@ { "Named": { "name": "member_fields", - "atom": 1253 + "atom": 1308 } }, { @@ -8504,7 +8865,7 @@ }, { "Repetition": { - "atom": 1255, + "atom": 1310, "min": 0, "max": 1, "tag": "Maybe" @@ -8519,7 +8880,7 @@ "Sequence": { "atoms": [ 36, - 1257 + 1312 ] } }, @@ -8527,33 +8888,33 @@ "Sequence": { "atoms": [ 36, - 1236, + 1291, 36, - 1238, + 1293, 36, - 1240, + 1295, 36, - 1242, + 1297, 36, - 1244, + 1299, 36, - 1254, + 1309, 36, - 1256, + 1311, 36, - 1258 + 1313 ] } }, { "Named": { "name": "member_fields_decl", - "atom": 1259 + "atom": 1314 } }, { "Entity": { - "atom": 1295 + "atom": 1350 } }, { @@ -8563,7 +8924,7 @@ }, { "Repetition": { - "atom": 1262, + "atom": 1317, "min": 0, "max": 1, "tag": "Maybe" @@ -8578,13 +8939,13 @@ "Sequence": { "atoms": [ 36, - 1264 + 1319 ] } }, { "Entity": { - "atom": 1273 + "atom": 1328 } }, { @@ -8610,15 +8971,15 @@ { "Alternative": { "atoms": [ - 1268, - 1269, - 1270 + 1323, + 1324, + 1325 ] } }, { "Repetition": { - "atom": 1271, + "atom": 1326, "min": 1, "max": null, "tag": "Repetition" @@ -8627,15 +8988,15 @@ { "Alternative": { "atoms": [ - 1267, - 1272 + 1322, + 1327 ] } }, { "Named": { "name": "from_table_name", - "atom": 1266 + "atom": 1321 } }, { @@ -8650,7 +9011,7 @@ }, { "Repetition": { - "atom": 1276, + "atom": 1331, "min": 0, "max": 1, "tag": "Maybe" @@ -8658,7 +9019,7 @@ }, { "Entity": { - "atom": 1282 + "atom": 1337 } }, { @@ -8673,7 +9034,7 @@ }, { "Repetition": { - "atom": 1280, + "atom": 1335, "min": 1, "max": null, "tag": "Repetition" @@ -8682,20 +9043,20 @@ { "Sequence": { "atoms": [ - 1279, - 1281 + 1334, + 1336 ] } }, { "Entity": { - "atom": 1273 + "atom": 1328 } }, { "Named": { "name": "artifact_table", - "atom": 1283 + "atom": 1338 } }, { @@ -8705,7 +9066,7 @@ }, { "Repetition": { - "atom": 1285, + "atom": 1340, "min": 0, "max": 1, "tag": "Maybe" @@ -8714,15 +9075,15 @@ { "Sequence": { "atoms": [ - 1278, - 1284, - 1286 + 1333, + 1339, + 1341 ] } }, { "Repetition": { - "atom": 1287, + "atom": 1342, "min": 0, "max": null, "tag": "Repetition" @@ -8736,16 +9097,16 @@ { "Sequence": { "atoms": [ - 1275, - 1277, - 1288, - 1289 + 1330, + 1332, + 1343, + 1344 ] } }, { "Repetition": { - "atom": 1290, + "atom": 1345, "min": 0, "max": 1, "tag": "Maybe" @@ -8758,7 +9119,7 @@ }, { "Repetition": { - "atom": 1292, + "atom": 1347, "min": 0, "max": 1, "tag": "Maybe" @@ -8768,27 +9129,27 @@ "Sequence": { "atoms": [ 36, - 1263, + 1318, 36, - 1265, + 1320, 36, - 1274, + 1329, 36, - 1291, + 1346, 36, - 1293 + 1348 ] } }, { "Named": { "name": "from_table_decl", - "atom": 1294 + "atom": 1349 } }, { "Entity": { - "atom": 1304 + "atom": 1359 } }, { @@ -8798,7 +9159,7 @@ }, { "Repetition": { - "atom": 1297, + "atom": 1352, "min": 0, "max": 1, "tag": "Maybe" @@ -8806,12 +9167,12 @@ }, { "Entity": { - "atom": 784 + "atom": 841 } }, { "Entity": { - "atom": 838 + "atom": 895 } }, { @@ -8821,7 +9182,7 @@ }, { "Repetition": { - "atom": 1301, + "atom": 1356, "min": 0, "max": 1, "tag": "Maybe" @@ -8831,25 +9192,25 @@ "Sequence": { "atoms": [ 36, - 1298, + 1353, 36, - 1299, + 1354, 36, - 1300, + 1355, 36, - 1302 + 1357 ] } }, { "Named": { "name": "value_set_decl", - "atom": 1303 + "atom": 1358 } }, { "Entity": { - "atom": 1343 + "atom": 1398 } }, { @@ -8859,7 +9220,7 @@ }, { "Repetition": { - "atom": 1306, + "atom": 1361, "min": 0, "max": 1, "tag": "Maybe" @@ -8867,7 +9228,7 @@ }, { "Entity": { - "atom": 1312 + "atom": 1367 } }, { @@ -8882,7 +9243,7 @@ }, { "Repetition": { - "atom": 1310, + "atom": 1365, "min": 1, "max": null, "tag": "Repetition" @@ -8891,14 +9252,14 @@ { "Sequence": { "atoms": [ - 1309, - 1311 + 1364, + 1366 ] } }, { "Entity": { - "atom": 1316 + "atom": 1371 } }, { @@ -8908,26 +9269,26 @@ }, { "Entity": { - "atom": 1273 + "atom": 1328 } }, { "Alternative": { "atoms": [ - 1314, - 1315 + 1369, + 1370 ] } }, { "Named": { "name": "value_name", - "atom": 1313 + "atom": 1368 } }, { "Entity": { - "atom": 1338 + "atom": 1393 } }, { @@ -8939,7 +9300,7 @@ "Sequence": { "atoms": [ 36, - 1319 + 1374 ] } }, @@ -8950,7 +9311,7 @@ }, { "Repetition": { - "atom": 1321, + "atom": 1376, "min": 0, "max": 1, "tag": "Maybe" @@ -8958,48 +9319,48 @@ }, { "Entity": { - "atom": 1333 + "atom": 1388 } }, { "Entity": { - "atom": 529 + "atom": 586 } }, { "Entity": { - "atom": 543 + "atom": 600 } }, { "Entity": { - "atom": 1099 + "atom": 1156 } }, { "Entity": { - "atom": 1056 + "atom": 1113 } }, { "Entity": { - "atom": 990 + "atom": 1047 } }, { "Entity": { - "atom": 1196 + "atom": 1253 } }, { "Alternative": { "atoms": [ - 1324, - 1325, - 1326, - 1327, - 1328, - 1329 + 1379, + 1380, + 1381, + 1382, + 1383, + 1384 ] } }, @@ -9010,7 +9371,7 @@ }, { "Repetition": { - "atom": 1331, + "atom": 1386, "min": 0, "max": 1, "tag": "Maybe" @@ -9020,15 +9381,15 @@ "Sequence": { "atoms": [ 36, - 1330, + 1385, 36, - 1332 + 1387 ] } }, { "Repetition": { - "atom": 1323, + "atom": 1378, "min": 0, "max": null, "tag": "Repetition" @@ -9037,7 +9398,7 @@ { "Named": { "name": "members", - "atom": 1334 + "atom": 1389 } }, { @@ -9049,7 +9410,7 @@ "Sequence": { "atoms": [ 36, - 1336 + 1391 ] } }, @@ -9057,19 +9418,19 @@ "Sequence": { "atoms": [ 36, - 1320, + 1375, 36, - 1322, + 1377, 36, - 1335, + 1390, 36, - 1337 + 1392 ] } }, { "Repetition": { - "atom": 1318, + "atom": 1373, "min": 0, "max": 1, "tag": "Maybe" @@ -9082,7 +9443,7 @@ }, { "Repetition": { - "atom": 1340, + "atom": 1395, "min": 0, "max": 1, "tag": "Maybe" @@ -9092,27 +9453,27 @@ "Sequence": { "atoms": [ 36, - 1307, + 1362, 36, - 1308, + 1363, 36, - 1317, + 1372, 36, - 1339, + 1394, 36, - 1341 + 1396 ] } }, { "Named": { "name": "value_decl", - "atom": 1342 + "atom": 1397 } }, { "Entity": { - "atom": 1352 + "atom": 1407 } }, { @@ -9122,7 +9483,7 @@ }, { "Repetition": { - "atom": 1345, + "atom": 1400, "min": 0, "max": 1, "tag": "Maybe" @@ -9130,24 +9491,24 @@ }, { "Entity": { - "atom": 575 + "atom": 632 } }, { "Entity": { - "atom": 1203 + "atom": 1260 } }, { "Entity": { - "atom": 1179 + "atom": 1236 } }, { "Alternative": { "atoms": [ - 1348, - 1349 + 1403, + 1404 ] } }, @@ -9155,54 +9516,56 @@ "Sequence": { "atoms": [ 36, - 1346, + 1401, 36, - 1347, + 1402, 36, - 1350 + 1405 ] } }, { "Named": { "name": "attributes", - "atom": 1351 + "atom": 1406 } }, { "Entity": { - "atom": 1116 + "atom": 1173 } }, { "Entity": { - "atom": 1164 + "atom": 1221 } }, { "Entity": { - "atom": 990 + "atom": 1047 } }, { "Entity": { - "atom": 1196 + "atom": 1253 } }, { "Alternative": { "atoms": [ - 1232, - 1233, - 1234, - 1261, - 1296, - 1305, - 1344, - 1353, - 1354, - 1355, - 1356 + 1285, + 1286, + 1287, + 1288, + 1289, + 1316, + 1351, + 1360, + 1399, + 1408, + 1409, + 1410, + 1411 ] } }, @@ -9213,7 +9576,7 @@ }, { "Repetition": { - "atom": 1358, + "atom": 1413, "min": 0, "max": 1, "tag": "Maybe" @@ -9223,15 +9586,15 @@ "Sequence": { "atoms": [ 36, - 1231, + 1284, 36, - 1359 + 1414 ] } }, { "Repetition": { - "atom": 1230, + "atom": 1283, "min": 0, "max": null, "tag": "Repetition" @@ -9240,7 +9603,7 @@ { "Named": { "name": "members", - "atom": 1361 + "atom": 1416 } }, { @@ -9252,7 +9615,7 @@ "Sequence": { "atoms": [ 36, - 1363 + 1418 ] } }, @@ -9260,19 +9623,19 @@ "Sequence": { "atoms": [ 36, - 1227, + 1280, 36, - 1229, + 1282, 36, - 1362, + 1417, 36, - 1364 + 1419 ] } }, { "Repetition": { - "atom": 1225, + "atom": 1278, "min": 0, "max": 1, "tag": "Maybe" @@ -9282,33 +9645,33 @@ "Sequence": { "atoms": [ 36, - 1209, + 1266, 36, - 1211, + 1268, 36, - 1212, + 1269, 36, - 1218, + 1271, 36, - 1220, + 1273, 36, - 1222, + 1275, 36, - 1224, + 1277, 36, - 1366 + 1421 ] } }, { "Named": { "name": "enums", - "atom": 1207 + "atom": 1264 } }, { "Entity": { - "atom": 1385 + "atom": 1436 } }, { @@ -9318,7 +9681,7 @@ }, { "Repetition": { - "atom": 1370, + "atom": 1425, "min": 0, "max": 1, "tag": "Maybe" @@ -9326,12 +9689,12 @@ }, { "Entity": { - "atom": 431 + "atom": 462 } }, { "Repetition": { - "atom": 1372, + "atom": 1427, "min": 0, "max": 1, "tag": "Maybe" @@ -9339,43 +9702,17 @@ }, { "Entity": { - "atom": 1378 - } - }, - { - "Str": { - "pattern": "primitive" - } - }, - { - "Str": { - "pattern": " " - } - }, - { - "Repetition": { - "atom": 1376, - "min": 1, - "max": null, - "tag": "Repetition" - } - }, - { - "Sequence": { - "atoms": [ - 1375, - 1377 - ] + "atom": 448 } }, { "Entity": { - "atom": 583 + "atom": 640 } }, { "Repetition": { - "atom": 1379, + "atom": 1430, "min": 0, "max": 1, "tag": "Maybe" @@ -9383,23 +9720,23 @@ }, { "Entity": { - "atom": 470 + "atom": 497 } }, { "Named": { "name": "name", - "atom": 1381 + "atom": 1432 } }, { "Entity": { - "atom": 583 + "atom": 640 } }, { "Repetition": { - "atom": 1383, + "atom": 1434, "min": 0, "max": 1, "tag": "Maybe" @@ -9409,29 +9746,29 @@ "Sequence": { "atoms": [ 36, - 1371, + 1426, 36, - 1373, + 1428, 36, - 1374, + 1429, 36, - 1380, + 1431, 36, - 1382, + 1433, 36, - 1384 + 1435 ] } }, { "Named": { "name": "primitives", - "atom": 1369 + "atom": 1424 } }, { "Entity": { - "atom": 1417 + "atom": 1464 } }, { @@ -9441,7 +9778,7 @@ }, { "Repetition": { - "atom": 1388, + "atom": 1439, "min": 0, "max": 1, "tag": "Maybe" @@ -9449,12 +9786,12 @@ }, { "Entity": { - "atom": 431 + "atom": 462 } }, { "Repetition": { - "atom": 1390, + "atom": 1441, "min": 0, "max": 1, "tag": "Maybe" @@ -9462,43 +9799,17 @@ }, { "Entity": { - "atom": 1396 - } - }, - { - "Str": { - "pattern": "data_type" - } - }, - { - "Str": { - "pattern": " " - } - }, - { - "Repetition": { - "atom": 1394, - "min": 1, - "max": null, - "tag": "Repetition" - } - }, - { - "Sequence": { - "atoms": [ - 1393, - 1395 - ] + "atom": 443 } }, { "Entity": { - "atom": 583 + "atom": 640 } }, { "Repetition": { - "atom": 1397, + "atom": 1444, "min": 0, "max": 1, "tag": "Maybe" @@ -9506,23 +9817,23 @@ }, { "Entity": { - "atom": 470 + "atom": 497 } }, { "Named": { "name": "name", - "atom": 1399 + "atom": 1446 } }, { "Entity": { - "atom": 583 + "atom": 640 } }, { "Repetition": { - "atom": 1401, + "atom": 1448, "min": 0, "max": 1, "tag": "Maybe" @@ -9530,12 +9841,12 @@ }, { "Entity": { - "atom": 493 + "atom": 520 } }, { "Repetition": { - "atom": 1403, + "atom": 1450, "min": 0, "max": 1, "tag": "Maybe" @@ -9543,7 +9854,7 @@ }, { "Entity": { - "atom": 1415 + "atom": 1462 } }, { @@ -9555,7 +9866,7 @@ "Sequence": { "atoms": [ 36, - 1406 + 1453 ] } }, @@ -9566,7 +9877,7 @@ }, { "Repetition": { - "atom": 1408, + "atom": 1455, "min": 0, "max": 1, "tag": "Maybe" @@ -9574,12 +9885,12 @@ }, { "Entity": { - "atom": 1360 + "atom": 1415 } }, { "Repetition": { - "atom": 1410, + "atom": 1457, "min": 0, "max": null, "tag": "Repetition" @@ -9588,7 +9899,7 @@ { "Named": { "name": "members", - "atom": 1411 + "atom": 1458 } }, { @@ -9600,7 +9911,7 @@ "Sequence": { "atoms": [ 36, - 1413 + 1460 ] } }, @@ -9608,19 +9919,19 @@ "Sequence": { "atoms": [ 36, - 1407, + 1454, 36, - 1409, + 1456, 36, - 1412, + 1459, 36, - 1414 + 1461 ] } }, { "Repetition": { - "atom": 1405, + "atom": 1452, "min": 0, "max": 1, "tag": "Maybe" @@ -9630,33 +9941,33 @@ "Sequence": { "atoms": [ 36, - 1389, + 1440, 36, - 1391, + 1442, 36, - 1392, + 1443, 36, - 1398, + 1445, 36, - 1400, + 1447, 36, - 1402, + 1449, 36, - 1404, + 1451, 36, - 1416 + 1463 ] } }, { "Named": { "name": "data_types", - "atom": 1387 + "atom": 1438 } }, { "Entity": { - "atom": 1446 + "atom": 1491 } }, { @@ -9666,7 +9977,7 @@ }, { "Repetition": { - "atom": 1420, + "atom": 1467, "min": 0, "max": 1, "tag": "Maybe" @@ -9674,49 +9985,36 @@ }, { "Entity": { - "atom": 1426 - } - }, - { - "Str": { - "pattern": "package" - } - }, - { - "Str": { - "pattern": " " + "atom": 462 } }, { "Repetition": { - "atom": 1424, - "min": 1, - "max": null, - "tag": "Repetition" + "atom": 1469, + "min": 0, + "max": 1, + "tag": "Maybe" } }, { - "Sequence": { - "atoms": [ - 1423, - 1425 - ] + "Entity": { + "atom": 453 } }, { "Entity": { - "atom": 470 + "atom": 497 } }, { "Named": { "name": "name", - "atom": 1427 + "atom": 1472 } }, { "Entity": { - "atom": 1442 + "atom": 1487 } }, { @@ -9728,7 +10026,7 @@ "Sequence": { "atoms": [ 36, - 1430 + 1475 ] } }, @@ -9739,7 +10037,7 @@ }, { "Repetition": { - "atom": 1432, + "atom": 1477, "min": 0, "max": 1, "tag": "Maybe" @@ -9747,7 +10045,7 @@ }, { "Entity": { - "atom": 1437 + "atom": 1482 } }, { @@ -9757,7 +10055,7 @@ }, { "Repetition": { - "atom": 1435, + "atom": 1480, "min": 0, "max": 1, "tag": "Maybe" @@ -9769,13 +10067,13 @@ 36, 173, 36, - 1436 + 1481 ] } }, { "Repetition": { - "atom": 1434, + "atom": 1479, "min": 0, "max": null, "tag": "Repetition" @@ -9784,7 +10082,7 @@ { "Named": { "name": "members", - "atom": 1438 + "atom": 1483 } }, { @@ -9796,7 +10094,7 @@ "Sequence": { "atoms": [ 36, - 1440 + 1485 ] } }, @@ -9804,13 +10102,13 @@ "Sequence": { "atoms": [ 36, - 1431, + 1476, 36, - 1433, + 1478, 36, - 1439, + 1484, 36, - 1441 + 1486 ] } }, @@ -9821,7 +10119,7 @@ }, { "Repetition": { - "atom": 1443, + "atom": 1488, "min": 0, "max": 1, "tag": "Maybe" @@ -9831,27 +10129,29 @@ "Sequence": { "atoms": [ 36, - 1421, + 1468, 36, - 1422, + 1470, 36, - 1428, + 1471, 36, - 1429, + 1473, + 36, + 1474, 36, - 1444 + 1489 ] } }, { "Named": { "name": "packages", - "atom": 1445 + "atom": 1490 } }, { "Entity": { - "atom": 1493 + "atom": 1538 } }, { @@ -9861,7 +10161,7 @@ }, { "Repetition": { - "atom": 1448, + "atom": 1493, "min": 0, "max": 1, "tag": "Maybe" @@ -9869,7 +10169,7 @@ }, { "Entity": { - "atom": 1454 + "atom": 1499 } }, { @@ -9884,7 +10184,7 @@ }, { "Repetition": { - "atom": 1452, + "atom": 1497, "min": 1, "max": null, "tag": "Repetition" @@ -9893,14 +10193,14 @@ { "Sequence": { "atoms": [ - 1451, - 1453 + 1496, + 1498 ] } }, { "Entity": { - "atom": 1492 + "atom": 1537 } }, { @@ -9915,7 +10215,7 @@ }, { "Lookahead": { - "atom": 1457, + "atom": 1502, "positive": false } }, @@ -9927,14 +10227,14 @@ { "Sequence": { "atoms": [ - 1458, - 1459 + 1503, + 1504 ] } }, { "Repetition": { - "atom": 1460, + "atom": 1505, "min": 1, "max": null, "tag": "Repetition" @@ -9943,7 +10243,7 @@ { "Named": { "name": "title", - "atom": 1461 + "atom": 1506 } }, { @@ -9954,9 +10254,9 @@ { "Sequence": { "atoms": [ - 1456, - 1462, - 1463 + 1501, + 1507, + 1508 ] } }, @@ -9972,7 +10272,7 @@ }, { "Lookahead": { - "atom": 1466, + "atom": 1511, "positive": false } }, @@ -9984,14 +10284,14 @@ { "Sequence": { "atoms": [ - 1467, - 1468 + 1512, + 1513 ] } }, { "Repetition": { - "atom": 1469, + "atom": 1514, "min": 1, "max": null, "tag": "Repetition" @@ -10000,7 +10300,7 @@ { "Named": { "name": "title", - "atom": 1470 + "atom": 1515 } }, { @@ -10011,9 +10311,9 @@ { "Sequence": { "atoms": [ - 1465, - 1471, - 1472 + 1510, + 1516, + 1517 ] } }, @@ -10095,27 +10395,27 @@ { "Alternative": { "atoms": [ - 1474, - 1475, - 1476, - 1477, - 1478, - 1479, - 1480, - 1481, - 1482, - 1483, - 1484, - 1485, - 1486, - 1487, - 1488 + 1519, + 1520, + 1521, + 1522, + 1523, + 1524, + 1525, + 1526, + 1527, + 1528, + 1529, + 1530, + 1531, + 1532, + 1533 ] } }, { "Repetition": { - "atom": 1489, + "atom": 1534, "min": 1, "max": null, "tag": "Repetition" @@ -10124,15 +10424,15 @@ { "Named": { "name": "title", - "atom": 1490 + "atom": 1535 } }, { "Alternative": { "atoms": [ - 1464, - 1473, - 1491 + 1509, + 1518, + 1536 ] } }, @@ -10140,17 +10440,17 @@ "Sequence": { "atoms": [ 36, - 1449, + 1494, 36, - 1450, + 1495, 36, - 1455 + 1500 ] } }, { "Entity": { - "atom": 1540 + "atom": 1585 } }, { @@ -10160,7 +10460,7 @@ }, { "Repetition": { - "atom": 1495, + "atom": 1540, "min": 0, "max": 1, "tag": "Maybe" @@ -10168,7 +10468,7 @@ }, { "Entity": { - "atom": 1501 + "atom": 1546 } }, { @@ -10183,7 +10483,7 @@ }, { "Repetition": { - "atom": 1499, + "atom": 1544, "min": 1, "max": null, "tag": "Repetition" @@ -10192,14 +10492,14 @@ { "Sequence": { "atoms": [ - 1498, - 1500 + 1543, + 1545 ] } }, { "Entity": { - "atom": 1539 + "atom": 1584 } }, { @@ -10214,7 +10514,7 @@ }, { "Lookahead": { - "atom": 1504, + "atom": 1549, "positive": false } }, @@ -10226,14 +10526,14 @@ { "Sequence": { "atoms": [ - 1505, - 1506 + 1550, + 1551 ] } }, { "Repetition": { - "atom": 1507, + "atom": 1552, "min": 1, "max": null, "tag": "Repetition" @@ -10242,7 +10542,7 @@ { "Named": { "name": "caption", - "atom": 1508 + "atom": 1553 } }, { @@ -10253,9 +10553,9 @@ { "Sequence": { "atoms": [ - 1503, - 1509, - 1510 + 1548, + 1554, + 1555 ] } }, @@ -10271,7 +10571,7 @@ }, { "Lookahead": { - "atom": 1513, + "atom": 1558, "positive": false } }, @@ -10283,14 +10583,14 @@ { "Sequence": { "atoms": [ - 1514, - 1515 + 1559, + 1560 ] } }, { "Repetition": { - "atom": 1516, + "atom": 1561, "min": 1, "max": null, "tag": "Repetition" @@ -10299,7 +10599,7 @@ { "Named": { "name": "caption", - "atom": 1517 + "atom": 1562 } }, { @@ -10310,9 +10610,9 @@ { "Sequence": { "atoms": [ - 1512, - 1518, - 1519 + 1557, + 1563, + 1564 ] } }, @@ -10394,27 +10694,27 @@ { "Alternative": { "atoms": [ - 1521, - 1522, - 1523, - 1524, - 1525, - 1526, - 1527, - 1528, - 1529, - 1530, - 1531, - 1532, - 1533, - 1534, - 1535 + 1566, + 1567, + 1568, + 1569, + 1570, + 1571, + 1572, + 1573, + 1574, + 1575, + 1576, + 1577, + 1578, + 1579, + 1580 ] } }, { "Repetition": { - "atom": 1536, + "atom": 1581, "min": 1, "max": null, "tag": "Repetition" @@ -10423,15 +10723,15 @@ { "Named": { "name": "caption", - "atom": 1537 + "atom": 1582 } }, { "Alternative": { "atoms": [ - 1511, - 1520, - 1538 + 1556, + 1565, + 1583 ] } }, @@ -10439,17 +10739,17 @@ "Sequence": { "atoms": [ 36, - 1496, + 1541, 36, - 1497, + 1542, 36, - 1502 + 1547 ] } }, { "Entity": { - "atom": 1564 + "atom": 1609 } }, { @@ -10459,7 +10759,7 @@ }, { "Repetition": { - "atom": 1542, + "atom": 1587, "min": 0, "max": 1, "tag": "Maybe" @@ -10467,7 +10767,7 @@ }, { "Entity": { - "atom": 1548 + "atom": 1593 } }, { @@ -10482,7 +10782,7 @@ }, { "Repetition": { - "atom": 1546, + "atom": 1591, "min": 1, "max": null, "tag": "Repetition" @@ -10491,24 +10791,24 @@ { "Sequence": { "atoms": [ - 1545, - 1547 + 1590, + 1592 ] } }, { "Entity": { - "atom": 1563 + "atom": 1608 } }, { "Entity": { - "atom": 583 + "atom": 640 } }, { "Repetition": { - "atom": 1550, + "atom": 1595, "min": 0, "max": 1, "tag": "Maybe" @@ -10547,18 +10847,18 @@ { "Alternative": { "atoms": [ - 1552, - 1553, - 1554, - 1555, - 1556, - 1557 + 1597, + 1598, + 1599, + 1600, + 1601, + 1602 ] } }, { "Repetition": { - "atom": 1558, + "atom": 1603, "min": 1, "max": null, "tag": "Repetition" @@ -10567,17 +10867,17 @@ { "Named": { "name": "fontname", - "atom": 1559 + "atom": 1604 } }, { "Entity": { - "atom": 583 + "atom": 640 } }, { "Repetition": { - "atom": 1561, + "atom": 1606, "min": 0, "max": 1, "tag": "Maybe" @@ -10587,11 +10887,11 @@ "Sequence": { "atoms": [ 36, - 1551, + 1596, 36, - 1560, + 1605, 36, - 1562 + 1607 ] } }, @@ -10599,17 +10899,17 @@ "Sequence": { "atoms": [ 36, - 1543, + 1588, 36, - 1544, + 1589, 36, - 1549 + 1594 ] } }, { "Entity": { - "atom": 1673 + "atom": 1718 } }, { @@ -10619,7 +10919,7 @@ }, { "Repetition": { - "atom": 1566, + "atom": 1611, "min": 0, "max": 1, "tag": "Maybe" @@ -10627,7 +10927,7 @@ }, { "Entity": { - "atom": 1572 + "atom": 1617 } }, { @@ -10642,7 +10942,7 @@ }, { "Repetition": { - "atom": 1570, + "atom": 1615, "min": 1, "max": null, "tag": "Repetition" @@ -10651,8 +10951,8 @@ { "Sequence": { "atoms": [ - 1569, - 1571 + 1614, + 1616 ] } }, @@ -10664,12 +10964,12 @@ { "Named": { "name": "name", - "atom": 1573 + "atom": 1618 } }, { "Repetition": { - "atom": 1574, + "atom": 1619, "min": 0, "max": 1, "tag": "Maybe" @@ -10677,7 +10977,7 @@ }, { "Entity": { - "atom": 1672 + "atom": 1717 } }, { @@ -10689,7 +10989,7 @@ "Sequence": { "atoms": [ 36, - 1577 + 1622 ] } }, @@ -10700,7 +11000,7 @@ }, { "Repetition": { - "atom": 1579, + "atom": 1624, "min": 0, "max": 1, "tag": "Maybe" @@ -10708,12 +11008,12 @@ }, { "Entity": { - "atom": 1667 + "atom": 1712 } }, { "Entity": { - "atom": 1592 + "atom": 1637 } }, { @@ -10723,7 +11023,7 @@ }, { "Repetition": { - "atom": 1583, + "atom": 1628, "min": 0, "max": 1, "tag": "Maybe" @@ -10731,7 +11031,7 @@ }, { "Entity": { - "atom": 1589 + "atom": 1634 } }, { @@ -10746,7 +11046,7 @@ }, { "Repetition": { - "atom": 1587, + "atom": 1632, "min": 1, "max": null, "tag": "Repetition" @@ -10755,8 +11055,8 @@ { "Sequence": { "atoms": [ - 1586, - 1588 + 1631, + 1633 ] } }, @@ -10768,24 +11068,24 @@ { "Named": { "name": "owner_end_type", - "atom": 1590 + "atom": 1635 } }, { "Sequence": { "atoms": [ 36, - 1584, + 1629, 36, - 1585, + 1630, 36, - 1591 + 1636 ] } }, { "Entity": { - "atom": 1603 + "atom": 1648 } }, { @@ -10795,7 +11095,7 @@ }, { "Repetition": { - "atom": 1594, + "atom": 1639, "min": 0, "max": 1, "tag": "Maybe" @@ -10803,7 +11103,7 @@ }, { "Entity": { - "atom": 1600 + "atom": 1645 } }, { @@ -10818,7 +11118,7 @@ }, { "Repetition": { - "atom": 1598, + "atom": 1643, "min": 1, "max": null, "tag": "Repetition" @@ -10827,8 +11127,8 @@ { "Sequence": { "atoms": [ - 1597, - 1599 + 1642, + 1644 ] } }, @@ -10840,24 +11140,24 @@ { "Named": { "name": "member_end_type", - "atom": 1601 + "atom": 1646 } }, { "Sequence": { "atoms": [ 36, - 1595, + 1640, 36, - 1596, + 1641, 36, - 1602 + 1647 ] } }, { "Entity": { - "atom": 1632 + "atom": 1677 } }, { @@ -10867,7 +11167,7 @@ }, { "Repetition": { - "atom": 1605, + "atom": 1650, "min": 0, "max": 1, "tag": "Maybe" @@ -10875,7 +11175,7 @@ }, { "Entity": { - "atom": 1611 + "atom": 1656 } }, { @@ -10890,7 +11190,7 @@ }, { "Repetition": { - "atom": 1609, + "atom": 1654, "min": 1, "max": null, "tag": "Repetition" @@ -10899,8 +11199,8 @@ { "Sequence": { "atoms": [ - 1608, - 1610 + 1653, + 1655 ] } }, @@ -10912,12 +11212,12 @@ { "Named": { "name": "owner_end", - "atom": 1612 + "atom": 1657 } }, { "Entity": { - "atom": 1621 + "atom": 1666 } }, { @@ -10929,18 +11229,18 @@ "Sequence": { "atoms": [ 36, - 1615 + 1660 ] } }, { "Entity": { - "atom": 626 + "atom": 683 } }, { "Repetition": { - "atom": 1617, + "atom": 1662, "min": 0, "max": 1, "tag": "Maybe" @@ -10954,24 +11254,24 @@ { "Named": { "name": "owner_end_attribute_name", - "atom": 1619 + "atom": 1664 } }, { "Sequence": { "atoms": [ 36, - 1616, + 1661, 36, - 1618, + 1663, 36, - 1620 + 1665 ] } }, { "Repetition": { - "atom": 1614, + "atom": 1659, "min": 0, "max": 1, "tag": "Maybe" @@ -10979,7 +11279,7 @@ }, { "Entity": { - "atom": 1630 + "atom": 1675 } }, { @@ -10991,19 +11291,19 @@ "Sequence": { "atoms": [ 36, - 1624 + 1669 ] } }, { "Entity": { - "atom": 711 + "atom": 768 } }, { "Named": { "name": "owner_end_cardinality", - "atom": 1626 + "atom": 1671 } }, { @@ -11015,7 +11315,7 @@ "Sequence": { "atoms": [ 36, - 1628 + 1673 ] } }, @@ -11023,17 +11323,17 @@ "Sequence": { "atoms": [ 36, - 1625, + 1670, 36, - 1627, + 1672, 36, - 1629 + 1674 ] } }, { "Repetition": { - "atom": 1623, + "atom": 1668, "min": 0, "max": 1, "tag": "Maybe" @@ -11043,21 +11343,21 @@ "Sequence": { "atoms": [ 36, - 1606, + 1651, 36, - 1607, + 1652, 36, - 1613, + 1658, 36, - 1622, + 1667, 36, - 1631 + 1676 ] } }, { "Entity": { - "atom": 1661 + "atom": 1706 } }, { @@ -11067,7 +11367,7 @@ }, { "Repetition": { - "atom": 1634, + "atom": 1679, "min": 0, "max": 1, "tag": "Maybe" @@ -11075,7 +11375,7 @@ }, { "Entity": { - "atom": 1640 + "atom": 1685 } }, { @@ -11090,7 +11390,7 @@ }, { "Repetition": { - "atom": 1638, + "atom": 1683, "min": 1, "max": null, "tag": "Repetition" @@ -11099,8 +11399,8 @@ { "Sequence": { "atoms": [ - 1637, - 1639 + 1682, + 1684 ] } }, @@ -11112,12 +11412,12 @@ { "Named": { "name": "member_end", - "atom": 1641 + "atom": 1686 } }, { "Entity": { - "atom": 1650 + "atom": 1695 } }, { @@ -11129,18 +11429,18 @@ "Sequence": { "atoms": [ 36, - 1644 + 1689 ] } }, { "Entity": { - "atom": 626 + "atom": 683 } }, { "Repetition": { - "atom": 1646, + "atom": 1691, "min": 0, "max": 1, "tag": "Maybe" @@ -11154,24 +11454,24 @@ { "Named": { "name": "member_end_attribute_name", - "atom": 1648 + "atom": 1693 } }, { "Sequence": { "atoms": [ 36, - 1645, + 1690, 36, - 1647, + 1692, 36, - 1649 + 1694 ] } }, { "Repetition": { - "atom": 1643, + "atom": 1688, "min": 0, "max": 1, "tag": "Maybe" @@ -11179,7 +11479,7 @@ }, { "Entity": { - "atom": 1659 + "atom": 1704 } }, { @@ -11191,19 +11491,19 @@ "Sequence": { "atoms": [ 36, - 1653 + 1698 ] } }, { "Entity": { - "atom": 711 + "atom": 768 } }, { "Named": { "name": "member_end_cardinality", - "atom": 1655 + "atom": 1700 } }, { @@ -11215,7 +11515,7 @@ "Sequence": { "atoms": [ 36, - 1657 + 1702 ] } }, @@ -11223,17 +11523,17 @@ "Sequence": { "atoms": [ 36, - 1654, + 1699, 36, - 1656, + 1701, 36, - 1658 + 1703 ] } }, { "Repetition": { - "atom": 1652, + "atom": 1697, "min": 0, "max": 1, "tag": "Maybe" @@ -11243,37 +11543,37 @@ "Sequence": { "atoms": [ 36, - 1635, + 1680, 36, - 1636, + 1681, 36, - 1642, + 1687, 36, - 1651, + 1696, 36, - 1660 + 1705 ] } }, { "Entity": { - "atom": 990 + "atom": 1047 } }, { "Entity": { - "atom": 1196 + "atom": 1253 } }, { "Alternative": { "atoms": [ - 1582, - 1593, - 1604, - 1633, - 1662, - 1663 + 1627, + 1638, + 1649, + 1678, + 1707, + 1708 ] } }, @@ -11284,7 +11584,7 @@ }, { "Repetition": { - "atom": 1665, + "atom": 1710, "min": 0, "max": 1, "tag": "Maybe" @@ -11294,15 +11594,15 @@ "Sequence": { "atoms": [ 36, - 1664, + 1709, 36, - 1666 + 1711 ] } }, { "Repetition": { - "atom": 1581, + "atom": 1626, "min": 0, "max": null, "tag": "Repetition" @@ -11311,7 +11611,7 @@ { "Named": { "name": "members", - "atom": 1668 + "atom": 1713 } }, { @@ -11323,7 +11623,7 @@ "Sequence": { "atoms": [ 36, - 1670 + 1715 ] } }, @@ -11331,13 +11631,13 @@ "Sequence": { "atoms": [ 36, - 1578, + 1623, 36, - 1580, + 1625, 36, - 1669, + 1714, 36, - 1671 + 1716 ] } }, @@ -11345,30 +11645,30 @@ "Sequence": { "atoms": [ 36, - 1567, + 1612, 36, - 1568, + 1613, 36, - 1575, + 1620, 36, - 1576 + 1621 ] } }, { "Named": { "name": "associations", - "atom": 1565 + "atom": 1610 } }, { "Entity": { - "atom": 990 + "atom": 1047 } }, { "Entity": { - "atom": 1196 + "atom": 1253 } }, { @@ -11376,17 +11676,17 @@ "atoms": [ 174, 241, - 1206, - 1368, - 1386, - 1418, - 1419, - 1447, - 1494, - 1541, - 1674, - 1675, - 1676 + 1263, + 1423, + 1437, + 1465, + 1466, + 1492, + 1539, + 1586, + 1719, + 1720, + 1721 ] } }, @@ -11396,7 +11696,7 @@ 36, 173, 36, - 1436 + 1481 ] } }, @@ -11410,7 +11710,7 @@ }, { "Repetition": { - "atom": 1679, + "atom": 1724, "min": 0, "max": null, "tag": "Repetition" @@ -11419,7 +11719,7 @@ { "Named": { "name": "members", - "atom": 1680 + "atom": 1725 } }, { @@ -11431,7 +11731,7 @@ "Sequence": { "atoms": [ 36, - 1682 + 1727 ] } }, @@ -11442,7 +11742,7 @@ }, { "Repetition": { - "atom": 1684, + "atom": 1729, "min": 0, "max": 1, "tag": "Maybe" @@ -11464,22 +11764,22 @@ 36, 114, 36, - 1681, + 1726, 36, - 1683, + 1728, 36, - 1685 + 1730 ] } }, { "Entity": { - "atom": 1711 + "atom": 1756 } }, { "Entity": { - "atom": 1708 + "atom": 1753 } }, { @@ -11489,7 +11789,7 @@ }, { "Repetition": { - "atom": 1689, + "atom": 1734, "min": 0, "max": 1, "tag": "Maybe" @@ -11504,24 +11804,24 @@ "Sequence": { "atoms": [ 36, - 1691 + 1736 ] } }, { "Entity": { - "atom": 470 + "atom": 497 } }, { "Named": { "name": "name", - "atom": 1693 + "atom": 1738 } }, { "Entity": { - "atom": 1705 + "atom": 1750 } }, { @@ -11533,7 +11833,7 @@ "Sequence": { "atoms": [ 36, - 1696 + 1741 ] } }, @@ -11544,7 +11844,7 @@ }, { "Repetition": { - "atom": 1698, + "atom": 1743, "min": 0, "max": 1, "tag": "Maybe" @@ -11552,12 +11852,12 @@ }, { "Entity": { - "atom": 1678 + "atom": 1723 } }, { "Repetition": { - "atom": 1700, + "atom": 1745, "min": 0, "max": null, "tag": "Repetition" @@ -11566,7 +11866,7 @@ { "Named": { "name": "members", - "atom": 1701 + "atom": 1746 } }, { @@ -11578,7 +11878,7 @@ "Sequence": { "atoms": [ 36, - 1703 + 1748 ] } }, @@ -11586,13 +11886,13 @@ "Sequence": { "atoms": [ 36, - 1697, + 1742, 36, - 1699, + 1744, 36, - 1702, + 1747, 36, - 1704 + 1749 ] } }, @@ -11603,7 +11903,7 @@ }, { "Repetition": { - "atom": 1706, + "atom": 1751, "min": 0, "max": 1, "tag": "Maybe" @@ -11613,15 +11913,15 @@ "Sequence": { "atoms": [ 36, - 1690, + 1735, 36, - 1692, + 1737, 36, - 1694, + 1739, 36, - 1695, + 1740, 36, - 1707 + 1752 ] } }, @@ -11632,7 +11932,7 @@ }, { "Repetition": { - "atom": 1709, + "atom": 1754, "min": 0, "max": 1, "tag": "Maybe" @@ -11642,20 +11942,20 @@ "Sequence": { "atoms": [ 36, - 1688, + 1733, 36, - 1710 + 1755 ] } }, { "Entity": { - "atom": 1819 + "atom": 1864 } }, { "Entity": { - "atom": 1816 + "atom": 1861 } }, { @@ -11665,7 +11965,7 @@ }, { "Repetition": { - "atom": 1714, + "atom": 1759, "min": 0, "max": 1, "tag": "Maybe" @@ -11680,24 +11980,24 @@ "Sequence": { "atoms": [ 36, - 1716 + 1761 ] } }, { "Entity": { - "atom": 470 + "atom": 497 } }, { "Named": { "name": "name", - "atom": 1718 + "atom": 1763 } }, { "Entity": { - "atom": 1813 + "atom": 1858 } }, { @@ -11709,7 +12009,7 @@ "Sequence": { "atoms": [ 36, - 1721 + 1766 ] } }, @@ -11720,7 +12020,7 @@ }, { "Repetition": { - "atom": 1723, + "atom": 1768, "min": 0, "max": 1, "tag": "Maybe" @@ -11728,22 +12028,22 @@ }, { "Entity": { - "atom": 1808 + "atom": 1853 } }, { "Entity": { - "atom": 1805 + "atom": 1850 } }, { "Entity": { - "atom": 1803 + "atom": 1848 } }, { "Entity": { - "atom": 1759 + "atom": 1804 } }, { @@ -11753,7 +12053,7 @@ }, { "Repetition": { - "atom": 1729, + "atom": 1774, "min": 0, "max": 1, "tag": "Maybe" @@ -11761,7 +12061,7 @@ }, { "Entity": { - "atom": 1735 + "atom": 1780 } }, { @@ -11776,7 +12076,7 @@ }, { "Repetition": { - "atom": 1733, + "atom": 1778, "min": 1, "max": null, "tag": "Repetition" @@ -11785,14 +12085,14 @@ { "Sequence": { "atoms": [ - 1732, - 1734 + 1777, + 1779 ] } }, { "Entity": { - "atom": 1745 + "atom": 1790 } }, { @@ -11807,7 +12107,7 @@ }, { "Lookahead": { - "atom": 1738, + "atom": 1783, "positive": false } }, @@ -11819,14 +12119,14 @@ { "Sequence": { "atoms": [ - 1739, - 1740 + 1784, + 1785 ] } }, { "Repetition": { - "atom": 1741, + "atom": 1786, "min": 0, "max": null, "tag": "Repetition" @@ -11835,7 +12135,7 @@ { "Named": { "name": "path", - "atom": 1742 + "atom": 1787 } }, { @@ -11846,15 +12146,15 @@ { "Sequence": { "atoms": [ - 1737, - 1743, - 1744 + 1782, + 1788, + 1789 ] } }, { "Entity": { - "atom": 1755 + "atom": 1800 } }, { @@ -11869,7 +12169,7 @@ }, { "Lookahead": { - "atom": 1748, + "atom": 1793, "positive": false } }, @@ -11881,14 +12181,14 @@ { "Sequence": { "atoms": [ - 1749, - 1750 + 1794, + 1795 ] } }, { "Repetition": { - "atom": 1751, + "atom": 1796, "min": 0, "max": null, "tag": "Repetition" @@ -11897,7 +12197,7 @@ { "Named": { "name": "path", - "atom": 1752 + "atom": 1797 } }, { @@ -11908,17 +12208,17 @@ { "Sequence": { "atoms": [ - 1747, - 1753, - 1754 + 1792, + 1798, + 1799 ] } }, { "Alternative": { "atoms": [ - 1736, - 1746 + 1781, + 1791 ] } }, @@ -11929,7 +12229,7 @@ }, { "Repetition": { - "atom": 1757, + "atom": 1802, "min": 0, "max": 1, "tag": "Maybe" @@ -11939,25 +12239,25 @@ "Sequence": { "atoms": [ 36, - 1730, + 1775, 36, - 1731, + 1776, 36, - 1756, + 1801, 36, - 1758 + 1803 ] } }, { "Named": { "name": "view_imports", - "atom": 1728 + "atom": 1773 } }, { "Entity": { - "atom": 1789 + "atom": 1834 } }, { @@ -11967,7 +12267,7 @@ }, { "Repetition": { - "atom": 1762, + "atom": 1807, "min": 0, "max": 1, "tag": "Maybe" @@ -11975,7 +12275,7 @@ }, { "Entity": { - "atom": 1768 + "atom": 1813 } }, { @@ -11990,7 +12290,7 @@ }, { "Repetition": { - "atom": 1766, + "atom": 1811, "min": 1, "max": null, "tag": "Repetition" @@ -11999,19 +12299,19 @@ { "Sequence": { "atoms": [ - 1765, - 1767 + 1810, + 1812 ] } }, { "Entity": { - "atom": 1785 + "atom": 1830 } }, { "Entity": { - "atom": 1780 + "atom": 1825 } }, { @@ -12052,19 +12352,19 @@ { "Alternative": { "atoms": [ - 1771, - 1772, - 1773, - 1774, - 1775, - 1776, - 1777 + 1816, + 1817, + 1818, + 1819, + 1820, + 1821, + 1822 ] } }, { "Repetition": { - "atom": 1778, + "atom": 1823, "min": 1, "max": null, "tag": "Repetition" @@ -12073,7 +12373,7 @@ { "Named": { "name": "entity_name", - "atom": 1779 + "atom": 1824 } }, { @@ -12083,21 +12383,21 @@ }, { "Entity": { - "atom": 1780 + "atom": 1825 } }, { "Sequence": { "atoms": [ - 1781, + 1826, 36, - 1782 + 1827 ] } }, { "Repetition": { - "atom": 1783, + "atom": 1828, "min": 0, "max": null, "tag": "Repetition" @@ -12107,16 +12407,16 @@ "Sequence": { "atoms": [ 36, - 1770, + 1815, 36, - 1784 + 1829 ] } }, { "Named": { "name": "show_list", - "atom": 1769 + "atom": 1814 } }, { @@ -12126,7 +12426,7 @@ }, { "Repetition": { - "atom": 1787, + "atom": 1832, "min": 0, "max": 1, "tag": "Maybe" @@ -12136,19 +12436,19 @@ "Sequence": { "atoms": [ 36, - 1763, + 1808, 36, - 1764, + 1809, 36, - 1786, + 1831, 36, - 1788 + 1833 ] } }, { "Entity": { - "atom": 1802 + "atom": 1847 } }, { @@ -12158,7 +12458,7 @@ }, { "Repetition": { - "atom": 1791, + "atom": 1836, "min": 0, "max": 1, "tag": "Maybe" @@ -12166,7 +12466,7 @@ }, { "Entity": { - "atom": 1797 + "atom": 1842 } }, { @@ -12181,7 +12481,7 @@ }, { "Repetition": { - "atom": 1795, + "atom": 1840, "min": 1, "max": null, "tag": "Repetition" @@ -12190,20 +12490,20 @@ { "Sequence": { "atoms": [ - 1794, - 1796 + 1839, + 1841 ] } }, { "Entity": { - "atom": 1785 + "atom": 1830 } }, { "Named": { "name": "hide_list", - "atom": 1798 + "atom": 1843 } }, { @@ -12213,7 +12513,7 @@ }, { "Repetition": { - "atom": 1800, + "atom": 1845, "min": 0, "max": 1, "tag": "Maybe" @@ -12223,35 +12523,35 @@ "Sequence": { "atoms": [ 36, - 1792, + 1837, 36, - 1793, + 1838, 36, - 1799, + 1844, 36, - 1801 + 1846 ] } }, { "Alternative": { "atoms": [ - 1760, - 1761, - 1790 + 1805, + 1806, + 1835 ] } }, { "Entity": { - "atom": 1677 + "atom": 1722 } }, { "Alternative": { "atoms": [ - 1727, - 1804 + 1772, + 1849 ] } }, @@ -12262,7 +12562,7 @@ }, { "Repetition": { - "atom": 1806, + "atom": 1851, "min": 0, "max": 1, "tag": "Maybe" @@ -12272,15 +12572,15 @@ "Sequence": { "atoms": [ 36, - 1726, + 1771, 36, - 1807 + 1852 ] } }, { "Repetition": { - "atom": 1725, + "atom": 1770, "min": 0, "max": null, "tag": "Repetition" @@ -12289,7 +12589,7 @@ { "Named": { "name": "members", - "atom": 1809 + "atom": 1854 } }, { @@ -12301,7 +12601,7 @@ "Sequence": { "atoms": [ 36, - 1811 + 1856 ] } }, @@ -12309,13 +12609,13 @@ "Sequence": { "atoms": [ 36, - 1722, + 1767, 36, - 1724, + 1769, 36, - 1810, + 1855, 36, - 1812 + 1857 ] } }, @@ -12326,7 +12626,7 @@ }, { "Repetition": { - "atom": 1814, + "atom": 1859, "min": 0, "max": 1, "tag": "Maybe" @@ -12336,15 +12636,15 @@ "Sequence": { "atoms": [ 36, - 1715, + 1760, 36, - 1717, + 1762, 36, - 1719, + 1764, 36, - 1720, + 1765, 36, - 1815 + 1860 ] } }, @@ -12355,7 +12655,7 @@ }, { "Repetition": { - "atom": 1817, + "atom": 1862, "min": 0, "max": 1, "tag": "Maybe" @@ -12365,15 +12665,15 @@ "Sequence": { "atoms": [ 36, - 1713, + 1758, 36, - 1818 + 1863 ] } }, { "Entity": { - "atom": 1990 + "atom": 2035 } }, { @@ -12383,7 +12683,7 @@ }, { "Repetition": { - "atom": 1821, + "atom": 1866, "min": 0, "max": 1, "tag": "Maybe" @@ -12398,7 +12698,7 @@ "Sequence": { "atoms": [ 36, - 1823 + 1868 ] } }, @@ -12415,20 +12715,20 @@ { "Alternative": { "atoms": [ - 1825, - 1826 + 1870, + 1871 ] } }, { "Named": { "name": "name", - "atom": 1827 + "atom": 1872 } }, { "Repetition": { - "atom": 1828, + "atom": 1873, "min": 0, "max": 1, "tag": "Maybe" @@ -12441,7 +12741,7 @@ }, { "Repetition": { - "atom": 1830, + "atom": 1875, "min": 0, "max": 1, "tag": "Maybe" @@ -12456,7 +12756,7 @@ "Sequence": { "atoms": [ 36, - 1832 + 1877 ] } }, @@ -12467,7 +12767,7 @@ }, { "Repetition": { - "atom": 1834, + "atom": 1879, "min": 0, "max": 1, "tag": "Maybe" @@ -12475,17 +12775,17 @@ }, { "Entity": { - "atom": 1984 + "atom": 2029 } }, { "Entity": { - "atom": 1979 + "atom": 2024 } }, { "Entity": { - "atom": 1873 + "atom": 1918 } }, { @@ -12495,7 +12795,7 @@ }, { "Repetition": { - "atom": 1839, + "atom": 1884, "min": 0, "max": 1, "tag": "Maybe" @@ -12510,7 +12810,7 @@ "Sequence": { "atoms": [ 36, - 1841 + 1886 ] } }, @@ -12523,7 +12823,7 @@ "Sequence": { "atoms": [ 36, - 1843 + 1888 ] } }, @@ -12534,7 +12834,7 @@ }, { "Repetition": { - "atom": 1845, + "atom": 1890, "min": 0, "max": 1, "tag": "Maybe" @@ -12542,7 +12842,7 @@ }, { "Entity": { - "atom": 1866 + "atom": 1911 } }, { @@ -12552,7 +12852,7 @@ }, { "Repetition": { - "atom": 1848, + "atom": 1893, "min": 1, "max": null, "tag": "Repetition" @@ -12561,7 +12861,7 @@ { "Named": { "name": "format_type", - "atom": 1849 + "atom": 1894 } }, { @@ -12572,7 +12872,7 @@ { "Named": { "name": "file", - "atom": 1851 + "atom": 1896 } }, { @@ -12582,7 +12882,7 @@ }, { "Repetition": { - "atom": 1853, + "atom": 1898, "min": 0, "max": 1, "tag": "Maybe" @@ -12597,7 +12897,7 @@ "Sequence": { "atoms": [ 36, - 1855 + 1900 ] } }, @@ -12608,7 +12908,7 @@ }, { "Repetition": { - "atom": 1857, + "atom": 1902, "min": 0, "max": 1, "tag": "Maybe" @@ -12616,7 +12916,7 @@ }, { "Entity": { - "atom": 1060 + "atom": 1117 } }, { @@ -12626,7 +12926,7 @@ }, { "Repetition": { - "atom": 1860, + "atom": 1905, "min": 0, "max": 1, "tag": "Maybe" @@ -12641,7 +12941,7 @@ "Sequence": { "atoms": [ 36, - 1862 + 1907 ] } }, @@ -12652,7 +12952,7 @@ }, { "Repetition": { - "atom": 1864, + "atom": 1909, "min": 0, "max": 1, "tag": "Maybe" @@ -12662,29 +12962,29 @@ "Sequence": { "atoms": [ 36, - 1850, + 1895, 36, - 1852, + 1897, 36, - 1854, + 1899, 36, - 1856, + 1901, 36, - 1858, + 1903, 36, - 1859, + 1904, 36, - 1861, + 1906, 36, - 1863, + 1908, 36, - 1865 + 1910 ] } }, { "Repetition": { - "atom": 1847, + "atom": 1892, "min": 0, "max": null, "tag": "Repetition" @@ -12693,7 +12993,7 @@ { "Named": { "name": "imports", - "atom": 1867 + "atom": 1912 } }, { @@ -12705,7 +13005,7 @@ "Sequence": { "atoms": [ 36, - 1869 + 1914 ] } }, @@ -12716,7 +13016,7 @@ }, { "Repetition": { - "atom": 1871, + "atom": 1916, "min": 0, "max": 1, "tag": "Maybe" @@ -12726,25 +13026,25 @@ "Sequence": { "atoms": [ 36, - 1840, + 1885, 36, - 1842, + 1887, 36, - 1844, + 1889, 36, - 1846, + 1891, 36, - 1868, + 1913, 36, - 1870, + 1915, 36, - 1872 + 1917 ] } }, { "Entity": { - "atom": 1933 + "atom": 1978 } }, { @@ -12754,7 +13054,7 @@ }, { "Repetition": { - "atom": 1875, + "atom": 1920, "min": 0, "max": 1, "tag": "Maybe" @@ -12762,7 +13062,7 @@ }, { "Entity": { - "atom": 1881 + "atom": 1926 } }, { @@ -12777,7 +13077,7 @@ }, { "Repetition": { - "atom": 1879, + "atom": 1924, "min": 1, "max": null, "tag": "Repetition" @@ -12786,8 +13086,8 @@ { "Sequence": { "atoms": [ - 1878, - 1880 + 1923, + 1925 ] } }, @@ -12799,7 +13099,7 @@ { "Named": { "name": "name", - "atom": 1882 + "atom": 1927 } }, { @@ -12811,7 +13111,7 @@ "Sequence": { "atoms": [ 36, - 1884 + 1929 ] } }, @@ -12822,7 +13122,7 @@ }, { "Repetition": { - "atom": 1886, + "atom": 1931, "min": 0, "max": 1, "tag": "Maybe" @@ -12830,7 +13130,7 @@ }, { "Entity": { - "atom": 1895 + "atom": 1940 } }, { @@ -12840,7 +13140,7 @@ }, { "Repetition": { - "atom": 1889, + "atom": 1934, "min": 0, "max": 1, "tag": "Maybe" @@ -12855,36 +13155,36 @@ "Sequence": { "atoms": [ 36, - 1891 + 1936 ] } }, { "Entity": { - "atom": 1020 + "atom": 1077 } }, { "Named": { "name": "includes", - "atom": 1893 + "atom": 1938 } }, { "Sequence": { "atoms": [ 36, - 1890, + 1935, 36, - 1892, + 1937, 36, - 1894 + 1939 ] } }, { "Repetition": { - "atom": 1888, + "atom": 1933, "min": 0, "max": 1, "tag": "Maybe" @@ -12897,7 +13197,7 @@ }, { "Repetition": { - "atom": 1897, + "atom": 1942, "min": 0, "max": 1, "tag": "Maybe" @@ -12905,7 +13205,7 @@ }, { "Entity": { - "atom": 1925 + "atom": 1970 } }, { @@ -12915,7 +13215,7 @@ }, { "Repetition": { - "atom": 1900, + "atom": 1945, "min": 0, "max": 1, "tag": "Maybe" @@ -12930,7 +13230,7 @@ "Sequence": { "atoms": [ 36, - 1902 + 1947 ] } }, @@ -12943,7 +13243,7 @@ "Sequence": { "atoms": [ 36, - 1904 + 1949 ] } }, @@ -12954,7 +13254,7 @@ }, { "Repetition": { - "atom": 1906, + "atom": 1951, "min": 0, "max": 1, "tag": "Maybe" @@ -12962,7 +13262,7 @@ }, { "Entity": { - "atom": 1920 + "atom": 1965 } }, { @@ -12972,7 +13272,7 @@ }, { "Repetition": { - "atom": 1909, + "atom": 1954, "min": 0, "max": 1, "tag": "Maybe" @@ -12980,7 +13280,7 @@ }, { "Entity": { - "atom": 1915 + "atom": 1960 } }, { @@ -12995,7 +13295,7 @@ }, { "Repetition": { - "atom": 1913, + "atom": 1958, "min": 1, "max": null, "tag": "Repetition" @@ -13004,8 +13304,8 @@ { "Sequence": { "atoms": [ - 1912, - 1914 + 1957, + 1959 ] } }, @@ -13017,7 +13317,7 @@ { "Named": { "name": "condition", - "atom": 1916 + "atom": 1961 } }, { @@ -13027,7 +13327,7 @@ }, { "Repetition": { - "atom": 1918, + "atom": 1963, "min": 0, "max": 1, "tag": "Maybe" @@ -13037,19 +13337,19 @@ "Sequence": { "atoms": [ 36, - 1910, + 1955, 36, - 1911, + 1956, 36, - 1917, + 1962, 36, - 1919 + 1964 ] } }, { "Repetition": { - "atom": 1908, + "atom": 1953, "min": 0, "max": null, "tag": "Repetition" @@ -13058,7 +13358,7 @@ { "Named": { "name": "validations", - "atom": 1921 + "atom": 1966 } }, { @@ -13070,7 +13370,7 @@ "Sequence": { "atoms": [ 36, - 1923 + 1968 ] } }, @@ -13078,23 +13378,23 @@ "Sequence": { "atoms": [ 36, - 1901, + 1946, 36, - 1903, + 1948, 36, - 1905, + 1950, 36, - 1907, + 1952, 36, - 1922, + 1967, 36, - 1924 + 1969 ] } }, { "Repetition": { - "atom": 1899, + "atom": 1944, "min": 0, "max": 1, "tag": "Maybe" @@ -13107,7 +13407,7 @@ }, { "Repetition": { - "atom": 1927, + "atom": 1972, "min": 0, "max": 1, "tag": "Maybe" @@ -13122,7 +13422,7 @@ "Sequence": { "atoms": [ 36, - 1929 + 1974 ] } }, @@ -13133,7 +13433,7 @@ }, { "Repetition": { - "atom": 1931, + "atom": 1976, "min": 0, "max": 1, "tag": "Maybe" @@ -13143,39 +13443,39 @@ "Sequence": { "atoms": [ 36, - 1876, + 1921, 36, - 1877, + 1922, 36, - 1883, + 1928, 36, - 1885, + 1930, 36, - 1887, + 1932, 36, - 1896, + 1941, 36, - 1898, + 1943, 36, - 1926, + 1971, 36, - 1928, + 1973, 36, - 1930, + 1975, 36, - 1932 + 1977 ] } }, { "Named": { "name": "collections", - "atom": 1874 + "atom": 1919 } }, { "Entity": { - "atom": 1977 + "atom": 2022 } }, { @@ -13185,7 +13485,7 @@ }, { "Repetition": { - "atom": 1936, + "atom": 1981, "min": 0, "max": 1, "tag": "Maybe" @@ -13200,7 +13500,7 @@ "Sequence": { "atoms": [ 36, - 1938 + 1983 ] } }, @@ -13211,7 +13511,7 @@ }, { "Repetition": { - "atom": 1940, + "atom": 1985, "min": 0, "max": 1, "tag": "Maybe" @@ -13226,7 +13526,7 @@ "Sequence": { "atoms": [ 36, - 1942 + 1987 ] } }, @@ -13237,7 +13537,7 @@ }, { "Repetition": { - "atom": 1944, + "atom": 1989, "min": 0, "max": 1, "tag": "Maybe" @@ -13245,7 +13545,7 @@ }, { "Entity": { - "atom": 1967 + "atom": 2012 } }, { @@ -13255,7 +13555,7 @@ }, { "Repetition": { - "atom": 1947, + "atom": 1992, "min": 0, "max": 1, "tag": "Maybe" @@ -13263,7 +13563,7 @@ }, { "Entity": { - "atom": 1953 + "atom": 1998 } }, { @@ -13278,7 +13578,7 @@ }, { "Repetition": { - "atom": 1951, + "atom": 1996, "min": 1, "max": null, "tag": "Repetition" @@ -13287,8 +13587,8 @@ { "Sequence": { "atoms": [ - 1950, - 1952 + 1995, + 1997 ] } }, @@ -13300,7 +13600,7 @@ { "Named": { "name": "format_type", - "atom": 1954 + "atom": 1999 } }, { @@ -13310,7 +13610,7 @@ }, { "Repetition": { - "atom": 1956, + "atom": 2001, "min": 0, "max": 1, "tag": "Maybe" @@ -13325,7 +13625,7 @@ "Sequence": { "atoms": [ 36, - 1958 + 2003 ] } }, @@ -13336,7 +13636,7 @@ }, { "Repetition": { - "atom": 1960, + "atom": 2005, "min": 0, "max": 1, "tag": "Maybe" @@ -13344,7 +13644,7 @@ }, { "Entity": { - "atom": 1060 + "atom": 1117 } }, { @@ -13356,7 +13656,7 @@ "Sequence": { "atoms": [ 36, - 1963 + 2008 ] } }, @@ -13367,7 +13667,7 @@ }, { "Repetition": { - "atom": 1965, + "atom": 2010, "min": 0, "max": 1, "tag": "Maybe" @@ -13377,23 +13677,23 @@ "Sequence": { "atoms": [ 36, - 1948, + 1993, 36, - 1949, + 1994, 36, - 1955, + 2000, 36, - 1957, + 2002, 36, - 1959, + 2004, 36, - 1961, + 2006, 36, - 1962, + 2007, 36, - 1964, + 2009, 36, - 1966 + 2011 ] } }, @@ -13404,7 +13704,7 @@ }, { "Repetition": { - "atom": 1968, + "atom": 2013, "min": 0, "max": 1, "tag": "Maybe" @@ -13414,14 +13714,14 @@ "Sequence": { "atoms": [ 36, - 1946, - 1969 + 1991, + 2014 ] } }, { "Repetition": { - "atom": 1970, + "atom": 2015, "min": 0, "max": null, "tag": "Repetition" @@ -13430,7 +13730,7 @@ { "Named": { "name": "exports", - "atom": 1971 + "atom": 2016 } }, { @@ -13442,7 +13742,7 @@ "Sequence": { "atoms": [ 36, - 1973 + 2018 ] } }, @@ -13453,7 +13753,7 @@ }, { "Repetition": { - "atom": 1975, + "atom": 2020, "min": 0, "max": 1, "tag": "Maybe" @@ -13463,36 +13763,36 @@ "Sequence": { "atoms": [ 36, - 1937, + 1982, 36, - 1939, + 1984, 36, - 1941, + 1986, 36, - 1943, + 1988, 36, - 1945, + 1990, 36, - 1972, + 2017, 36, - 1974, + 2019, 36, - 1976 + 2021 ] } }, { "Entity": { - "atom": 1099 + "atom": 1156 } }, { "Alternative": { "atoms": [ - 1838, - 1934, - 1935, - 1978 + 1883, + 1979, + 1980, + 2023 ] } }, @@ -13503,7 +13803,7 @@ }, { "Repetition": { - "atom": 1980, + "atom": 2025, "min": 0, "max": 1, "tag": "Maybe" @@ -13513,14 +13813,14 @@ "Sequence": { "atoms": [ 36, - 1837, - 1981 + 1882, + 2026 ] } }, { "Repetition": { - "atom": 1982, + "atom": 2027, "min": 0, "max": null, "tag": "Repetition" @@ -13529,12 +13829,12 @@ { "Named": { "name": "instances", - "atom": 1983 + "atom": 2028 } }, { "Repetition": { - "atom": 1836, + "atom": 1881, "min": 0, "max": 1, "tag": "Maybe" @@ -13549,7 +13849,7 @@ "Sequence": { "atoms": [ 36, - 1986 + 2031 ] } }, @@ -13560,7 +13860,7 @@ }, { "Repetition": { - "atom": 1988, + "atom": 2033, "min": 0, "max": 1, "tag": "Maybe" @@ -13570,44 +13870,44 @@ "Sequence": { "atoms": [ 36, - 1822, + 1867, 36, - 1824, + 1869, 36, - 1829, + 1874, 36, - 1831, + 1876, 36, - 1833, + 1878, 36, - 1835, + 1880, 36, - 1985, + 2030, 36, - 1987, + 2032, 36, - 1989 + 2034 ] } }, { "Entity": { - "atom": 1099 + "atom": 1156 } }, { "Entity": { - "atom": 1995 + "atom": 2040 } }, { "Entity": { - "atom": 1678 + "atom": 1723 } }, { "Repetition": { - "atom": 1993, + "atom": 2038, "min": 1, "max": null, "tag": "Repetition" @@ -13616,18 +13916,18 @@ { "Named": { "name": "members", - "atom": 1994 + "atom": 2039 } }, { "Alternative": { "atoms": [ 93, - 1687, - 1712, - 1820, - 1991, - 1992 + 1732, + 1757, + 1865, + 2036, + 2037 ] } }, @@ -13638,7 +13938,7 @@ }, { "Repetition": { - "atom": 1997, + "atom": 2042, "min": 0, "max": 1, "tag": "Maybe" @@ -13648,9 +13948,9 @@ "Sequence": { "atoms": [ 36, - 1996, + 2041, 36, - 1998 + 2043 ] } }, @@ -13665,7 +13965,7 @@ { "Named": { "name": "members", - "atom": 2000 + "atom": 2045 } }, { @@ -13674,7 +13974,7 @@ 36, 91, 36, - 2001 + 2046 ] } }, @@ -13682,13 +13982,13 @@ "Sequence": { "atoms": [ 36, - 2002, + 2047, 36 ] } } ], - "root": 2003 + "root": 2048 }, "bindings": [] } @@ -13703,64 +14003,77 @@ "rule data_value: branches 3 and 4 are order-dependent (shared first bytes; ordered choice is decisive)", "rule data_value: branches 3 and 5 are order-dependent (shared first bytes; ordered choice is decisive)", "rule map_args: branches 1 and 2 are order-dependent (shared first bytes; ordered choice is decisive)", - "rule class_inner_definitions: branches 1 and 2 are order-dependent (shared first bytes; ordered choice is decisive)", - "rule class_inner_definitions: branches 1 and 4 are order-dependent (shared first bytes; ordered choice is decisive)", - "rule class_inner_definitions: branches 1 and 6 are order-dependent (shared first bytes; ordered choice is decisive)", - "rule class_inner_definitions: branches 1 and 8 are order-dependent (first set not statically known)", - "rule class_inner_definitions: branches 2 and 4 are order-dependent (shared first bytes; ordered choice is decisive)", - "rule class_inner_definitions: branches 2 and 6 are order-dependent (shared first bytes; ordered choice is decisive)", - "rule class_inner_definitions: branches 2 and 8 are order-dependent (first set not statically known)", + "rule class_inner_definitions: branches 1 and 8 are order-dependent (shared first bytes; ordered choice is decisive)", + "rule class_inner_definitions: branches 1 and 10 are order-dependent (first set not statically known)", + "rule class_inner_definitions: branches 2 and 8 are order-dependent (shared first bytes; ordered choice is decisive)", + "rule class_inner_definitions: branches 2 and 9 are order-dependent (shared first bytes; ordered choice is decisive)", + "rule class_inner_definitions: branches 2 and 10 are order-dependent (first set not statically known)", + "rule class_inner_definitions: branches 2 and 11 are order-dependent (shared first bytes; ordered choice is decisive)", "rule class_inner_definitions: branches 3 and 4 are order-dependent (shared first bytes; ordered choice is decisive)", - "rule class_inner_definitions: branches 3 and 5 are order-dependent (shared first bytes; ordered choice is decisive)", "rule class_inner_definitions: branches 3 and 6 are order-dependent (shared first bytes; ordered choice is decisive)", - "rule class_inner_definitions: branches 3 and 7 are order-dependent (shared first bytes; ordered choice is decisive)", - "rule class_inner_definitions: branches 3 and 8 are order-dependent (first set not statically known)", - "rule class_inner_definitions: branches 4 and 5 are order-dependent (shared first bytes; ordered choice is decisive)", + "rule class_inner_definitions: branches 3 and 8 are order-dependent (shared first bytes; ordered choice is decisive)", + "rule class_inner_definitions: branches 3 and 10 are order-dependent (first set not statically known)", "rule class_inner_definitions: branches 4 and 6 are order-dependent (shared first bytes; ordered choice is decisive)", - "rule class_inner_definitions: branches 4 and 7 are order-dependent (shared first bytes; ordered choice is decisive)", - "rule class_inner_definitions: branches 4 and 8 are order-dependent (first set not statically known)", + "rule class_inner_definitions: branches 4 and 8 are order-dependent (shared first bytes; ordered choice is decisive)", + "rule class_inner_definitions: branches 4 and 10 are order-dependent (first set not statically known)", "rule class_inner_definitions: branches 5 and 6 are order-dependent (shared first bytes; ordered choice is decisive)", "rule class_inner_definitions: branches 5 and 7 are order-dependent (shared first bytes; ordered choice is decisive)", - "rule class_inner_definitions: branches 5 and 8 are order-dependent (first set not statically known)", + "rule class_inner_definitions: branches 5 and 8 are order-dependent (shared first bytes; ordered choice is decisive)", + "rule class_inner_definitions: branches 5 and 9 are order-dependent (shared first bytes; ordered choice is decisive)", + "rule class_inner_definitions: branches 5 and 10 are order-dependent (first set not statically known)", "rule class_inner_definitions: branches 6 and 7 are order-dependent (shared first bytes; ordered choice is decisive)", - "rule class_inner_definitions: branches 6 and 8 are order-dependent (first set not statically known)", + "rule class_inner_definitions: branches 6 and 8 are order-dependent (shared first bytes; ordered choice is decisive)", "rule class_inner_definitions: branches 6 and 9 are order-dependent (shared first bytes; ordered choice is decisive)", - "rule class_inner_definitions: branches 6 and 10 are order-dependent (shared first bytes; ordered choice is decisive)", - "rule class_inner_definitions: branches 7 and 8 are order-dependent (first set not statically known)", + "rule class_inner_definitions: branches 6 and 10 are order-dependent (first set not statically known)", + "rule class_inner_definitions: branches 7 and 8 are order-dependent (shared first bytes; ordered choice is decisive)", "rule class_inner_definitions: branches 7 and 9 are order-dependent (shared first bytes; ordered choice is decisive)", - "rule class_inner_definitions: branches 8 and 9 are order-dependent (first set not statically known)", + "rule class_inner_definitions: branches 7 and 10 are order-dependent (first set not statically known)", + "rule class_inner_definitions: branches 8 and 9 are order-dependent (shared first bytes; ordered choice is decisive)", "rule class_inner_definitions: branches 8 and 10 are order-dependent (first set not statically known)", - "rule class_inner_definitions: branches 8 and 11 are order-dependent (first set not statically known)", - "rule class_inner_definitions: branches 10 and 11 are order-dependent (shared first bytes; ordered choice is decisive)", + "rule class_inner_definitions: branches 8 and 11 are order-dependent (shared first bytes; ordered choice is decisive)", + "rule class_inner_definitions: branches 8 and 12 are order-dependent (shared first bytes; ordered choice is decisive)", + "rule class_inner_definitions: branches 9 and 10 are order-dependent (first set not statically known)", + "rule class_inner_definitions: branches 9 and 11 are order-dependent (shared first bytes; ordered choice is decisive)", + "rule class_inner_definitions: branches 10 and 11 are order-dependent (first set not statically known)", + "rule class_inner_definitions: branches 10 and 12 are order-dependent (first set not statically known)", + "rule class_inner_definitions: branches 10 and 13 are order-dependent (first set not statically known)", + "rule class_inner_definitions: branches 12 and 13 are order-dependent (shared first bytes; ordered choice is decisive)", "rule value_name: branches 1 and 2 are order-dependent (shared first bytes; ordered choice is decisive)", - "rule enum_inner_definitions: branches 1 and 2 are order-dependent (shared first bytes; ordered choice is decisive)", "rule enum_inner_definitions: branches 1 and 7 are order-dependent (shared first bytes; ordered choice is decisive)", + "rule enum_inner_definitions: branches 1 and 8 are order-dependent (shared first bytes; ordered choice is decisive)", "rule enum_inner_definitions: branches 1 and 9 are order-dependent (shared first bytes; ordered choice is decisive)", - "rule enum_inner_definitions: branches 2 and 7 are order-dependent (shared first bytes; ordered choice is decisive)", + "rule enum_inner_definitions: branches 1 and 11 are order-dependent (shared first bytes; ordered choice is decisive)", "rule enum_inner_definitions: branches 2 and 9 are order-dependent (shared first bytes; ordered choice is decisive)", + "rule enum_inner_definitions: branches 2 and 10 are order-dependent (shared first bytes; ordered choice is decisive)", + "rule enum_inner_definitions: branches 2 and 11 are order-dependent (shared first bytes; ordered choice is decisive)", "rule enum_inner_definitions: branches 3 and 4 are order-dependent (shared first bytes; ordered choice is decisive)", - "rule enum_inner_definitions: branches 3 and 5 are order-dependent (shared first bytes; ordered choice is decisive)", - "rule enum_inner_definitions: branches 3 and 6 are order-dependent (shared first bytes; ordered choice is decisive)", - "rule enum_inner_definitions: branches 3 and 7 are order-dependent (shared first bytes; ordered choice is decisive)", - "rule enum_inner_definitions: branches 3 and 8 are order-dependent (shared first bytes; ordered choice is decisive)", "rule enum_inner_definitions: branches 3 and 9 are order-dependent (shared first bytes; ordered choice is decisive)", - "rule enum_inner_definitions: branches 4 and 5 are order-dependent (shared first bytes; ordered choice is decisive)", - "rule enum_inner_definitions: branches 4 and 6 are order-dependent (shared first bytes; ordered choice is decisive)", - "rule enum_inner_definitions: branches 4 and 7 are order-dependent (shared first bytes; ordered choice is decisive)", - "rule enum_inner_definitions: branches 4 and 8 are order-dependent (shared first bytes; ordered choice is decisive)", + "rule enum_inner_definitions: branches 3 and 11 are order-dependent (shared first bytes; ordered choice is decisive)", "rule enum_inner_definitions: branches 4 and 9 are order-dependent (shared first bytes; ordered choice is decisive)", + "rule enum_inner_definitions: branches 4 and 11 are order-dependent (shared first bytes; ordered choice is decisive)", "rule enum_inner_definitions: branches 5 and 6 are order-dependent (shared first bytes; ordered choice is decisive)", "rule enum_inner_definitions: branches 5 and 7 are order-dependent (shared first bytes; ordered choice is decisive)", "rule enum_inner_definitions: branches 5 and 8 are order-dependent (shared first bytes; ordered choice is decisive)", "rule enum_inner_definitions: branches 5 and 9 are order-dependent (shared first bytes; ordered choice is decisive)", + "rule enum_inner_definitions: branches 5 and 10 are order-dependent (shared first bytes; ordered choice is decisive)", + "rule enum_inner_definitions: branches 5 and 11 are order-dependent (shared first bytes; ordered choice is decisive)", "rule enum_inner_definitions: branches 6 and 7 are order-dependent (shared first bytes; ordered choice is decisive)", "rule enum_inner_definitions: branches 6 and 8 are order-dependent (shared first bytes; ordered choice is decisive)", "rule enum_inner_definitions: branches 6 and 9 are order-dependent (shared first bytes; ordered choice is decisive)", + "rule enum_inner_definitions: branches 6 and 10 are order-dependent (shared first bytes; ordered choice is decisive)", + "rule enum_inner_definitions: branches 6 and 11 are order-dependent (shared first bytes; ordered choice is decisive)", "rule enum_inner_definitions: branches 7 and 8 are order-dependent (shared first bytes; ordered choice is decisive)", "rule enum_inner_definitions: branches 7 and 9 are order-dependent (shared first bytes; ordered choice is decisive)", + "rule enum_inner_definitions: branches 7 and 10 are order-dependent (shared first bytes; ordered choice is decisive)", + "rule enum_inner_definitions: branches 7 and 11 are order-dependent (shared first bytes; ordered choice is decisive)", "rule enum_inner_definitions: branches 8 and 9 are order-dependent (shared first bytes; ordered choice is decisive)", + "rule enum_inner_definitions: branches 8 and 10 are order-dependent (shared first bytes; ordered choice is decisive)", + "rule enum_inner_definitions: branches 8 and 11 are order-dependent (shared first bytes; ordered choice is decisive)", "rule enum_inner_definitions: branches 9 and 10 are order-dependent (shared first bytes; ordered choice is decisive)", + "rule enum_inner_definitions: branches 9 and 11 are order-dependent (shared first bytes; ordered choice is decisive)", "rule enum_inner_definitions: branches 10 and 11 are order-dependent (shared first bytes; ordered choice is decisive)", + "rule enum_inner_definitions: branches 11 and 12 are order-dependent (shared first bytes; ordered choice is decisive)", + "rule enum_inner_definitions: branches 12 and 13 are order-dependent (shared first bytes; ordered choice is decisive)", "rule diagram_inner_definitions: branches 1 and 2 are order-dependent (shared first bytes; ordered choice is decisive)", "rule diagram_inner_definitions: branches 1 and 3 are order-dependent (shared first bytes; ordered choice is decisive)", "rule diagram_inner_definitions: branches 1 and 4 are order-dependent (shared first bytes; ordered choice is decisive)", @@ -13895,7 +14208,7 @@ } ], "docs": {}, - "source": "# LutaML Model Language (LML) — PARG grammar\n#\n# Ported from the original Parslet grammar (removed 2026-10; git history\n# has the reference implementation if the port needs re-checking).\n# PEG semantics: ordered choice, greedy repetition. Rule order within\n# alternatives preserves the original Parslet backtracking order.\n#\n# Capture discipline: repetitions are parenthesized before `as` so a\n# capture binds the whole match (Parslet's `.repeat.as(:x)` shape);\n# `[ x as k ]` yields k: nil when absent (Parslet omits the key —\n# consumers treat nil and absent as equivalent).\ngrammar Lml version \"1.0.0\" {\n # ---- Trivia (parsanol-ruby#134 skip rule) ----\n # Grammar-native trivia replaces the pre-parse comment stripping:\n # `//` line and `/* */` block comments (RS 3001 par. Comment) plus\n # blanks/tabs are consumed and ignored between tokens. Newlines stay\n # grammar-visible (line-oriented rules keep their semantics; the\n # preprocessor preserved them too). Atomic token rules keep string\n # literals and identifiers contiguous.\n skip = trivia\n trivia = 1*( ( 1*( \" \" / %x09 ) ) / ( line_comment [ ( [ %x0D ] %x0A / %x0D ) ] ) / block_comment )\n line_comment = \"//\" ( *( !newline any_char ) )\n block_comment = \"/*\" ( *( !\"*/\" any_char ) ) \"*/\"\n atomic kw_association_sp = \"association\" 1*\" \"\n atomic kw_artifact_sp = \"artifact\" 1*\" \"\n atomic kw_attribute_sp = \"attribute\" 1*\" \"\n atomic kw_caption_sp = \"caption\" 1*\" \"\n atomic kw_class_sp = \"class\" 1*\" \"\n atomic kw_collection_sp = \"collection\" 1*\" \"\n atomic kw_condition_sp = \"condition\" 1*\" \"\n atomic kw_data_type_sp = \"data_type\" 1*\" \"\n atomic kw_definition_sp = \"definition\" 1*\" \"\n atomic kw_derive_sp = \"derive\" 1*\" \"\n atomic kw_element_sp = \"element\" 1*\" \"\n atomic kw_enum_sp = \"enum\" 1*\" \"\n atomic kw_fontname_sp = \"fontname\" 1*\" \"\n atomic kw_format_sp = \"format\" 1*\" \"\n atomic kw_hide_sp = \"hide\" 1*\" \"\n atomic kw_import_sp = \"import\" 1*\" \"\n atomic kw_instance_sp = \"instance\" 1*\" \"\n atomic kw_isa_sp = \"isa\" 1*\" \"\n atomic kw_map_sp = \"map\" 1*\" \"\n atomic kw_map_attribute_sp = \"map_attribute\" 1*\" \"\n atomic kw_map_content_sp = \"map_content\" 1*\" \"\n atomic kw_map_element_sp = \"map_element\" 1*\" \"\n atomic kw_map_key_sp = \"map_key\" 1*\" \"\n atomic kw_map_value_sp = \"map_value\" 1*\" \"\n atomic kw_mapping_sp = \"mapping\" 1*\" \"\n atomic kw_member_sp = \"member\" 1*\" \"\n atomic kw_member_type_sp = \"member_type\" 1*\" \"\n atomic kw_namespace_sp = \"namespace\" 1*\" \"\n atomic kw_owner_sp = \"owner\" 1*\" \"\n atomic kw_owner_type_sp = \"owner_type\" 1*\" \"\n atomic kw_package_sp = \"package\" 1*\" \"\n atomic kw_pattern_sp = \"pattern\" 1*\" \"\n atomic kw_prefix_sp = \"prefix\" 1*\" \"\n atomic kw_primitive_sp = \"primitive\" 1*\" \"\n atomic kw_require_sp = \"require\" 1*\" \"\n atomic kw_show_sp = \"show\" 1*\" \"\n atomic kw_string_format_sp = \"string_format\" 1*\" \"\n atomic kw_title_sp = \"title\" 1*\" \"\n atomic kw_to_instance_sp = \"to_instance\" 1*\" \"\n atomic kw_uri_sp = \"uri\" 1*\" \"\n atomic kw_value_sp = \"value\" 1*\" \"\n atomic kw_values_sp = \"values\" 1*\" \"\n # ---- Character primitives ----\n alpha = %x41-5A / %x61-7A\n atomic word = %x41-5A / %x61-7A / %x30-39 / \"_\"\n cardchar = %x30-39 / %x61-7A / \"*\"\n # Parslet's `any`: any Unicode character (not just bytes)\n any_char = %x00-10FFFF\n # [^\\s\\n\\r] — regex \\s covers space, tab, CR, LF, VT, FF\n atomic nonspace = !\" \" !%x09 !%x0A !%x0B !%x0C !%x0D any_char\n quote = %x22 / %x27\n newline = %x0D / %x0A\n\n whitespace = 1*( ( 1*( \" \" / %x09 ) ) / ( [ %x0D ] %x0A ) / %x0D / \";\" / line_comment / block_comment )\n\n # match['\"\\'']\n quotes = %x22 / %x27\n\n # quoted('\"', :string) | quoted(\"'\", :string)\n atomic dq_string = %x22 until \"\\\"\" as string %x22\n atomic sq_string = %x27 until \"'\" as string %x27\n quoted_string = dq_string / sq_string\n # any_quoted(:path) for view import\n atomic dq_path = %x22 until \"\\\"\" as path %x22\n atomic sq_path = %x27 until \"'\" as path %x27\n\n boolean = ( \"true\" / \"false\" ) as boolean\n number = ( 1*%x30-39 \".\" 1*%x30-39 ) as float / ( 1*%x30-39 ) as number\n variable = quoted_string / 1*word\n reference = ( \"reference:(\" / \"ref:(\" ) ( variable *( \".\" variable ) ) as reference \")\"\n range = ( variable as start \"..\" variable as end ) as range\n namespaced_identifier = variable *( \"::\" variable )\n comment_definition = ( \"**\" / \"#\" ) ( *( !newline ANY ) ) as comments\n comment_multiline_definition = \"*|\" until \"|*\" as comments [ whitespace ] \"|*\"\n\n class_name_chars = 1*( %x41-5A / %x61-7A / %x30-39 / \" \" / \"_\" / \"-\" / \":\" / \".\" )\n class_name = class_name_chars [ \"(\" class_name_chars \")\" ]\n cardinality_body_definition = cardchar as min [ \"..\" [ cardchar as max ] ]\n cardinality = \"[\" cardinality_body_definition as cardinality \"]\"\n\n data_value = boolean / reference / range / number / quoted_string\n key_value_pair = variable as key [ \"=\" ] data_value as value\n key_value_map = \"{\" [ whitespace ] ( *( key_value_pair whitespace ) ) as key_value_map \"}\"\n kw_visibility_modifier = \"+\" / \"-\" / \"#\" / \"~\"\n\n # ---- Attributes ----\n attribute = comment_definition / ( variable as key [ \"+\" as add ] [ \"=\" ] attribute_value as value )\n attributes = ( *( definition_body / definition_line / attribute_line / whitespace ) ) as attributes\n attribute_line = attribute [ [ \",\" ] whitespace ]\n visibility = kw_visibility_modifier as visibility_modifier\n attribute_stereotype = \"<<\" ( 1*( %x41-5A / %x61-7A / %x30-39 / \"_\" / \"-\" / \"/\" ) ) as stereotype \">>\"\n atomic type_token = 1*( !( \"//\" / \"/*\" ) typechar )\n atomic typechar = %x41-5A / %x61-7A / %x30-39 / \"_\" / \"-\" / \" \" / \":\" / \"/\" / \"+\"\n atomic namechar = %x41-5A / %x61-7A / %x30-39 / \"_\" / \"-\" / \"/\" / \"+\"\n attribute_type = [ \":\" ] [ attribute_stereotype ] [ quotes as type_literal ] ( type_token ) as type [ quotes ]\n attribute_name = ( 1*namechar ) as name\n attribute_definition_name = ( quotes ( 1*( %x41-5A / %x61-7A / %x30-39 / \"_\" / \"-\" / \" \" / \"/\" / \"+\" ) ) as name quotes ) / attribute_name\n attribute_definition = ( [ visibility ] as visibility attribute_definition_name [ attribute_type ] [ cardinality ] [ class_body ] ) as attributes\n\n keyword_type_argument = \"type\" ( 1*nonspace ) as type [ whitespace ]\n keyword_cardinality_argument = \"cardinality\" cardinality_body_definition as cardinality [ whitespace ]\n keyword_any_argument = ( keyword_any_name ) as name [ \"=\" / \":\" ] attribute_value as value [ whitespace ]\n atomic keyword_any_name = 1*( !( \"{\" / \"}\" ) nonspace )\n keyword_values_argument = kw_values_sp ( ( value_set_body ) as value_set / ( variable ) as value_set_ref ) [ whitespace ]\n keyword_pattern_argument = ( kw_pattern_sp \"/\" ( *( ( \"\\\\\" any_char ) / ( !\"/\" any_char ) ) ) as pattern \"/\" [ whitespace ] )\n value_set_body = \"{\" [ whitespace ] ( *( ( ( data_value / variable ) as item ) [ \",\" ] [ whitespace ] ) ) as items \"}\"\n keyword_attribute_options = *( keyword_type_argument / keyword_cardinality_argument / keyword_values_argument / keyword_pattern_argument / ( keyword_any_argument ) as properties )\n keyword_attribute_body = \"{\" [ whitespace ] keyword_attribute_options [ whitespace ] \"}\"\n keyword_attribute_definition = ( kw_attribute_sp attribute_name keyword_attribute_body ) as attributes\n\n # ---- Associations ----\n owner_cardinality = \"[\" cardinality_body_definition as owner_end_cardinality \"]\"\n owner_attribute_name = \"#\" [ visibility ] variable as owner_end_attribute_name\n owner_definition = [ whitespace ] kw_owner_sp variable as owner_end [ owner_attribute_name ] [ owner_cardinality ]\n owner_type = [ whitespace ] kw_owner_type_sp variable as owner_end_type\n member_cardinality = \"[\" cardinality_body_definition as member_end_cardinality \"]\"\n member_attribute_name = \"#\" [ visibility ] variable as member_end_attribute_name\n member_definition = [ whitespace ] kw_member_sp variable as member_end [ member_attribute_name ] [ member_cardinality ]\n member_type = [ whitespace ] kw_member_type_sp variable as member_end_type\n association_inner_definition = ( owner_type / member_type / owner_definition / member_definition / comment_definition / comment_multiline_definition ) [ whitespace ]\n association_body = \"{\" [ whitespace ] ( *( association_inner_definition ) ) as members \"}\"\n association_definition = [ whitespace ] kw_association_sp [ variable as name ] association_body\n\n # ---- Definitions ----\n # ---- Operations (class methods) ----\n # Symbol visibility reuses the attribute prefix (+ - # ~); the\n # transform maps it to public/private/protected/friendly.\n operation_definition = [ whitespace ] [ visibility ] ( 1*word ) as name \"(\" [ ( operation_params ) as owned_parameter ] \")\" [ operation_return ] [ operation_body ] [ whitespace ]\n operation_params = operation_param *( \",\" [ whitespace ] operation_param )\n operation_return = \":\" ( type_token ) as return_type [ cardinality ]\n # A parenthesized alternative is not an Entity, so an optional body\n # of `x as k` around it gets no skip injection - the blank after \"=\"\n # was unconsumable. Reference a rule instead.\n operation_param = ( [ ( \"in\" / \"out\" / \"inout\" ) as direction 1*\" \" ] ( 1*word ) as name [ \":\" ] param_type as type [ \"=\" ] param_default_value as param_default )\n param_default_value = [ quoted_string / ( 1*word ) / number ]\n # The attribute pattern: separator as its own optional, value as a\n # rule sibling. A `x as k` optional body gets no interior skip\n # injection, so [ \":\" type as t ] cannot consume the blank after\n # the separator.\n param_type = [ type_token ]\n operation_body = \"{\" [ whitespace ] [ ( *( ( 1*word ) as stereotype [ \",\" ] [ whitespace ] ) ) as stereotype ] [ whitespace ] \"}\"\n\n class_modifier = [ [ whitespace ] modifier_token ]\n atomic modifier_token = ( ( \"abstract\" / \"interface\" ) as modifier 1*\" \" )\n # RS 3001 element visibility modifier (keyword form, symmetric with\n # abstract/interface; `package` is the UML \"friendly\" (~) level).\n atomic element_visibility = ( ( \"public\" / \"private\" / \"protected\" / \"package\" ) as visibility 1*\" \" )\n # ---- Namespaces (RS 3010 extension: lutaml-model XmlNamespace) ----\n namespace_uri_line = ( kw_uri_sp ( quoted_string / ( 1*word ) ) as uri [ whitespace ] )\n namespace_prefix_line = ( kw_prefix_sp ( quoted_string / ( 1*word ) ) as prefix [ whitespace ] )\n namespace_body = \"{\" [ whitespace ] ( *( namespace_uri_line / namespace_prefix_line ) ) as members \"}\"\n namespace_inline = ( ( quoted_string ) as uri [ kw_prefix_sp ( quoted_string / ( 1*word ) ) as prefix ] )\n namespace_definition = ( [ whitespace ] kw_namespace_sp ( 1*word ) as name ( namespace_body / namespace_inline ) [ whitespace ] ) as namespaces\n\n # ---- Serialization mappings (RS 3010 extension: sibling-linked) ----\n serialization_body = \"{\" [ whitespace ] ( *( serialization_line ) ) as rules \"}\"\n serialization_line = ( mapping_element_name_line / mapping_element_line / mapping_attribute_line / mapping_content_line / mapping_namespace_line / mapping_mixed_line / legacy_map_line / mapping_map_line / mapping_map_key_line / mapping_map_value_line ) [ whitespace ]\n legacy_map_line = ( kw_map_sp dq_string as wire \",\" \"to:\" ( quoted_string / ( 1*word ) ) as to [ whitespace ] ) as legacy_map\n mapping_element_name_line = ( kw_element_sp dq_string as element_name [ whitespace ] ) as element_name\n mapping_element_line = ( kw_map_element_sp ( element_args ) ) as map_element\n element_args = ( dq_string as wire [ ( 1*word ) as field ] / ( 1*word ) as field )\n mapping_attribute_line = ( kw_map_attribute_sp ( attribute_args ) ) as map_attribute\n attribute_args = ( dq_string as wire [ ( 1*word ) as field ] / ( 1*word ) as field )\n mapping_content_line = ( kw_map_content_sp ( 1*word ) as field ) as map_content\n mapping_namespace_line = ( kw_namespace_sp ( 1*word ) as namespace_ref ) as map_namespace\n mapping_mixed_line = ( \"mixed_content\" ) as mixed_content\n mapping_map_line = ( kw_map_sp map_args ) as map\n map_args = ( dq_string as wire ( 1*word ) as field / dq_string as wire / ( 1*word ) as field )\n mapping_map_key_line = ( kw_map_key_sp kw_to_instance_sp ( 1*word ) as field ) as map_key\n mapping_map_value_line = ( kw_map_value_sp map_value_mode ( 1*word ) as field ) as map_value\n atomic map_value_mode = ( ( \"to_instance\" / \"as_attribute\" ) as mode 1*\" \" )\n mapping_definition = ( [ whitespace ] kw_mapping_sp ( 1*word ) as format ( 1*word ) as target serialization_body [ whitespace ] ) as serialization_mappings\n\n # ---- Mapping blocks (lutaml-model wire names) ----\n map_name = ( quoted_string / 1*( word / \"-\" / \".\" ) )\n map_line = kw_map_sp ( map_name ) as wire \",\" \"to:\" ( map_name ) as to [ whitespace ]\n mapping_body = \"{\" [ whitespace ] ( *( map_line ) ) as maps \"}\"\n class_mapping_section = ( [ whitespace ] kw_mapping_sp ( 1*word ) as format serialization_body [ whitespace ] ) as serialization_mappings\n\n derive_definition = ( [ whitespace ] kw_derive_sp attribute_name \":\" [ quotes ] ( type_token ) as type [ quotes ] ) as derived_field [ whitespace ]\n string_format_item = ( sf_key_token ( quoted_string / 1*nonspace ) as value [ whitespace ] )\n atomic sf_key_token = ( ( \"artifact\" / \"root\" ) as key 1*\" \" )\n string_format_body = \"{\" [ whitespace ] ( *( string_format_item ) ) as items [ whitespace ] \"}\"\n string_format_definition = ( [ whitespace ] kw_string_format_sp ( variable ) as format string_format_body ) as string_format\n\n class_inner_definitions = definition_body / definition_line / class_mapping_section / derive_definition / string_format_definition / ( operation_definition ) as operations / attribute_comma_definition / ( !( kw_attribute_sp ) attribute_definition ) / keyword_attribute_definition / comment_definition / comment_multiline_definition\n class_inner_definition = class_inner_definitions [ whitespace ]\n class_body = \"{\" [ whitespace ] ( *( class_inner_definition ) ) as members \"}\"\n parent_class = \"<\" ( class_name_chars ) as parent_class\n class_definition = [ element_visibility ] class_modifier [ whitespace ] kw_class_sp class_name as name [ parent_class ] [ attribute_stereotype ] [ class_body ]\n\n # Balanced-brace definition text: nested \"{...}\" and \"\\\"-escapes allowed\n definition_content = *( ( \"\\\\\" any_char ) / ( \"{\" definition_content \"}\" ) / ( !\"}\" any_char ) )\n definition_body = \"definition\" [ whitespace ] \"{\" ( definition_content ) as definition \"}\"\n definition_line = ( kw_definition_sp ( dq_string / sq_string ) ) as definition [ whitespace ]\n\n member_field_line = attribute_name ( 1*nonspace ) as member_field_type [ whitespace ]\n member_fields_definition = ( [ whitespace ] \"member_fields\" [ whitespace ] \"{\" [ whitespace ] ( *( member_field_line ) ) as member_fields [ whitespace ] \"}\" ) as member_fields_decl\n attribute_comma_definition = ( [ whitespace ] kw_attribute_sp attribute_name \",\" ( type_token ) as type [ \"{\" [ whitespace ] keyword_attribute_options [ whitespace ] \"}\" ] [ whitespace ] ) as attributes\n enum_member_with_payload = ( [ whitespace ] attribute_name ( class_body / keyword_attribute_body ) ) as attributes\n\n # ---- Canonical value construct (RS 3001 par. Value / par. Enums) ----\n # `value { block }` is the canonical enum member; the bare\n # identifier member is its documented shortcut. from_table expands to\n # value members at compile time.\n value_name = quoted_string / map_name\n value_inner_definition = ( definition_body / definition_line / instance / attribute_line / comment_definition / comment_multiline_definition ) [ whitespace ]\n value_body = \"{\" [ whitespace ] ( *( value_inner_definition ) ) as members \"}\"\n value_definition = ( [ whitespace ] kw_value_sp ( value_name ) as value_name [ value_body ] [ whitespace ] ) as value_decl\n\n from_table_definition = ( [ whitespace ] \"from_table\" ( map_name ) as from_table_name [ \"{\" [ whitespace ] *( kw_artifact_sp ( map_name ) as artifact_table [ whitespace ] ) \"}\" ] [ whitespace ] ) as from_table_decl\n\n enum_values_shorthand = ( [ whitespace ] kw_values_sp value_set_body [ whitespace ] ) as value_set_decl\n enum_inner_definitions = definition_body / definition_line / member_fields_definition / from_table_definition / enum_values_shorthand / value_definition / enum_member_with_payload / attribute_comma_definition / attribute_definition / comment_definition / comment_multiline_definition\n enum_inner_definition = enum_inner_definitions [ whitespace ]\n enum_body = \"{\" [ whitespace ] ( *( enum_inner_definition ) ) as members \"}\"\n enum_definition = [ whitespace ] [ element_visibility ] kw_enum_sp [ quotes ] class_name as name [ quotes ] [ attribute_stereotype ] [ enum_body ]\n data_type_body = \"{\" [ whitespace ] ( *( enum_inner_definition ) ) as members \"}\"\n data_type_definition = [ whitespace ] [ element_visibility ] kw_data_type_sp [ quotes ] class_name as name [ quotes ] [ attribute_stereotype ] [ data_type_body ]\n primitive_definition = [ whitespace ] [ element_visibility ] kw_primitive_sp [ quotes ] class_name as name [ quotes ]\n\n package_body = \"{\" [ whitespace ] ( *( diagram_inner_definition ) ) as members \"}\"\n package_definition = ( [ whitespace ] kw_package_sp class_name as name package_body [ whitespace ] ) as packages\n diagram_inner_definitions = namespace_definition / mapping_definition / ( class_definition ) as classes / ( enum_definition ) as enums / ( primitive_definition ) as primitives / ( data_type_definition ) as data_types / package_definition / title_definition / caption_definition / fontname_definition / ( association_definition ) as associations / comment_definition / comment_multiline_definition\n diagram_inner_definition = diagram_inner_definitions [ whitespace ]\n diagram_body = \"{\" [ whitespace ] ( *( diagram_inner_definition ) ) as members \"}\"\n diagram_definition = [ whitespace ] \"diagram\" class_name as name diagram_body [ whitespace ]\n diagram_definitions = diagram_definition [ whitespace ]\n model_definitions = ( 1*( diagram_inner_definition ) ) as members\n\n view_only_definitions = ( view_import ) as view_imports / show_directive / hide_directive\n view_inner_definitions = view_only_definitions / diagram_inner_definitions\n view_inner_definition = view_inner_definitions [ whitespace ]\n view_body = \"{\" [ whitespace ] ( *( view_inner_definition ) ) as members \"}\"\n view_definition = [ whitespace ] \"view\" class_name as name view_body [ whitespace ]\n view_definitions = view_definition [ whitespace ]\n\n atomic title_text = ( %x22 ( 1*( !%x22 ANY ) ) as title %x22 ) / ( %x27 ( 1*( !%x27 ANY ) ) as title %x27 ) / ( 1*( %x41-5A / %x61-7A / %x30-39 / \"_\" / \"-\" / \" \" / \",\" / \".\" / \":\" / \";\" / \"(\" / \")\" / \"+\" / \"'\" / \"/\" ) ) as title\n title_definition = [ whitespace ] kw_title_sp title_text\n atomic caption_text = ( %x22 ( 1*( !%x22 ANY ) ) as caption %x22 ) / ( %x27 ( 1*( !%x27 ANY ) ) as caption %x27 ) / ( 1*( %x41-5A / %x61-7A / %x30-39 / \"_\" / \"-\" / \" \" / \",\" / \".\" / \":\" / \";\" / \"(\" / \")\" / \"+\" / \"'\" / \"/\" ) ) as caption\n caption_definition = [ whitespace ] kw_caption_sp caption_text\n fontname_text = [ quotes ] ( 1*( %x41-5A / %x61-7A / %x30-39 / \"_\" / \"-\" / \" \" ) ) as fontname [ quotes ]\n fontname_definition = [ whitespace ] kw_fontname_sp fontname_text\n\n # ---- Views ----\n # `import` here carries a required trailing space (word boundary)\n view_import = [ whitespace ] kw_import_sp ( dq_path / sq_path ) [ whitespace ]\n entity_name_atom = ( 1*( %x41-5A / %x61-7A / %x30-39 / \"_\" / \".\" / \":\" / \"-\" ) ) as entity_name\n entity_name_list = entity_name_atom *( \",\" entity_name_atom )\n show_directive = [ whitespace ] kw_show_sp ( entity_name_list ) as show_list [ whitespace ]\n hide_directive = [ whitespace ] kw_hide_sp ( entity_name_list ) as hide_list [ whitespace ]\n\n # ---- Requires ----\n require_stmt = [ whitespace ] kw_require_sp quoted_string as require [ whitespace ]\n require_block = ( *( require_stmt [ whitespace ] ) ) as requires\n\n # ---- Instances ----\n instance = instance_named / keyword_instance / class_instance\n instance_named = ( [ whitespace ] kw_instance_sp quoted_string as name [ ( namespaced_identifier ) as instance_type ] \"{\" [ whitespace ] ( ( instance ) / attributes ) \"}\" [ whitespace ] ) as instance\n isa_definition = [ whitespace ] kw_isa_sp ( namespaced_identifier ) as isa [ whitespace ]\n keyword_instance = ( [ whitespace ] \"instance\" [ ( namespaced_identifier ) as instance_type ] \"{\" [ whitespace ] [ isa_definition ] ( ( instance ) / attributes ) \"}\" ) as instance [ whitespace ]\n class_instance = ( variable as instance_type [ whitespace ] quoted_string as name [ whitespace ] [ [ whitespace ] \"extends\" [ whitespace ] quoted_string as parent [ whitespace ] ] \"{\" [ whitespace ] [ lml_instance_body ] \"}\" ) as instance [ whitespace ]\n lml_instance_body = lml_instance_members [ whitespace ]\n instance_template = [ whitespace ] \"template\" [ whitespace ] \"{\" [ whitespace ] attributes [ whitespace ] \"}\"\n lml_instance_members = ( instance_template ) as template / attributes\n models = [ whitespace ] \"models\" [ whitespace ] variable as name [ whitespace ] \"{\" ( *( ( ( string_format_definition ) as default_string_formats ) / model_body ) ) as members \"}\" [ whitespace ]\n model_body = diagram_inner_definition\n\n # ---- Data structures ----\n attribute_value = instance / list / key_value_map / data_value / 1*( !%x0A ANY )\n list_item = instance / data_value\n list = \"[\" [ whitespace ] ( *( list_item [ \",\" ] [ whitespace ] ) ) as list [ whitespace ] \"]\"\n collection = [ whitespace ] kw_collection_sp quoted_string as name \"{\" [ whitespace ] [ includes ] [ whitespace ] [ validation ] [ whitespace ] \"}\" [ whitespace ]\n includes = [ whitespace ] \"includes\" ( list ) as includes\n validation = [ whitespace ] \"validation\" \"{\" [ whitespace ] ( *( condition ) ) as validations \"}\"\n condition = [ whitespace ] kw_condition_sp quoted_string as condition [ whitespace ]\n import = [ whitespace ] \"import\" \"{\" [ whitespace ] ( *( import_definition ) ) as imports \"}\" [ whitespace ]\n import_definition = ( 1*nonspace ) as format_type quoted_string as file [ whitespace ] \"{\" [ whitespace ] attributes [ whitespace ] \"}\" [ whitespace ]\n instances = [ whitespace ] \"instances\" [ ( quoted_string / variable ) as name ] [ whitespace ] \"{\" [ whitespace ] [ instances_body ] \"}\" [ whitespace ]\n instances_body = ( *( instances_member [ whitespace ] ) ) as instances\n instances_member = import / ( collection ) as collections / export / instance\n export = [ whitespace ] \"export\" [ whitespace ] \"{\" [ whitespace ] ( *( export_format [ whitespace ] ) ) as exports \"}\" [ whitespace ]\n export_format = [ whitespace ] kw_format_sp variable as format_type [ whitespace ] \"{\" [ whitespace ] attributes \"}\" [ whitespace ]\n\n # ---- Root (RS 3001: a document interleaves declarations) ----\n diagram = [ require_block ] ( *( top_level_definition ) ) as members\n\n top_level_definition = ( models / diagram_definitions / view_definitions / instances / instance / model_definitions ) [ whitespace ]\n}\n\nentry diagram: diagram\n\n# Compile-time contract tests for the trivia/skip behavior (run by\n# `rake parg` and any in-memory compile; a failure fails the build).\ntest diagram {\n accept \"// leading\\nclass Ceramic { }\\n\"\n accept \"class /* inline */ Ceramic { }\\n\"\n accept \"class Ceramic { } // trailing\"\n accept \"instances {\\n P \\\"p\\\" {\\n url = \\\"http://a//b\\\"\\n }\\n}\\n\"\n reject \"classCeramic Foo { }\"\n reject \"abstractclass Ceramic { }\"\n reject \"class\\tCeramic { }\"\n reject \"class Ceramic { /* unterminated\"\n}\n", + "source": "# LutaML Model Language (LML) — PARG grammar\n#\n# Ported from the original Parslet grammar (removed 2026-10; git history\n# has the reference implementation if the port needs re-checking).\n# PEG semantics: ordered choice, greedy repetition. Rule order within\n# alternatives preserves the original Parslet backtracking order.\n#\n# Capture discipline: repetitions are parenthesized before `as` so a\n# capture binds the whole match (Parslet's `.repeat.as(:x)` shape);\n# `[ x as k ]` yields k: nil when absent (Parslet omits the key —\n# consumers treat nil and absent as equivalent).\ngrammar Lml version \"1.0.0\" {\n # ---- Trivia (parsanol-ruby#134 skip rule) ----\n # Grammar-native trivia replaces the pre-parse comment stripping:\n # `//` line and `/* */` block comments (RS 3001 par. Comment) plus\n # blanks/tabs are consumed and ignored between tokens. Newlines stay\n # grammar-visible (line-oriented rules keep their semantics; the\n # preprocessor preserved them too). Atomic token rules keep string\n # literals and identifiers contiguous.\n skip = trivia\n trivia = 1*( ( 1*( \" \" / %x09 ) ) / ( line_comment [ ( [ %x0D ] %x0A / %x0D ) ] ) / block_comment )\n line_comment = \"//\" ( *( !newline any_char ) )\n block_comment = \"/*\" ( *( !\"*/\" any_char ) ) \"*/\"\n atomic kw_association_sp = \"association\" 1*\" \"\n atomic kw_artifact_sp = \"artifact\" 1*\" \"\n atomic kw_attribute_sp = \"attribute\" 1*\" \"\n atomic kw_caption_sp = \"caption\" 1*\" \"\n atomic kw_class_sp = \"class\" 1*\" \"\n atomic kw_visibility_sp = \"visibility\" 1*\" \"\n atomic kw_abstract_sp = \"abstract\" 1*\" \"\n atomic kw_collection_sp = \"collection\" 1*\" \"\n atomic kw_condition_sp = \"condition\" 1*\" \"\n atomic kw_data_type_sp = \"data_type\" 1*\" \"\n atomic kw_definition_sp = \"definition\" 1*\" \"\n atomic kw_derive_sp = \"derive\" 1*\" \"\n atomic kw_element_sp = \"element\" 1*\" \"\n atomic kw_enum_sp = \"enum\" 1*\" \"\n atomic kw_fontname_sp = \"fontname\" 1*\" \"\n atomic kw_format_sp = \"format\" 1*\" \"\n atomic kw_hide_sp = \"hide\" 1*\" \"\n atomic kw_import_sp = \"import\" 1*\" \"\n atomic kw_instance_sp = \"instance\" 1*\" \"\n atomic kw_isa_sp = \"isa\" 1*\" \"\n atomic kw_map_sp = \"map\" 1*\" \"\n atomic kw_map_attribute_sp = \"map_attribute\" 1*\" \"\n atomic kw_map_content_sp = \"map_content\" 1*\" \"\n atomic kw_map_element_sp = \"map_element\" 1*\" \"\n atomic kw_map_key_sp = \"map_key\" 1*\" \"\n atomic kw_map_value_sp = \"map_value\" 1*\" \"\n atomic kw_mapping_sp = \"mapping\" 1*\" \"\n atomic kw_member_sp = \"member\" 1*\" \"\n atomic kw_member_type_sp = \"member_type\" 1*\" \"\n atomic kw_namespace_sp = \"namespace\" 1*\" \"\n atomic kw_owner_sp = \"owner\" 1*\" \"\n atomic kw_owner_type_sp = \"owner_type\" 1*\" \"\n atomic kw_package_sp = \"package\" 1*\" \"\n atomic kw_pattern_sp = \"pattern\" 1*\" \"\n atomic kw_prefix_sp = \"prefix\" 1*\" \"\n atomic kw_primitive_sp = \"primitive\" 1*\" \"\n atomic kw_require_sp = \"require\" 1*\" \"\n atomic kw_show_sp = \"show\" 1*\" \"\n atomic kw_string_format_sp = \"string_format\" 1*\" \"\n atomic kw_title_sp = \"title\" 1*\" \"\n atomic kw_to_instance_sp = \"to_instance\" 1*\" \"\n atomic kw_uri_sp = \"uri\" 1*\" \"\n atomic kw_value_sp = \"value\" 1*\" \"\n atomic kw_values_sp = \"values\" 1*\" \"\n # ---- Character primitives ----\n alpha = %x41-5A / %x61-7A\n atomic word = %x41-5A / %x61-7A / %x30-39 / \"_\"\n cardchar = %x30-39 / %x61-7A / \"*\"\n # Parslet's `any`: any Unicode character (not just bytes)\n any_char = %x00-10FFFF\n # [^\\s\\n\\r] — regex \\s covers space, tab, CR, LF, VT, FF\n atomic nonspace = !\" \" !%x09 !%x0A !%x0B !%x0C !%x0D any_char\n quote = %x22 / %x27\n newline = %x0D / %x0A\n\n whitespace = 1*( ( 1*( \" \" / %x09 ) ) / ( [ %x0D ] %x0A ) / %x0D / \";\" / line_comment / block_comment )\n\n # match['\"\\'']\n quotes = %x22 / %x27\n\n # quoted('\"', :string) | quoted(\"'\", :string)\n atomic dq_string = %x22 until \"\\\"\" as string %x22\n atomic sq_string = %x27 until \"'\" as string %x27\n quoted_string = dq_string / sq_string\n # any_quoted(:path) for view import\n atomic dq_path = %x22 until \"\\\"\" as path %x22\n atomic sq_path = %x27 until \"'\" as path %x27\n\n boolean = ( \"true\" / \"false\" ) as boolean\n number = ( 1*%x30-39 \".\" 1*%x30-39 ) as float / ( 1*%x30-39 ) as number\n variable = quoted_string / 1*word\n reference = ( \"reference:(\" / \"ref:(\" ) ( variable *( \".\" variable ) ) as reference \")\"\n range = ( variable as start \"..\" variable as end ) as range\n namespaced_identifier = variable *( \"::\" variable )\n comment_definition = ( \"**\" / \"#\" ) ( *( !newline ANY ) ) as comments\n comment_multiline_definition = \"*|\" until \"|*\" as comments [ whitespace ] \"|*\"\n\n class_name_chars = 1*( %x41-5A / %x61-7A / %x30-39 / \" \" / \"_\" / \"-\" / \":\" / \".\" )\n class_name = class_name_chars [ \"(\" class_name_chars \")\" ]\n cardinality_body_definition = cardchar as min [ \"..\" [ cardchar as max ] ]\n cardinality = \"[\" cardinality_body_definition as cardinality \"]\"\n\n data_value = boolean / reference / range / number / quoted_string\n key_value_pair = variable as key [ \"=\" ] data_value as value\n key_value_map = \"{\" [ whitespace ] ( *( key_value_pair whitespace ) ) as key_value_map \"}\"\n kw_visibility_modifier = \"+\" / \"-\" / \"#\" / \"~\"\n\n # ---- Attributes ----\n attribute = comment_definition / ( variable as key [ \"+\" as add ] [ \"=\" ] attribute_value as value )\n attributes = ( *( definition_body / definition_line / attribute_line / whitespace ) ) as attributes\n attribute_line = attribute [ [ \",\" ] whitespace ]\n visibility = kw_visibility_modifier as visibility_modifier\n attribute_stereotype = \"<<\" ( 1*( %x41-5A / %x61-7A / %x30-39 / \"_\" / \"-\" / \"/\" ) ) as stereotype \">>\"\n atomic type_token = 1*( !( \"//\" / \"/*\" ) typechar )\n atomic typechar = %x41-5A / %x61-7A / %x30-39 / \"_\" / \"-\" / \" \" / \":\" / \"/\" / \"+\"\n atomic namechar = %x41-5A / %x61-7A / %x30-39 / \"_\" / \"-\" / \"/\" / \"+\"\n attribute_type = [ \":\" ] [ attribute_stereotype ] [ quotes as type_literal ] ( type_token ) as type [ quotes ]\n attribute_name = ( 1*namechar ) as name\n attribute_definition_name = ( quotes ( 1*( %x41-5A / %x61-7A / %x30-39 / \"_\" / \"-\" / \" \" / \"/\" / \"+\" ) ) as name quotes ) / attribute_name\n attribute_definition = ( [ visibility ] as visibility attribute_definition_name [ attribute_type ] [ cardinality ] [ class_body ] ) as attributes\n\n keyword_type_argument = \"type\" ( 1*nonspace ) as type [ whitespace ]\n keyword_cardinality_argument = \"cardinality\" cardinality_body_definition as cardinality [ whitespace ]\n keyword_any_argument = ( keyword_any_name ) as name [ \"=\" / \":\" ] attribute_value as value [ whitespace ]\n atomic keyword_any_name = 1*( !( \"{\" / \"}\" ) nonspace )\n keyword_values_argument = kw_values_sp ( ( value_set_body ) as value_set / ( variable ) as value_set_ref ) [ whitespace ]\n keyword_pattern_argument = ( kw_pattern_sp \"/\" ( *( ( \"\\\\\" any_char ) / ( !\"/\" any_char ) ) ) as pattern \"/\" [ whitespace ] )\n value_set_body = \"{\" [ whitespace ] ( *( ( ( data_value / variable ) as item ) [ \",\" ] [ whitespace ] ) ) as items \"}\"\n keyword_attribute_options = *( keyword_type_argument / keyword_cardinality_argument / keyword_values_argument / keyword_pattern_argument / ( keyword_any_argument ) as properties )\n keyword_attribute_body = \"{\" [ whitespace ] keyword_attribute_options [ whitespace ] \"}\"\n keyword_attribute_definition = ( kw_attribute_sp attribute_name keyword_attribute_body ) as attributes\n\n # ---- Associations ----\n owner_cardinality = \"[\" cardinality_body_definition as owner_end_cardinality \"]\"\n owner_attribute_name = \"#\" [ visibility ] variable as owner_end_attribute_name\n owner_definition = [ whitespace ] kw_owner_sp variable as owner_end [ owner_attribute_name ] [ owner_cardinality ]\n owner_type = [ whitespace ] kw_owner_type_sp variable as owner_end_type\n member_cardinality = \"[\" cardinality_body_definition as member_end_cardinality \"]\"\n member_attribute_name = \"#\" [ visibility ] variable as member_end_attribute_name\n member_definition = [ whitespace ] kw_member_sp variable as member_end [ member_attribute_name ] [ member_cardinality ]\n member_type = [ whitespace ] kw_member_type_sp variable as member_end_type\n association_inner_definition = ( owner_type / member_type / owner_definition / member_definition / comment_definition / comment_multiline_definition ) [ whitespace ]\n association_body = \"{\" [ whitespace ] ( *( association_inner_definition ) ) as members \"}\"\n association_definition = [ whitespace ] kw_association_sp [ variable as name ] association_body\n\n # ---- Definitions ----\n # ---- Operations (class methods) ----\n # Symbol visibility reuses the attribute prefix (+ - # ~); the\n # transform maps it to public/private/protected/friendly.\n operation_definition = [ whitespace ] [ visibility ] ( 1*word ) as name \"(\" [ ( operation_params ) as owned_parameter ] \")\" [ operation_return ] [ operation_body ] [ whitespace ]\n operation_params = operation_param *( \",\" [ whitespace ] operation_param )\n operation_return = \":\" ( type_token ) as return_type [ cardinality ]\n # A parenthesized alternative is not an Entity, so an optional body\n # of `x as k` around it gets no skip injection - the blank after \"=\"\n # was unconsumable. Reference a rule instead.\n operation_param = ( [ ( \"in\" / \"out\" / \"inout\" ) as direction 1*\" \" ] ( 1*word ) as name [ \":\" ] param_type as type [ \"=\" ] param_default_value as param_default )\n param_default_value = [ quoted_string / ( 1*word ) / number ]\n # The attribute pattern: separator as its own optional, value as a\n # rule sibling. A `x as k` optional body gets no interior skip\n # injection, so [ \":\" type as t ] cannot consume the blank after\n # the separator.\n param_type = [ type_token ]\n operation_body = \"{\" [ whitespace ] [ ( *( ( 1*word ) as stereotype [ \",\" ] [ whitespace ] ) ) as stereotype ] [ whitespace ] \"}\"\n\n class_modifier = [ [ whitespace ] modifier_token ]\n atomic modifier_token = ( ( \"abstract\" / \"interface\" ) as modifier 1*\" \" )\n # RS 3001 par. Declaration modifiers: keyword prefix (sugar) and the\n # canonical in-block declarations. The `package` visibility keyword is\n # guarded: it must be followed by a declaration keyword, so a bare\n # `package P { }` still binds as a package declaration.\n atomic element_visibility = ( ( \"public\" / \"private\" / \"protected\" / ( \"package\" &( 1*\" \" ( kw_class_sp / kw_enum_sp / kw_data_type_sp / kw_primitive_sp / kw_package_sp ) ) ) ) as visibility 1*\" \" )\n visibility_declaration = kw_visibility_sp ( \"public\" / \"private\" / \"protected\" / \"package\" ) as visibility\n abstract_declaration = kw_abstract_sp ( \"true\" / \"false\" ) as abstract\n # ---- Namespaces (RS 3010 extension: lutaml-model XmlNamespace) ----\n namespace_uri_line = ( kw_uri_sp ( quoted_string / ( 1*word ) ) as uri [ whitespace ] )\n namespace_prefix_line = ( kw_prefix_sp ( quoted_string / ( 1*word ) ) as prefix [ whitespace ] )\n namespace_body = \"{\" [ whitespace ] ( *( namespace_uri_line / namespace_prefix_line ) ) as members \"}\"\n namespace_inline = ( ( quoted_string ) as uri [ kw_prefix_sp ( quoted_string / ( 1*word ) ) as prefix ] )\n namespace_definition = ( [ whitespace ] kw_namespace_sp ( 1*word ) as name ( namespace_body / namespace_inline ) [ whitespace ] ) as namespaces\n\n # ---- Serialization mappings (RS 3010 extension: sibling-linked) ----\n serialization_body = \"{\" [ whitespace ] ( *( serialization_line ) ) as rules \"}\"\n serialization_line = ( mapping_element_name_line / mapping_element_line / mapping_attribute_line / mapping_content_line / mapping_namespace_line / mapping_mixed_line / legacy_map_line / mapping_map_line / mapping_map_key_line / mapping_map_value_line ) [ whitespace ]\n legacy_map_line = ( kw_map_sp dq_string as wire \",\" \"to:\" ( quoted_string / ( 1*word ) ) as to [ whitespace ] ) as legacy_map\n mapping_element_name_line = ( kw_element_sp dq_string as element_name [ whitespace ] ) as element_name\n mapping_element_line = ( kw_map_element_sp ( element_args ) ) as map_element\n element_args = ( dq_string as wire [ ( 1*word ) as field ] / ( 1*word ) as field )\n mapping_attribute_line = ( kw_map_attribute_sp ( attribute_args ) ) as map_attribute\n attribute_args = ( dq_string as wire [ ( 1*word ) as field ] / ( 1*word ) as field )\n mapping_content_line = ( kw_map_content_sp ( 1*word ) as field ) as map_content\n mapping_namespace_line = ( kw_namespace_sp ( 1*word ) as namespace_ref ) as map_namespace\n mapping_mixed_line = ( \"mixed_content\" ) as mixed_content\n mapping_map_line = ( kw_map_sp map_args ) as map\n map_args = ( dq_string as wire ( 1*word ) as field / dq_string as wire / ( 1*word ) as field )\n mapping_map_key_line = ( kw_map_key_sp kw_to_instance_sp ( 1*word ) as field ) as map_key\n mapping_map_value_line = ( kw_map_value_sp map_value_mode ( 1*word ) as field ) as map_value\n atomic map_value_mode = ( ( \"to_instance\" / \"as_attribute\" ) as mode 1*\" \" )\n mapping_definition = ( [ whitespace ] kw_mapping_sp ( 1*word ) as format ( 1*word ) as target serialization_body [ whitespace ] ) as serialization_mappings\n\n # ---- Mapping blocks (lutaml-model wire names) ----\n map_name = ( quoted_string / 1*( word / \"-\" / \".\" ) )\n map_line = kw_map_sp ( map_name ) as wire \",\" \"to:\" ( map_name ) as to [ whitespace ]\n mapping_body = \"{\" [ whitespace ] ( *( map_line ) ) as maps \"}\"\n class_mapping_section = ( [ whitespace ] kw_mapping_sp ( 1*word ) as format serialization_body [ whitespace ] ) as serialization_mappings\n\n derive_definition = ( [ whitespace ] kw_derive_sp attribute_name \":\" [ quotes ] ( type_token ) as type [ quotes ] ) as derived_field [ whitespace ]\n string_format_item = ( sf_key_token ( quoted_string / 1*nonspace ) as value [ whitespace ] )\n atomic sf_key_token = ( ( \"artifact\" / \"root\" ) as key 1*\" \" )\n string_format_body = \"{\" [ whitespace ] ( *( string_format_item ) ) as items [ whitespace ] \"}\"\n string_format_definition = ( [ whitespace ] kw_string_format_sp ( variable ) as format string_format_body ) as string_format\n\n class_inner_definitions = visibility_declaration / abstract_declaration / definition_body / definition_line / class_mapping_section / derive_definition / string_format_definition / ( operation_definition ) as operations / attribute_comma_definition / ( !( kw_attribute_sp ) attribute_definition ) / keyword_attribute_definition / comment_definition / comment_multiline_definition\n class_inner_definition = class_inner_definitions [ whitespace ]\n class_body = \"{\" [ whitespace ] ( *( class_inner_definition ) ) as members \"}\"\n parent_class = \"<\" ( class_name_chars ) as parent_class\n class_definition = [ element_visibility ] class_modifier [ whitespace ] kw_class_sp class_name as name [ parent_class ] [ attribute_stereotype ] [ class_body ]\n\n # Balanced-brace definition text: nested \"{...}\" and \"\\\"-escapes allowed\n definition_content = *( ( \"\\\\\" any_char ) / ( \"{\" definition_content \"}\" ) / ( !\"}\" any_char ) )\n definition_body = \"definition\" [ whitespace ] \"{\" ( definition_content ) as definition \"}\"\n definition_line = ( kw_definition_sp ( dq_string / sq_string ) ) as definition [ whitespace ]\n\n member_field_line = attribute_name ( 1*nonspace ) as member_field_type [ whitespace ]\n member_fields_definition = ( [ whitespace ] \"member_fields\" [ whitespace ] \"{\" [ whitespace ] ( *( member_field_line ) ) as member_fields [ whitespace ] \"}\" ) as member_fields_decl\n attribute_comma_definition = ( [ whitespace ] kw_attribute_sp attribute_name \",\" ( type_token ) as type [ \"{\" [ whitespace ] keyword_attribute_options [ whitespace ] \"}\" ] [ whitespace ] ) as attributes\n enum_member_with_payload = ( [ whitespace ] attribute_name ( class_body / keyword_attribute_body ) ) as attributes\n\n # ---- Canonical value construct (RS 3001 par. Value / par. Enums) ----\n # `value { block }` is the canonical enum member; the bare\n # identifier member is its documented shortcut. from_table expands to\n # value members at compile time.\n value_name = quoted_string / map_name\n value_inner_definition = ( definition_body / definition_line / instance / attribute_line / comment_definition / comment_multiline_definition ) [ whitespace ]\n value_body = \"{\" [ whitespace ] ( *( value_inner_definition ) ) as members \"}\"\n value_definition = ( [ whitespace ] kw_value_sp ( value_name ) as value_name [ value_body ] [ whitespace ] ) as value_decl\n\n from_table_definition = ( [ whitespace ] \"from_table\" ( map_name ) as from_table_name [ \"{\" [ whitespace ] *( kw_artifact_sp ( map_name ) as artifact_table [ whitespace ] ) \"}\" ] [ whitespace ] ) as from_table_decl\n\n enum_values_shorthand = ( [ whitespace ] kw_values_sp value_set_body [ whitespace ] ) as value_set_decl\n enum_inner_definitions = visibility_declaration / abstract_declaration / definition_body / definition_line / member_fields_definition / from_table_definition / enum_values_shorthand / value_definition / enum_member_with_payload / attribute_comma_definition / attribute_definition / comment_definition / comment_multiline_definition\n enum_inner_definition = enum_inner_definitions [ whitespace ]\n enum_body = \"{\" [ whitespace ] ( *( enum_inner_definition ) ) as members \"}\"\n enum_definition = [ whitespace ] [ element_visibility ] kw_enum_sp [ quotes ] class_name as name [ quotes ] [ attribute_stereotype ] [ enum_body ]\n data_type_body = \"{\" [ whitespace ] ( *( enum_inner_definition ) ) as members \"}\"\n data_type_definition = [ whitespace ] [ element_visibility ] kw_data_type_sp [ quotes ] class_name as name [ quotes ] [ attribute_stereotype ] [ data_type_body ]\n primitive_definition = [ whitespace ] [ element_visibility ] kw_primitive_sp [ quotes ] class_name as name [ quotes ]\n\n package_body = \"{\" [ whitespace ] ( *( diagram_inner_definition ) ) as members \"}\"\n package_definition = ( [ whitespace ] [ element_visibility ] kw_package_sp class_name as name package_body [ whitespace ] ) as packages\n diagram_inner_definitions = namespace_definition / mapping_definition / ( class_definition ) as classes / ( enum_definition ) as enums / ( primitive_definition ) as primitives / ( data_type_definition ) as data_types / package_definition / title_definition / caption_definition / fontname_definition / ( association_definition ) as associations / comment_definition / comment_multiline_definition\n diagram_inner_definition = diagram_inner_definitions [ whitespace ]\n diagram_body = \"{\" [ whitespace ] ( *( diagram_inner_definition ) ) as members \"}\"\n diagram_definition = [ whitespace ] \"diagram\" class_name as name diagram_body [ whitespace ]\n diagram_definitions = diagram_definition [ whitespace ]\n model_definitions = ( 1*( diagram_inner_definition ) ) as members\n\n view_only_definitions = ( view_import ) as view_imports / show_directive / hide_directive\n view_inner_definitions = view_only_definitions / diagram_inner_definitions\n view_inner_definition = view_inner_definitions [ whitespace ]\n view_body = \"{\" [ whitespace ] ( *( view_inner_definition ) ) as members \"}\"\n view_definition = [ whitespace ] \"view\" class_name as name view_body [ whitespace ]\n view_definitions = view_definition [ whitespace ]\n\n atomic title_text = ( %x22 ( 1*( !%x22 ANY ) ) as title %x22 ) / ( %x27 ( 1*( !%x27 ANY ) ) as title %x27 ) / ( 1*( %x41-5A / %x61-7A / %x30-39 / \"_\" / \"-\" / \" \" / \",\" / \".\" / \":\" / \";\" / \"(\" / \")\" / \"+\" / \"'\" / \"/\" ) ) as title\n title_definition = [ whitespace ] kw_title_sp title_text\n atomic caption_text = ( %x22 ( 1*( !%x22 ANY ) ) as caption %x22 ) / ( %x27 ( 1*( !%x27 ANY ) ) as caption %x27 ) / ( 1*( %x41-5A / %x61-7A / %x30-39 / \"_\" / \"-\" / \" \" / \",\" / \".\" / \":\" / \";\" / \"(\" / \")\" / \"+\" / \"'\" / \"/\" ) ) as caption\n caption_definition = [ whitespace ] kw_caption_sp caption_text\n fontname_text = [ quotes ] ( 1*( %x41-5A / %x61-7A / %x30-39 / \"_\" / \"-\" / \" \" ) ) as fontname [ quotes ]\n fontname_definition = [ whitespace ] kw_fontname_sp fontname_text\n\n # ---- Views ----\n # `import` here carries a required trailing space (word boundary)\n view_import = [ whitespace ] kw_import_sp ( dq_path / sq_path ) [ whitespace ]\n entity_name_atom = ( 1*( %x41-5A / %x61-7A / %x30-39 / \"_\" / \".\" / \":\" / \"-\" ) ) as entity_name\n entity_name_list = entity_name_atom *( \",\" entity_name_atom )\n show_directive = [ whitespace ] kw_show_sp ( entity_name_list ) as show_list [ whitespace ]\n hide_directive = [ whitespace ] kw_hide_sp ( entity_name_list ) as hide_list [ whitespace ]\n\n # ---- Requires ----\n require_stmt = [ whitespace ] kw_require_sp quoted_string as require [ whitespace ]\n require_block = ( *( require_stmt [ whitespace ] ) ) as requires\n\n # ---- Instances ----\n instance = instance_named / keyword_instance / class_instance\n instance_named = ( [ whitespace ] kw_instance_sp quoted_string as name [ ( namespaced_identifier ) as instance_type ] \"{\" [ whitespace ] ( ( instance ) / attributes ) \"}\" [ whitespace ] ) as instance\n isa_definition = [ whitespace ] kw_isa_sp ( namespaced_identifier ) as isa [ whitespace ]\n keyword_instance = ( [ whitespace ] \"instance\" [ ( namespaced_identifier ) as instance_type ] \"{\" [ whitespace ] [ isa_definition ] ( ( instance ) / attributes ) \"}\" ) as instance [ whitespace ]\n class_instance = ( variable as instance_type [ whitespace ] quoted_string as name [ whitespace ] [ [ whitespace ] \"extends\" [ whitespace ] quoted_string as parent [ whitespace ] ] \"{\" [ whitespace ] [ lml_instance_body ] \"}\" ) as instance [ whitespace ]\n lml_instance_body = lml_instance_members [ whitespace ]\n instance_template = [ whitespace ] \"template\" [ whitespace ] \"{\" [ whitespace ] attributes [ whitespace ] \"}\"\n lml_instance_members = ( instance_template ) as template / attributes\n models = [ whitespace ] \"models\" [ whitespace ] variable as name [ whitespace ] \"{\" ( *( ( ( string_format_definition ) as default_string_formats ) / model_body ) ) as members \"}\" [ whitespace ]\n model_body = diagram_inner_definition\n\n # ---- Data structures ----\n attribute_value = instance / list / key_value_map / data_value / 1*( !%x0A ANY )\n list_item = instance / data_value\n list = \"[\" [ whitespace ] ( *( list_item [ \",\" ] [ whitespace ] ) ) as list [ whitespace ] \"]\"\n collection = [ whitespace ] kw_collection_sp quoted_string as name \"{\" [ whitespace ] [ includes ] [ whitespace ] [ validation ] [ whitespace ] \"}\" [ whitespace ]\n includes = [ whitespace ] \"includes\" ( list ) as includes\n validation = [ whitespace ] \"validation\" \"{\" [ whitespace ] ( *( condition ) ) as validations \"}\"\n condition = [ whitespace ] kw_condition_sp quoted_string as condition [ whitespace ]\n import = [ whitespace ] \"import\" \"{\" [ whitespace ] ( *( import_definition ) ) as imports \"}\" [ whitespace ]\n import_definition = ( 1*nonspace ) as format_type quoted_string as file [ whitespace ] \"{\" [ whitespace ] attributes [ whitespace ] \"}\" [ whitespace ]\n instances = [ whitespace ] \"instances\" [ ( quoted_string / variable ) as name ] [ whitespace ] \"{\" [ whitespace ] [ instances_body ] \"}\" [ whitespace ]\n instances_body = ( *( instances_member [ whitespace ] ) ) as instances\n instances_member = import / ( collection ) as collections / export / instance\n export = [ whitespace ] \"export\" [ whitespace ] \"{\" [ whitespace ] ( *( export_format [ whitespace ] ) ) as exports \"}\" [ whitespace ]\n export_format = [ whitespace ] kw_format_sp variable as format_type [ whitespace ] \"{\" [ whitespace ] attributes \"}\" [ whitespace ]\n\n # ---- Root (RS 3001: a document interleaves declarations) ----\n diagram = [ require_block ] ( *( top_level_definition ) ) as members\n\n top_level_definition = ( models / diagram_definitions / view_definitions / instances / instance / model_definitions ) [ whitespace ]\n}\n\nentry diagram: diagram\n\n# Compile-time contract tests for the trivia/skip behavior (run by\n# `rake parg` and any in-memory compile; a failure fails the build).\ntest diagram {\n accept \"// leading\\nclass Ceramic { }\\n\"\n accept \"class /* inline */ Ceramic { }\\n\"\n accept \"class Ceramic { } // trailing\"\n accept \"instances {\\n P \\\"p\\\" {\\n url = \\\"http://a//b\\\"\\n }\\n}\\n\"\n reject \"classCeramic Foo { }\"\n reject \"abstractclass Ceramic { }\"\n reject \"class\\tCeramic { }\"\n reject \"class Ceramic { /* unterminated\"\n}\n", "skip": "trivia", - "checksum": "sha256:01d44e7f1e6dac63e1eb6901644a031d0735e9fb28a08cba55f1d9d98a63b72a" + "checksum": "sha256:aea269101d285db917f0de511ab38b2a22ac80d3ede8cfa98b417cffbf553c62" } diff --git a/lib/lutaml/lml/grammar/lml.parg b/lib/lutaml/lml/grammar/lml.parg index c89d1ec..ef0c450 100644 --- a/lib/lutaml/lml/grammar/lml.parg +++ b/lib/lutaml/lml/grammar/lml.parg @@ -26,6 +26,8 @@ grammar Lml version "1.0.0" { atomic kw_attribute_sp = "attribute" 1*" " atomic kw_caption_sp = "caption" 1*" " atomic kw_class_sp = "class" 1*" " + atomic kw_visibility_sp = "visibility" 1*" " + atomic kw_abstract_sp = "abstract" 1*" " atomic kw_collection_sp = "collection" 1*" " atomic kw_condition_sp = "condition" 1*" " atomic kw_data_type_sp = "data_type" 1*" " @@ -165,9 +167,13 @@ grammar Lml version "1.0.0" { class_modifier = [ [ whitespace ] modifier_token ] atomic modifier_token = ( ( "abstract" / "interface" ) as modifier 1*" " ) - # RS 3001 element visibility modifier (keyword form, symmetric with - # abstract/interface; `package` is the UML "friendly" (~) level). - atomic element_visibility = ( ( "public" / "private" / "protected" / "package" ) as visibility 1*" " ) + # RS 3001 par. Declaration modifiers: keyword prefix (sugar) and the + # canonical in-block declarations. The `package` visibility keyword is + # guarded: it must be followed by a declaration keyword, so a bare + # `package P { }` still binds as a package declaration. + atomic element_visibility = ( ( "public" / "private" / "protected" / ( "package" &( 1*" " ( kw_class_sp / kw_enum_sp / kw_data_type_sp / kw_primitive_sp / kw_package_sp ) ) ) ) as visibility 1*" " ) + visibility_declaration = kw_visibility_sp ( "public" / "private" / "protected" / "package" ) as visibility + abstract_declaration = kw_abstract_sp ( "true" / "false" ) as abstract # ---- Namespaces (RS 3010 extension: lutaml-model XmlNamespace) ---- namespace_uri_line = ( kw_uri_sp ( quoted_string / ( 1*word ) ) as uri [ whitespace ] ) namespace_prefix_line = ( kw_prefix_sp ( quoted_string / ( 1*word ) ) as prefix [ whitespace ] ) @@ -206,7 +212,7 @@ grammar Lml version "1.0.0" { string_format_body = "{" [ whitespace ] ( *( string_format_item ) ) as items [ whitespace ] "}" string_format_definition = ( [ whitespace ] kw_string_format_sp ( variable ) as format string_format_body ) as string_format - class_inner_definitions = definition_body / definition_line / class_mapping_section / derive_definition / string_format_definition / ( operation_definition ) as operations / attribute_comma_definition / ( !( kw_attribute_sp ) attribute_definition ) / keyword_attribute_definition / comment_definition / comment_multiline_definition + class_inner_definitions = visibility_declaration / abstract_declaration / definition_body / definition_line / class_mapping_section / derive_definition / string_format_definition / ( operation_definition ) as operations / attribute_comma_definition / ( !( kw_attribute_sp ) attribute_definition ) / keyword_attribute_definition / comment_definition / comment_multiline_definition class_inner_definition = class_inner_definitions [ whitespace ] class_body = "{" [ whitespace ] ( *( class_inner_definition ) ) as members "}" parent_class = "<" ( class_name_chars ) as parent_class @@ -234,7 +240,7 @@ grammar Lml version "1.0.0" { from_table_definition = ( [ whitespace ] "from_table" ( map_name ) as from_table_name [ "{" [ whitespace ] *( kw_artifact_sp ( map_name ) as artifact_table [ whitespace ] ) "}" ] [ whitespace ] ) as from_table_decl enum_values_shorthand = ( [ whitespace ] kw_values_sp value_set_body [ whitespace ] ) as value_set_decl - enum_inner_definitions = definition_body / definition_line / member_fields_definition / from_table_definition / enum_values_shorthand / value_definition / enum_member_with_payload / attribute_comma_definition / attribute_definition / comment_definition / comment_multiline_definition + enum_inner_definitions = visibility_declaration / abstract_declaration / definition_body / definition_line / member_fields_definition / from_table_definition / enum_values_shorthand / value_definition / enum_member_with_payload / attribute_comma_definition / attribute_definition / comment_definition / comment_multiline_definition enum_inner_definition = enum_inner_definitions [ whitespace ] enum_body = "{" [ whitespace ] ( *( enum_inner_definition ) ) as members "}" enum_definition = [ whitespace ] [ element_visibility ] kw_enum_sp [ quotes ] class_name as name [ quotes ] [ attribute_stereotype ] [ enum_body ] @@ -243,7 +249,7 @@ grammar Lml version "1.0.0" { primitive_definition = [ whitespace ] [ element_visibility ] kw_primitive_sp [ quotes ] class_name as name [ quotes ] package_body = "{" [ whitespace ] ( *( diagram_inner_definition ) ) as members "}" - package_definition = ( [ whitespace ] kw_package_sp class_name as name package_body [ whitespace ] ) as packages + package_definition = ( [ whitespace ] [ element_visibility ] kw_package_sp class_name as name package_body [ whitespace ] ) as packages diagram_inner_definitions = namespace_definition / mapping_definition / ( class_definition ) as classes / ( enum_definition ) as enums / ( primitive_definition ) as primitives / ( data_type_definition ) as data_types / package_definition / title_definition / caption_definition / fontname_definition / ( association_definition ) as associations / comment_definition / comment_multiline_definition diagram_inner_definition = diagram_inner_definitions [ whitespace ] diagram_body = "{" [ whitespace ] ( *( diagram_inner_definition ) ) as members "}" diff --git a/lib/lutaml/lml/transform.rb b/lib/lutaml/lml/transform.rb index 70b43f0..7390df6 100644 --- a/lib/lutaml/lml/transform.rb +++ b/lib/lutaml/lml/transform.rb @@ -8,7 +8,7 @@ class Transform < Parsanol::Transform VISIBILITY_MAP = { '-' => 'private', '#' => 'protected', - '~' => 'friendly' + '~' => 'package' }.freeze rule(visibility_modifier: simple(:visibility_value)) do diff --git a/spec/lutaml/lml/element_visibility_spec.rb b/spec/lutaml/lml/element_visibility_spec.rb index 112ad22..50dce0d 100644 --- a/spec/lutaml/lml/element_visibility_spec.rb +++ b/spec/lutaml/lml/element_visibility_spec.rb @@ -46,4 +46,44 @@ def parse(src) expect(doc.classes.first.name).to eq('Foo') expect(doc.classes.first.visibility).to eq('package') end + + describe 'canonical in-block declarations (par. Declaration modifiers)' do + it 'sets visibility from the block declaration' do + doc = parse(<<~LML) + class Glaze { + visibility private + attribute color, String + } + LML + expect(doc.classes.first.visibility).to eq('private') + end + + it 'maps abstract true/false onto is_abstract' do + doc = parse(<<~LML) + class Base { abstract true } + class Leaf { abstract false } + LML + expect(doc.classes.first.is_abstract).to be(true) + expect(doc.classes.last.is_abstract).to be(false) + end + + it 'applies to enum bodies' do + doc = parse("enum Finish {\n visibility protected\n matte\n}\n") + expect(doc.enums.first.visibility).to eq('protected') + end + end + + describe 'package visibility' do + it 'parses visibility on package declarations' do + doc = parse("private package Ceramics {\n class Tile { }\n}\n") + expect(doc.packages.first.visibility).to eq('private') + expect(doc.packages.first.classes.first.name).to eq('Tile') + end + + it 'keeps bare package declarations binding as packages' do + doc = parse("package Ceramics {\n class Tile { }\n}\n") + expect(doc.packages.first.name).to eq('Ceramics') + expect(doc.packages.first.classes.first.name).to eq('Tile') + end + end end diff --git a/spec/lutaml/lml/transform_spec.rb b/spec/lutaml/lml/transform_spec.rb index 12e8b46..70cfb55 100644 --- a/spec/lutaml/lml/transform_spec.rb +++ b/spec/lutaml/lml/transform_spec.rb @@ -16,9 +16,9 @@ expect(result).to eq("protected") end - it "converts '~' to 'friendly'" do + it "converts '~' to 'package'" do result = transform.apply({ visibility_modifier: "~" }) - expect(result).to eq("friendly") + expect(result).to eq("package") end it "converts '+' to 'public'" do diff --git a/spec/lutaml/parsers/dsl_spec.rb b/spec/lutaml/parsers/dsl_spec.rb index 764790c..86e86bd 100644 --- a/spec/lutaml/parsers/dsl_spec.rb +++ b/spec/lutaml/parsers/dsl_spec.rb @@ -83,7 +83,7 @@ def parse_dsl(fixture_name) expect(by_name(attributes, "privateAttributeProfile").visibility) .to eq("private") expect(by_name(attributes, "friendlyAttributeProfile").visibility) - .to eq("friendly") + .to eq("package") expect(by_name(attributes, "friendlyAttributeProfile").stereotype) .to eq(["Type"]) expect(by_name(attributes, "protectedAttributeProfile").visibility)