Class: CodeLexer::IdentifierAbstractor

Inherits:
AbstractorPiece show all
Defined in:
lib/code-lexer/abstractor.rb

Instance Method Summary collapse

Methods inherited from AbstractorPiece

#initialize

Constructor Details

This class inherits a constructor from CodeLexer::AbstractorPiece

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