IwoHerka/sexpr

View on GitHub
docs/source/verifing_expressions.rst

Summary

Maintainability
Test Coverage
Verifing S-expressions
======================

Validation of s-expressions could not be simpler. You just pass the expression
and receive a boolean in return:

.. code-block:: python

    grammar = sexpr.load('sql.yml')

    exp = ['select',
              ['set_quantifier', "all"],
              ['from_clause',
                  ['table_as',
                      ['table_name', 'suppliers'],
                      ['range_var_name', "s1"]
                  ]
              ],
              ['where_clause',
                  ['tautology', true]
              ]
          ]

    grammar.matches(exp)
    # = True

    grammar.matches(['+', 1, 2])
    # = False (oops, wrong grammar)

For simplicity and convienience, s-expressions are constructed with lists.
Everything other than a list is assumed to be a terminal. You can, however,
use a subclass of the list.

.. warning::

    As a consequence of using lists as containers for s-expressions,
    **terminal** lists (if they are allowed by your grammar)
    with the same grammar as expressions they are embedded
    in can easily produce false results. As rare as such situation is,
    in order to avoid it altogheter it's best to convert such lists to tuples
    (or wrap them with a terminal).