| 731 | rule += "( " |
| 732 | |
| 733 | def get_recursive_refs(keys: List[str], first_is_optional: bool) -> str: |
| 734 | head, *rest = keys |
| 735 | kv_rule_name = property_kv_rule_names[head] |
| 736 | result = "" |
| 737 | if head == "*": |
| 738 | if first_is_optional: |
| 739 | result = f"({kv_rule_name})?" |
| 740 | else: |
| 741 | result = kv_rule_name |
| 742 | elif first_is_optional: |
| 743 | result = f'( "," space {kv_rule_name} )?' |
| 744 | else: |
| 745 | result = kv_rule_name |
| 746 | if rest: |
| 747 | result += " " + self._add_rule( |
| 748 | f"{name}{'-' if name else ''}{head}-rest", |
| 749 | get_recursive_refs(rest, first_is_optional=True), |
| 750 | ) |
| 751 | return result |
| 752 | |
| 753 | rule += " | ".join( |
| 754 | get_recursive_refs(optional_props[index:], first_is_optional=False) |