SexpGrammar

A helper to manipulate sexp grammars.

Example

grammar = SexpGrammar.load("\n  # alternative rule\n  bool_expr:\n    - bool_and\n    - bool_or\n    - bool_not\n    - var_ref\n    - literal\n\n  # non-terminal\n  bool_and:\n    - [ bool_expr, bool_expr ]\n  bool_or:\n    - [ bool_expr, bool_expr ]\n  bool_not:\n    - [ bool_expr ]\n  literal:\n    - [ truth_value ]\n  var_ref:\n    - [ var_name ]\n\n  # terminals\n  var_name:\n    !ruby/regexp /^[a-z]+$/\n  truth_value:\n    - true\n    - false\n\n")

grammar === [:bool_and, [:bool_not, [:var_ref, "x"]], [:literal, true]]
# => true

grammar === [:bool_and, [:literal, "true"]]
# => false (second term is missing)

https://github.com/blambeau/sexp_grammar