class ANTLR3::AST::Wizard::PatternParser
A class that is used internally by AST::Wizard
to construct AST
tree objects from a tokenized tree pattern
Constants
- CONTINUE_TYPES
Public Class Methods
new( tokenizer, token_scheme, adaptor )
click to toggle source
# File lib/antlr3/tree/wizard.rb, line 193 def initialize( tokenizer, token_scheme, adaptor ) @tokenizer = tokenizer @token_scheme = token_scheme @adaptor = adaptor @token_type = tokenizer.next_token end
parse( pattern, token_scheme, adaptor )
click to toggle source
# File lib/antlr3/tree/wizard.rb, line 186 def self.parse( pattern, token_scheme, adaptor ) lexer = PatternLexer.new( pattern ) new( lexer, token_scheme, adaptor ).pattern end
Public Instance Methods
parse_node()
click to toggle source
# File lib/antlr3/tree/wizard.rb, line 234 def parse_node label = nil if @token_type == :percent ( @token_type = @tokenizer.next_token ) == :identifier or return nil label = @tokenizer.text ( @token_type = @tokenizer.next_token ) == :colon or return nil @token_type = @tokenizer.next_token end if @token_type == :dot @token_type = @tokenizer.next_token wildcard_payload = CommonToken.create( :type => 0, :text => '.' ) node = WildcardPattern.new( wildcard_payload ) label and node.label = label return node end @token_type == :identifier or return nil token_name = @tokenizer.text @token_type = @tokenizer.next_token token_name == 'nil' and return @adaptor.create_flat_list text = token_name arg = nil if @token_type == :argument arg = @tokenizer.text text = arg @token_type = @tokenizer.next_token end node_type = @token_scheme[ token_name ] || INVALID_TOKEN_TYPE node = @adaptor.create_from_type( node_type, text ) if Pattern === node node.label, node.has_text_arg = label, arg end return node end
parse_tree()
click to toggle source
# File lib/antlr3/tree/wizard.rb, line 213 def parse_tree @token_type != :open and return nil @token_type = @tokenizer.next_token root = parse_node or return nil loop do case @token_type when :open subtree = parse_tree @adaptor.add_child( root, subtree ) when :identifier, :percent, :dot child = parse_node or return nil @adaptor.add_child( root, child ) else break end end @token_type == :close or return nil @token_type = @tokenizer.next_token return root end
pattern()
click to toggle source
# File lib/antlr3/tree/wizard.rb, line 200 def pattern case @token_type when :open then return parse_tree when :identifier node = parse_node @token_type == EOF and return node return nil end return nil end