Class: Antlr4ruby::Vocabulary

Inherits:
Object
  • Object
show all
Defined in:
lib/antlr4ruby/vocabulary.rb

Constant Summary collapse

EMPTY_VOCABULARY =
Vocabulary.new(EMPTY_NAMES, EMPTY_NAMES, EMPTY_NAMES)

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(literal_names, symbolic_names, display_names = []) ⇒ Vocabulary

Returns a new instance of Vocabulary.



7
8
9
10
11
12
13
14
# File 'lib/antlr4ruby/vocabulary.rb', line 7

def initialize(literal_names, symbolic_names, display_names = [])
  super()
  @literal_names = literal_names || EMPTY_NAMES
  @symbolic_names = symbolic_names || EMPTY_NAMES
  @display_names = display_names || EMPTY_NAMES
  longer = literal_names.length > symbolic_names.length ? literal_names.length : symbolic_names.length
  @max_token_type = (longer > @display_names.length ? longer : @display_names.length) - 1
end

Class Method Details

.from_token_names(token_names) ⇒ Object



47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
# File 'lib/antlr4ruby/vocabulary.rb', line 47

def from_token_names(token_names)
  return EMPTY_VOCABULARY if !token_names || (token_names.length <= 0)

  literal_names = token_names.clone
  symbolic_names = token_names.clone
  (0..token_names.length).each do |i|
    token_name = token_names[i]
    next unless token_name

    unless token_name.empty?
      case token_name[0]
      when '\''
        symbolic_names[i] = nil
        next
      when /[A-Z]+/
        literal_names[i] = nil
        next
      end
    end
    literal_names[i] = nil
    symbolic_names[i] = nil
  end
  Vocabulary.new(literal_names, symbolic_names, token_names)
end

Instance Method Details

#get_display_name(token_type) ⇒ Object



36
37
38
# File 'lib/antlr4ruby/vocabulary.rb', line 36

def get_display_name(token_type)
  @display_names[token_type] || get_literal_name(token_type) || get_symbolic_name(token_type) || token_type.to_s
end

#get_literal_name(token_type) ⇒ Object



26
27
28
# File 'lib/antlr4ruby/vocabulary.rb', line 26

def get_literal_name(token_type)
  @literal_names[token_type]
end

#get_max_token_typeObject



40
41
42
# File 'lib/antlr4ruby/vocabulary.rb', line 40

def get_max_token_type
  @max_token_type
end

#get_symbolic_name(token_type) ⇒ Object



30
31
32
33
34
# File 'lib/antlr4ruby/vocabulary.rb', line 30

def get_symbolic_name(token_type)
  return 'EOF' if token_type == Token::EOF

  @symbolic_names[token_type]
end