Sha256: 3c4d3520c79862210ad325def0892f629a93bdecc8cffda4621a9fcaa63ace4c

Contents?: true

Size: 1.19 KB

Versions: 1

Compression:

Stored size: 1.19 KB

Contents

require 'spec_helper'
describe "the README examples" do

  it 'works as announced' do

    grammar = Sexpr.load(<<-YAML)
      rules:
        # alternative rule
        bool_expr:
          - bool_and
          - bool_or
          - bool_not
          - var_ref
          - bool_lit

        # non-terminal
        bool_and:
          - [ bool_expr, bool_expr ]
        bool_or:
          - [ bool_expr, bool_expr ]
        bool_not:
          - [ bool_expr ]
        bool_lit:
          - [ truth_value ]
        var_ref:
          - [ var_name ]

        # terminals
        var_name:
          !ruby/regexp /^[a-z]+$/
        truth_value:
          - true
          - false
    YAML

    # the grammar can be used to verify the structure of s-expressions
    f = (grammar === [:bool_and, [:bool_not, [:var_ref, "x"]], [:bool_lit, true]])
    f.should be_true

    f = (grammar === [:bool_and, [:bool_lit, "true"]])
    f.should be_false

    # the grammar can also be used to automatically have support on top of
    # such s-expressions
    expr = grammar.sexpr([:bool_lit, true])

    (expr.sexpr_type).should eq(:bool_lit)
    # => :bool_lit

    (expr.sexpr_body).should eq([true])
    # => [true]
  end

end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
sexpr-0.3.0 spec/test_readme_examples.rb