$data = {
  'marpa_options' => [
    {
      'rules' => [
        {
          'action' => 'grammar',
          'lhs' => 'grammar',
          'rhs' => [
            'paragraphs',
            'trailing-matter'
          ]
        },
        {
          'lhs' => 'paragraphs',
          'min' => 1,
          'rhs' => [
            'paragraph'
          ],
          'separator' => 'empty-line'
        },
        {
          'lhs' => 'paragraph',
          'rhs' => [
            'definition-paragraph'
          ]
        },
        {
          'lhs' => 'paragraph',
          'rhs' => [
            'production-paragraph'
          ]
        },
        {
          'lhs' => 'paragraph',
          'rhs' => [
            'terminal-paragraph'
          ]
        },
        {
          'lhs' => 'definition-paragraph',
          'min' => 1,
          'rhs' => [
            'definition'
          ]
        },
        {
          'action' => 'Marpa::MDL::Internal::Actions::first_arg',
          'lhs' => 'action-sentence:optional',
          'rhs' => [
            'action-sentence'
          ]
        },
        {
          'lhs' => 'action-sentence:optional',
          'rhs' => []
        },
        {
          'action' => 'production_paragraph',
          'lhs' => 'production-paragraph',
          'rhs' => [
            'non-structural-production-sentences',
            'production-sentence',
            'non-structural-production-sentences',
            'action-sentence:optional',
            'non-structural-production-sentences'
          ]
        },
        {
          'action' => 'concatenate_lines',
          'lhs' => 'non-structural-production-sentences',
          'min' => 0,
          'rhs' => [
            'non-structural-production-sentence'
          ]
        },
        {
          'action' => 'non_structural_production_sentence',
          'lhs' => 'non-structural-production-sentence',
          'rhs' => [
            'priority:k0',
            'integer',
            'period'
          ]
        },
        {
          'action' => 'Marpa::MDL::Internal::Actions::first_arg',
          'lhs' => 'the:k1:optional',
          'rhs' => [
            'the:k1'
          ]
        },
        {
          'lhs' => 'the:k1:optional',
          'rhs' => []
        },
        {
          'action' => 'long_action_sentence',
          'lhs' => 'action-sentence',
          'rhs' => [
            'the:k1:optional',
            'action:k2',
            'is:k3',
            'action-specifier',
            'period'
          ]
        },
        {
          'action' => 'short_action_sentence',
          'lhs' => 'action-sentence',
          'rhs' => [
            'action-specifier',
            'period'
          ]
        },
        {
          'action' => 'first_arg',
          'lhs' => 'action-specifier',
          'rhs' => [
            'string-specifier'
          ]
        },
        {
          'lhs' => 'non-structural-production-sentence',
          'rhs' => [
            'comment-sentence'
          ]
        },
        {
          'lhs' => 'non-structural-terminal-sentence',
          'rhs' => [
            'comment-sentence'
          ]
        },
        {
          'action' => 'definition_of_predefined',
          'lhs' => 'definition',
          'priority' => '1000',
          'rhs' => [
            'predefined-setting',
            'period'
          ]
        },
        {
          'lhs' => 'definition',
          'rhs' => [
            'comment-sentence'
          ]
        },
        {
          'lhs' => 'definition',
          'rhs' => [
            'bracketed-comment'
          ]
        },
        {
          'action' => 'concatenate_lines',
          'lhs' => 'definition',
          'rhs' => [
            'string-definition'
          ]
        },
        {
          'action' => 'concatenate_lines',
          'lhs' => 'predefined-setting',
          'rhs' => [
            'default-action-setting'
          ]
        },
        {
          'action' => 'concatenate_lines',
          'lhs' => 'predefined-setting',
          'rhs' => [
            'default-null-action-setting'
          ]
        },
        {
          'action' => 'concatenate_lines',
          'lhs' => 'predefined-setting',
          'rhs' => [
            'semantics-setting'
          ]
        },
        {
          'action' => 'concatenate_lines',
          'lhs' => 'predefined-setting',
          'rhs' => [
            'version-setting'
          ]
        },
        {
          'action' => 'concatenate_lines',
          'lhs' => 'predefined-setting',
          'rhs' => [
            'start-symbol-setting'
          ]
        },
        {
          'action' => 'concatenate_lines',
          'lhs' => 'predefined-setting',
          'rhs' => [
            'default-lex-prefix-setting'
          ]
        },
        {
          'action' => 'semantics_predicate',
          'lhs' => 'semantics-setting',
          'rhs' => [
            'the:k1:optional',
            'semantics:k4',
            'copula',
            'perl5:k5'
          ]
        },
        {
          'action' => 'semantics_subject',
          'lhs' => 'semantics-setting',
          'rhs' => [
            'perl5:k5',
            'copula',
            'the:k1:optional',
            'semantics:k4'
          ]
        },
        {
          'action' => 'version_predicate',
          'lhs' => 'version-setting',
          'rhs' => [
            'the:k1:optional',
            'version:k6',
            'copula',
            'version-number'
          ]
        },
        {
          'action' => 'version_subject',
          'lhs' => 'version-setting',
          'rhs' => [
            'version%5c%20number:k7',
            'copula',
            'the:k1:optional',
            'version:k6'
          ]
        },
        {
          'action' => 'start_symbol_predicate',
          'lhs' => 'start-symbol-setting',
          'rhs' => [
            'the:k1:optional',
            'start:k8',
            'symbol:k9',
            'copula',
            'symbol-phrase'
          ]
        },
        {
          'action' => 'start_symbol_subject',
          'lhs' => 'start-symbol-setting',
          'rhs' => [
            'symbol-phrase',
            'copula',
            'the:k1:optional',
            'start:k8',
            'symbol:k9'
          ]
        },
        {
          'action' => 'default_lex_prefix_subject',
          'lhs' => 'default-lex-prefix-setting',
          'rhs' => [
            'regex',
            'copula',
            'the:k1:optional',
            'default:ka',
            'lex:kb',
            'prefix:kc'
          ]
        },
        {
          'action' => 'default_lex_prefix_predicate',
          'lhs' => 'default-lex-prefix-setting',
          'rhs' => [
            'the:k1:optional',
            'default:ka',
            'lex:kb',
            'prefix:kc',
            'copula',
            'regex'
          ]
        },
        {
          'action' => 'default_null_value_subject',
          'lhs' => 'default-null-action-setting',
          'rhs' => [
            'string-specifier',
            'copula',
            'the:k1:optional',
            'default:ka',
            'null:kd',
            'value:ke'
          ]
        },
        {
          'action' => 'default_null_value_predicate',
          'lhs' => 'default-null-action-setting',
          'rhs' => [
            'the:k1:optional',
            'default:ka',
            'null:kd',
            'value:ke',
            'copula',
            'string-specifier'
          ]
        },
        {
          'lhs' => 'copula',
          'rhs' => [
            'is:k3'
          ]
        },
        {
          'lhs' => 'copula',
          'rhs' => [
            'are:kf'
          ]
        },
        {
          'action' => 'string_definition',
          'lhs' => 'string-definition',
          'rhs' => [
            'symbol-phrase',
            'is:k3',
            'string-specifier',
            'period'
          ]
        },
        {
          'action' => 'default_action_subject',
          'lhs' => 'default-action-setting',
          'rhs' => [
            'action-specifier',
            'is:k3',
            'the:k1:optional',
            'default:ka',
            'action:k2'
          ]
        },
        {
          'action' => 'default_action_predicate',
          'lhs' => 'default-action-setting',
          'rhs' => [
            'the:k1:optional',
            'default:ka',
            'action:k2',
            'is:k3',
            'action-specifier'
          ]
        },
        {
          'lhs' => 'comment-sentence',
          'rhs' => [
            'comment-tag',
            '%5c%3a:k10',
            'comment-words',
            'period'
          ]
        },
        {
          'lhs' => 'comment-words',
          'min' => 1,
          'rhs' => [
            'comment-word'
          ]
        },
        {
          'action' => 'q_string',
          'lhs' => 'literal-string',
          'rhs' => [
            'q-string'
          ]
        },
        {
          'action' => 'literal_string',
          'lhs' => 'literal-string',
          'rhs' => [
            'double-quoted-string'
          ]
        },
        {
          'action' => 'literal_string',
          'lhs' => 'literal-string',
          'rhs' => [
            'single-quoted-string'
          ]
        },
        {
          'action' => 'production_sentence',
          'lhs' => 'production-sentence',
          'rhs' => [
            'lhs',
            'production-copula',
            'rhs',
            'period'
          ]
        },
        {
          'lhs' => 'production-copula',
          'rhs' => [
            '%5c%3a:k10'
          ]
        },
        {
          'lhs' => 'production-copula',
          'rhs' => [
            '%5c%3a%5c%3a%5c%3d:k11'
          ]
        },
        {
          'action' => 'symbol_phrase',
          'lhs' => 'symbol-phrase',
          'min' => 1,
          'rhs' => [
            'symbol-word'
          ]
        },
        {
          'action' => 'lhs',
          'lhs' => 'lhs',
          'rhs' => [
            'symbol-phrase'
          ]
        },
        {
          'lhs' => 'rhs',
          'rhs' => []
        },
        {
          'action' => 'comma_separated_rhs',
          'lhs' => 'rhs',
          'min' => 1,
          'rhs' => [
            'rhs-element'
          ],
          'separator' => 'comma'
        },
        {
          'action' => 'sequence_rhs',
          'lhs' => 'rhs',
          'priority' => '1000',
          'rhs' => [
            'symbol-phrase',
            'sequence:k12'
          ]
        },
        {
          'action' => 'optional_sequence_rhs',
          'lhs' => 'rhs',
          'priority' => '2000',
          'rhs' => [
            'optional:k13',
            'symbol-phrase',
            'sequence:k12'
          ]
        },
        {
          'action' => 'separated_sequence_rhs',
          'lhs' => 'rhs',
          'priority' => '2000',
          'rhs' => [
            'symbol-phrase',
            'separated:k14',
            'symbol-phrase',
            'sequence:k12'
          ]
        },
        {
          'action' => 'optional_separated_sequence_rhs',
          'lhs' => 'rhs',
          'priority' => '3000',
          'rhs' => [
            'optional:k13',
            'symbol-phrase',
            'separated:k14',
            'symbol-phrase',
            'sequence:k12'
          ]
        },
        {
          'action' => 'concatenate_lines',
          'lhs' => 'rhs-element',
          'rhs' => [
            'mandatory-rhs-element'
          ]
        },
        {
          'action' => 'concatenate_lines',
          'lhs' => 'rhs-element',
          'priority' => '1000',
          'rhs' => [
            'optional-rhs-element'
          ]
        },
        {
          'action' => 'mandatory_rhs_element',
          'lhs' => 'mandatory-rhs-element',
          'rhs' => [
            'rhs-symbol-specifier'
          ]
        },
        {
          'action' => 'optional_rhs_element',
          'lhs' => 'optional-rhs-element',
          'rhs' => [
            'optional:k13',
            'rhs-symbol-specifier'
          ]
        },
        {
          'action' => 'rhs_symbol_phrase_specifier',
          'lhs' => 'rhs-symbol-specifier',
          'rhs' => [
            'symbol-phrase'
          ]
        },
        {
          'action' => 'rhs_regex_specifier',
          'lhs' => 'rhs-symbol-specifier',
          'rhs' => [
            'regex'
          ]
        },
        {
          'action' => 'concatenate_lines',
          'lhs' => 'terminal-paragraph',
          'rhs' => [
            'non-structural-terminal-sentences',
            'terminal-sentence',
            'non-structural-terminal-sentences'
          ]
        },
        {
          'action' => 'concatenate_lines',
          'lhs' => 'non-structural-terminal-sentences',
          'min' => 0,
          'rhs' => [
            'non-structural-terminal-sentence'
          ]
        },
        {
          'action' => 'regex_terminal_sentence',
          'lhs' => 'terminal-sentence',
          'rhs' => [
            'symbol-phrase',
            'matches:k15',
            'regex',
            'period'
          ]
        },
        {
          'action' => 'string_terminal_sentence',
          'lhs' => 'terminal-sentence',
          'rhs' => [
            'match:k16',
            'symbol-phrase',
            'using:k17',
            'string-specifier',
            'period'
          ]
        },
        {
          'action' => 'first_arg',
          'lhs' => 'string-specifier',
          'rhs' => [
            'literal-string'
          ]
        },
        {
          'action' => 'string_name_specifier',
          'lhs' => 'string-specifier',
          'rhs' => [
            'symbol-phrase'
          ]
        },
        {
          'lhs' => 'trailing-matter',
          'rhs' => [
            'final-comment'
          ]
        },
        {
          'lhs' => 'trailing-matter',
          'rhs' => [
            'final-whitespace'
          ]
        },
        {
          'lhs' => 'trailing-matter',
          'rhs' => []
        }
      ],
      'start' => 'grammar',
      'symbols' => {
        'rhs' => {
          'null_value' => 'empty_rhs'
        }
      },
      'terminals' => [
        'priority:k0',
        'the:k1',
        'action:k2',
        'is:k3',
        'semantics:k4',
        'perl5:k5',
        'version:k6',
        'version%5c%20number:k7',
        'start:k8',
        'symbol:k9',
        'default:ka',
        'lex:kb',
        'prefix:kc',
        'null:kd',
        'value:ke',
        'are:kf',
        '%5c%3a:k10',
        '%5c%3a%5c%3a%5c%3d:k11',
        'sequence:k12',
        'optional:k13',
        'separated:k14',
        'matches:k15',
        'match:k16',
        'using:k17',
        'q-string',
        'regex',
        'empty-line',
        'final-comment',
        'final-whitespace',
        'bracketed-comment',
        'single-quoted-string',
        'double-quoted-string',
        'version-number',
        'symbol-word',
        'period',
        'integer',
        'comment-tag',
        'comment-word',
        'comma'
      ]
    }
  ],
  'mdlex_options' => [
    {
      'default_prefix' => '(?:[ \\t]*(?:\\n|(?:\\#[^\\n]*\\n)))*[ \\t]*',
      'terminals' => [
        {
          'name' => 'priority:k0',
          'regex' => 'priority'
        },
        {
          'name' => 'the:k1',
          'regex' => 'the'
        },
        {
          'name' => 'action:k2',
          'regex' => 'action'
        },
        {
          'name' => 'is:k3',
          'regex' => 'is'
        },
        {
          'name' => 'semantics:k4',
          'regex' => 'semantics'
        },
        {
          'name' => 'perl5:k5',
          'regex' => 'perl5'
        },
        {
          'name' => 'version:k6',
          'regex' => 'version'
        },
        {
          'name' => 'version%5c%20number:k7',
          'regex' => 'version number'
        },
        {
          'name' => 'start:k8',
          'regex' => 'start'
        },
        {
          'name' => 'symbol:k9',
          'regex' => 'symbol'
        },
        {
          'name' => 'default:ka',
          'regex' => 'default'
        },
        {
          'name' => 'lex:kb',
          'regex' => 'lex'
        },
        {
          'name' => 'prefix:kc',
          'regex' => 'prefix'
        },
        {
          'name' => 'null:kd',
          'regex' => 'null'
        },
        {
          'name' => 'value:ke',
          'regex' => 'value'
        },
        {
          'name' => 'are:kf',
          'regex' => 'are'
        },
        {
          'name' => '%5c%3a:k10',
          'regex' => ':'
        },
        {
          'name' => '%5c%3a%5c%3a%5c%3d:k11',
          'regex' => '::='
        },
        {
          'name' => 'sequence:k12',
          'regex' => 'sequence'
        },
        {
          'name' => 'optional:k13',
          'regex' => 'optional'
        },
        {
          'name' => 'separated:k14',
          'regex' => 'separated'
        },
        {
          'name' => 'matches:k15',
          'regex' => 'matches'
        },
        {
          'name' => 'match:k16',
          'regex' => 'match'
        },
        {
          'name' => 'using:k17',
          'regex' => 'using'
        },
        {
          'builtin' => 'q_quote',
          'name' => 'q-string'
        },
        {
          'builtin' => 'regex',
          'name' => 'regex'
        },
        {
          'name' => 'empty-line',
          'regex' => '^\\h*\\n'
        },
        {
          'name' => 'final-comment',
          'regex' => '\\#[^\\n]*\\Z'
        },
        {
          'name' => 'final-whitespace',
          'regex' => '\\s\\z'
        },
        {
          'name' => 'bracketed-comment',
          'regex' => '\\x{5b}[^\\x{5d}]*\\x{5d}'
        },
        {
          'builtin' => 'single_quote',
          'name' => 'single-quoted-string'
        },
        {
          'builtin' => 'double_quote',
          'name' => 'double-quoted-string'
        },
        {
          'name' => 'version-number',
          'regex' => '\\d+\\.[\\d_.]+\\d'
        },
        {
          'name' => 'symbol-word',
          'regex' => '[a-zA-Z_][a-zA-Z0-9_-]*'
        },
        {
          'name' => 'period',
          'regex' => '\\.'
        },
        {
          'name' => 'integer',
          'regex' => '\\d+'
        },
        {
          'name' => 'comment-tag',
          'regex' => '(to\\s+do|note|comment)'
        },
        {
          'name' => 'comment-word',
          'regex' => '[\\x{21}-\\x{2d}\\x{2f}-\\x{7e}]+'
        },
        {
          'name' => 'comma',
          'regex' => '\\,'
        }
      ]
    }
  ]
};

