Class: CodeLexer::IdentifierAbstractor
Instance Method Summary
collapse
#initialize
Instance Method Details
#abstract(tokens) ⇒ Object
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
|
# File 'lib/code-lexer/abstractor.rb', line 117
def abstract(tokens)
identifier_tokens = tokens.select { |t| t.type == :identifier }
identifiers = identifier_tokens.map { |id| id.value }.uniq
identifiers.each do |id|
if @abstractor.identifiers_dictionary.include?(id)
abstracted_id = @abstractor.identifiers_dictionary.index(id)
else
abstracted_id = @abstractor.identifiers_dictionary.size
@abstractor.identifiers_dictionary << id
end
identifier_tokens.select { |t| t.value == id }.each do |matching_token|
matching_token.abstracted_value = Token.special("ID#{abstracted_id}")
end
end
return tokens
end
|
#deabstract(tokens) ⇒ Object
137
138
139
140
141
142
143
144
145
146
|
# File 'lib/code-lexer/abstractor.rb', line 137
def deabstract(tokens)
tokens.select { |t| t.abstracted_value.match?(/.ID[0-9]+./) }.each do |token|
id = token.abstracted_value.scan(/.ID([0-9]+)./).flatten[0].to_i
token.type = :identifier
token.value = @abstractor.identifiers_dictionary[id]
end
return tokens
end
|