Sha256: b4c3e4c8a5f8ffc74c4beb0a637562aee2d7ec13377b7bc04c56ab93ff2f15f3

Contents?: true

Size: 1.15 KB

Versions: 15

Compression:

Stored size: 1.15 KB

Contents

# Allows specifying rules as strings using the exact same grammar that treetop
# does, minus the actions. This is on one hand a good example of a fully
# fledged parser and on the other hand might even turn out really useful. 
#
# This can be viewed as an extension to parslet and might even be hosted in
# its own gem one fine day. 
# 
class Parslet::Expression
  include Parslet
  
  autoload :Treetop, 'parslet/expression/treetop'
  
  # Creates a parslet from a foreign language expression. 
  #
  # Example: 
  #   
  #   Parslet::Expression.new("'a' 'b'")
  #
  def initialize(str, opts={}, context=self)
    @type = opts[:type] || :treetop
    @exp = str
    @parslet = transform(
      parse(str))
  end
  
  # Transforms the parse tree into a parslet expression. 
  #
  def transform(tree)
    transform = Treetop::Transform.new
    
    # pp tree
    transform.apply(tree)
  rescue 
    warn "Could not transform: " + tree.inspect
    raise
  end
  
  # Parses the string and returns a parse tree.
  #
  def parse(str)
    parser = Treetop::Parser.new
    parser.parse(str)
  end

  # Turns this expression into a parslet.
  #
  def to_parslet
    @parslet
  end
end

Version data entries

15 entries across 15 versions & 3 rubygems

Version Path
parslet-2.0.0 lib/parslet/expression.rb
parslet-1.8.2 lib/parslet/expression.rb
parslet-1.8.1 lib/parslet/expression.rb
parslet-1.8.0 lib/parslet/expression.rb
swift-pyrite-0.1.1 vendor/bundle/ruby/2.0.0/gems/parslet-1.7.1/lib/parslet/expression.rb
swift-pyrite-0.1.0 vendor/bundle/ruby/2.0.0/gems/parslet-1.7.1/lib/parslet/expression.rb
parslet-1.7.1 lib/parslet/expression.rb
parslet-1.7.0 lib/parslet/expression.rb
parslet-1.6.2 lib/parslet/expression.rb
parslet-1.6.1 lib/parslet/expression.rb
parslet-1.6.0 lib/parslet/expression.rb
parslet-1.5.0 lib/parslet/expression.rb
ghazel-parslet-1.4.0.2 lib/parslet/expression.rb
ghazel-parslet-1.4.0.1 lib/parslet/expression.rb
parslet-1.4.0 lib/parslet/expression.rb