示例#1
0
        public IRule  Parse(IParserImmutableContext context)
        {
            var(name, rulePattern, tokenPattern) = this.TryParse(context);

            if (string.IsNullOrEmpty(name))
            {
                throw new UserRuleParserBadNameException();
            }

            if (string.IsNullOrEmpty(rulePattern))
            {
                throw new UserRuleParserBadRulePatternException();
            }

            if (string.IsNullOrEmpty(tokenPattern))
            {
                throw new UserRuleParserBadTokenExpressionException();
            }

            var tokenExpression = this.ParseTokenExpression(tokenPattern);

            if (tokenExpression == null)
            {
                throw new UserRuleParserBadTokenExpressionException();
            }

            var rule = new UserRule(name: name, rulePattern: rulePattern, tokenConvertionPattern: tokenExpression);

            if (!rule.IsValid(context))
            {
                throw new UserRuleParserBadTokenExpressionException();
            }

            DefaultParserContext.GlobalContext.ParsedRules.Push(rule);

            return(rule);
        }