Class Puppet::Parser::Lexer::TokenList
In: lib/puppet/parser/lexer.rb
Parent: Object

Maintain a list of tokens.

Methods

[]   add_token   add_tokens   lookup   new   sort_tokens  

Attributes

regex_tokens  [R] 
string_tokens  [R] 

Public Class methods

[Source]

    # File lib/puppet/parser/lexer.rb, line 75
75:         def initialize
76:             @tokens = {}
77:             @regex_tokens = []
78:             @string_tokens = []
79:             @tokens_by_string = {}
80:         end

Public Instance methods

[Source]

    # File lib/puppet/parser/lexer.rb, line 50
50:         def [](name)
51:             @tokens[name]
52:         end

Create a new token.

[Source]

    # File lib/puppet/parser/lexer.rb, line 55
55:         def add_token(name, regex, options = {}, &block)
56:             token = Token.new(regex, name)
57:             raise(ArgumentError, "Token %s already exists" % name) if @tokens.include?(name)
58:             @tokens[token.name] = token
59:             if token.string
60:                 @string_tokens << token
61:                 @tokens_by_string[token.string] = token
62:             else
63:                 @regex_tokens << token
64:             end
65: 
66:             options.each do |name, option|
67:                 token.send(name.to_s + "=", option)
68:             end
69: 
70:             token.meta_def(:convert, &block) if block_given?
71: 
72:             token
73:         end

Define more tokens.

[Source]

    # File lib/puppet/parser/lexer.rb, line 88
88:         def add_tokens(hash)
89:             hash.each do |regex, name|
90:                 add_token(name, regex)
91:             end
92:         end

Look up a token by its value, rather than name.

[Source]

    # File lib/puppet/parser/lexer.rb, line 83
83:         def lookup(string)
84:             @tokens_by_string[string]
85:         end

Sort our tokens by length, so we know once we match, we‘re done. This helps us avoid the O(n^2) nature of token matching.

[Source]

    # File lib/puppet/parser/lexer.rb, line 96
96:         def sort_tokens
97:             @string_tokens.sort! { |a, b| b.string.length <=> a.string.length }
98:         end

[Validate]