                 return cached
             } else {
                 let symbol = Symbol.build(for: identifier, from: ast, in: self)
-                identifiers[identifier] = symbol
+                set(identifier, to: symbol)
+                
                 return symbol
             }
         }
-        
-        set{
-            identifiers[identifier] = newValue
-        }
+
     }
 }

public protocol SymbolType {
    static func build(for identifier: String, from grammar: _STLR.Grammar, in symbolTable: SymbolTable<Self>)->Self
    
    var identifier   : String {get}
}


        return identifiers[identifier] != nil
    }
    
    private func set(_ identifier:String, to symbol:Symbol){
        identifiers[identifier] = symbol
    }
    
    subscript(_ identifier:String)->Symbol{
        get {

