internal IEnumerable <SemanticItem> Match(SemanticItem pattern, SemanticItem input) { pattern = pattern.WithConstraints(pattern.Constraints.AddConditions(input.Constraints.Conditions)); var matchFactory = getMatchFactory(pattern); if (matchFactory == null) { return(new SemanticItem[0]); } var result = matchFactory.Generate(input).ToArray(); return(result); }
private SemanticItem generateCurrentState(string[] inputTokens, Constraints inputConstraints) { var isValid = _parts.All(p => p.TryToValidate()); var totalLength = _parts.Select(p => p.CurrentLength).Sum(); if (!isValid || totalLength != inputTokens.Length) { return(null); } var constraints = inputConstraints; for (var i = 0; i < _parts.Length; ++i) { constraints = _parts[i].Substitute(constraints); } return(_pattern.WithConstraints(constraints)); }