Sha256: 169ba61def39320e205f93e952fe551ab632a84fc9d96fa606f212be73648b02

Contents?: true

Size: 1.18 KB

Versions: 4

Compression:

Stored size: 1.18 KB

Contents

require File.join(File.dirname(__FILE__), "..", "lib", "tire_swing")

Treetop.load_from_string <<-GRAMMAR
module SimpleAssignment
  grammar Grammar
    rule assignment
      lhs:variable space* "=" space* rhs:variable <node(:assignment)>
    end
    rule variable
      [a-z]+ <node(:variable)>
    end
    rule space
      [ ]+
    end
  end
end
GRAMMAR

module SimpleAssignment

  # Define nodes for the AST
  module AST
    include TireSwing::NodeDefinition
    node :assignment, :lhs, :rhs
    node :variable, :value => :text_value
  end

  include TireSwing::VisitorDefinition

  # Define a simple visitor to walk the AST and build a hash
  visitor :hash_visitor do
    visits AST::Assignment do |assignment|
      { visit(assignment.lhs) => visit(assignment.rhs) }
    end
    visits AST::Variable do |var|
      var.value
    end
  end

  # Set up the parser helper, pointing to the grammar and the AST
  # This defines GrammarParser.ast on the Treetop-provided GrammarParser.
  TireSwing.parses_grammar(Grammar, AST)

end

require "pp"
ast = SimpleAssignment::GrammarParser.ast("foo=bar")
puts "----- AST -----"
pp ast
puts "\n----- visitor output -----"
pp SimpleAssignment::HashVisitor.visit(ast)

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
aniero-tire_swing-0.0.3 examples/simple_assignment.rb
aniero-tire_swing-0.0.4 examples/simple_assignment.rb
aniero-tire_swing-0.0.5 examples/simple_assignment.rb
aniero-tire_swing-0.0.6 examples/simple_assignment.rb