Sha256: b9abfdbcfdf0a0122f252023676808ac549c7d5d3c44d090fab66e8a6875a830

Contents?: true

Size: 870 Bytes

Versions: 4

Compression:

Stored size: 870 Bytes

Contents

# This demonstrates a grammar using inline evals to use Treetop to build an external TireSwing-based AST.
# Don't do this, this takes away a good bit of the magic.
module AssignmentsLanguage
  grammar Grammar

    rule assignments
      ( blank_line / assignment )* {
        def eval
          Assignments.new :assignments => elements.map {|child| child.eval}
        end
      }
    end

    rule assignment
      lhs:variable whitespace* "=" whitespace* rhs:variable {
        def eval
          Assignment.new(:lhs => lhs.eval, :rhs => rhs.eval)
        end
      }
    end

    rule variable
      [a-z]+ {
        def eval
          Variable.new( :value => text_value)
        end
      }
    end

    rule whitespace
      [ \t]
    end

    rule blank_line
      whitespace* [\n] {
        def eval
          BlankLine.new
        end
      }
    end

  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
aniero-tire_swing-0.0.3 spec/grammars/assignments.treetop
aniero-tire_swing-0.0.4 spec/grammars/assignments.treetop
aniero-tire_swing-0.0.5 spec/grammars/assignments.treetop
aniero-tire_swing-0.0.6 spec/grammars/assignments.treetop