Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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));
        }