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

                return cached
            } else {
                let symbol = Symbol.build(for: identifier, from: ast, in: self)
                identifiers[identifier] = 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
    
    func resolve(from grammar:_STLR.Grammar, in symbolTable: SymbolTable<Self>) throws
    func validate(from grammar:_STLR.Grammar, in symbolTable: SymbolTable<Self>) throws

    var identifier   : String {get}
}

