Home | History | Annotate | Download | only in tree

Lines Matching defs:Pattern

84   # test whether a tree matches a pattern
88 # extract nodes matching a pattern
94 # iterate through the tree and extract nodes with pattern labels
144 attr_reader :text, :error, :pattern
145 def initialize( pattern )
146 @pattern = pattern.to_s
147 @scanner = StringScanner.new( pattern )
156 type, = PATTERNS.find do |type, pattern|
157 @scanner.scan( pattern )
178 =begin rdoc ANTLR3::AST::Wizard::Pattern
181 from a tokenized tree pattern
186 def self.parse( pattern, token_scheme, adaptor )
187 lexer = PatternLexer.new( pattern )
188 new( lexer, token_scheme, adaptor ).pattern
200 def pattern
267 if Pattern === node
275 =begin rdoc ANTLR3::AST::Wizard::Pattern
278 to validate tree structures as well as to extract nodes that match the pattern.
282 class Pattern < CommonTree
307 a tree pattern. They are represented by '.' in tree pattern specifications.
311 class WildcardPattern < Pattern; end
322 return Pattern.new( payload )
337 def create( pattern )
338 PatternParser.parse( pattern, @token_scheme, @adaptor )
365 def find_pattern( tree, pattern )
367 visit_pattern( tree, pattern ) { | t, | subtrees << t }
380 | pattern (String) or a token type (Integer)
403 def visit_pattern( tree, pattern, &block )
404 pattern = Pattern.parse( pattern, @token_scheme )
406 if pattern.nil? or pattern.flat_list? or pattern.is_a?( WildcardPattern )
410 visit( tree, pattern.type ) do | tree, parent, child_index, labels |
411 labels = match!( tree, pattern ) and
416 def match( tree, pattern )
417 pattern = Pattern.parse( pattern, @token_scheme )
419 return( match!( tree, pattern ) )
422 def match!( tree, pattern, labels = {} )
423 tree.nil? || pattern.nil? and return false
424 unless pattern.is_a? WildcardPattern
425 @adaptor.type_of( tree ) == pattern.type or return false
426 pattern.has_text_arg && ( @adaptor.text_of( tree ) != pattern.text ) and
429 labels[ pattern.label ] = tree if labels && pattern.label
432 return false unless number_of_children == pattern.child_count
436 pattern_child = pattern.child( index )