Configuration DSL

A small DSL is bein used to set up the grammar.

Files using this DSL are read and processed, and the data is then sent to the grammar factory to build the grammar.

An example of this DSL, defining the Agreement Record:

transaction_record:
    id: agreement
    head: AGR
    rules:
      [
      sequence
        [
        field: submitter_agreement_n
        field: international_standard_code
        field: agreement_type
        field: agreement_start_date
        field: agreement_end_date
        field: retention_end_date
        field: prior_royalty_status
        field: prior_royalty_start_date
        field: post_term_collection_status
        field: post_term_collection_end_date
        field: date_of_signature
        field: number_of_works
        field: sales_manufacture_clause
        field: shares_change
        field: advance_given
        field: society_assigned_agreement_n
        ]
    ]

Rules composition

Rules are composed of several smaller rules. The terminal rules are the fields, defined on their own module.

This creates a tree of rules.

There are two groups of rules in a tree:

  • Rules. Composed from a series of other rules.
  • Rules lists. These are a set of rules, grouped by a combinatory rule.

Note that rules can be terminal rules. All rule blocks should generate trees ending in terminal rules.

Rules tree

Show how the rules are defined as a tree.

Structure

The DSL consists on a series of blocks, each of them representing a grammar rule.

These rules represent a logical section of the file, and may be for a line, or for a series of them.

They have the following structure, which only shows compulsory fields:

rule_group_1:
    id: rule_id_1
    rules:
      [
      internal_rules_list
        [
        rule_group_2: rule_id_2
        rule_group_1: rule_id_3
        rule_group_2: rule_id_4
        ]
      rule_group_2: rule_id_5
    ]

Compulsory fields

Each block has a set of required fields:

Field Notes
Root rule group The root of the block. In the example it is ‘transaction_record’. It indicates the global group to which it belongs.
Rule id Identifier for this rule
Rules The smaller rules which compose this rule
Internal rules A new tree of rules
Rule group A group of rules