public void AddMeta(ICilMetadata meta) { if (validMetadata.Contains(meta, PropertyComparer <ICilMetadata> .Default) || invalidMetadata.Contains(meta, PropertyComparer <ICilMetadata> .Default)) { return; } if (!meta.Validate(logging)) { invalidMetadata.Add(meta); return; } validMetadata.Add(meta); foreach (var matcher in meta.GetMatchers()) { AddMatcher(matcher); } foreach (var childMeta in meta.GetChildren()) { this.AddMeta(childMeta); } }
public void AddMeta(ICilMetadata meta) { if (validMetadata.Contains(meta, PropertyComparer <ICilMetadata> .Default) || invalidMetadata.Contains(meta, PropertyComparer <ICilMetadata> .Default)) { return; } if (!meta.Validate(logging)) { invalidMetadata.Add(meta); return; } validMetadata.Add(meta); // Provide new explicitly used tokens foreach (var token in meta.GetSymbolsInCategory(SymbolCategory.ExplicitlyUsed)) { this.AddSymbol(token); } // Provide new rules var newParseRules = meta.GetProductions(EnumerateSnapshot(symbols)); foreach (var parseRule in newParseRules) { this.AddProduction(meta, parseRule); } // Provide new meta children foreach (var childMeta in meta.GetChildren()) { this.AddMeta(childMeta); } }
public void AddMeta(ICilMetadata meta) { if (validMetadata.Contains(meta, PropertyComparer<ICilMetadata>.Default) || invalidMetadata.Contains(meta, PropertyComparer<ICilMetadata>.Default)) { return; } if (!meta.Validate(logging)) { invalidMetadata.Add(meta); return; } validMetadata.Add(meta); foreach (var matcher in meta.GetMatchers()) { AddMatcher(matcher); } foreach (var childMeta in meta.GetChildren()) { this.AddMeta(childMeta); } }