Пример #1
0
            public IParserRuleRuleItemConfigurator <TToken, TRule> WithR(TRule type)
            {
                var option = new RuleOption(this.ruleType);

                this.options.Add(option);
                return(option.AddElement(type));
            }
Пример #2
0
        public class RuleFunctionCall : RuleSequence {   //NAME S*'(' PARAMS? ')' S* RETURNS? (COMMENT | EOL)
            public RuleFunctionCall(Rule Parent)
                : base(Parent)
            {
                m_Parent = this;
                this.AddNode(new RuleSpaceOptional(m_Parent));
                this.AddNode(new RuleName(m_Parent));
                this.AddNode(new RuleLPar(m_Parent));
                RuleOption y = new RuleOption(m_Parent);

                y.AddNode(new RuleParams(m_Parent));
                this.AddNode(y);
                this.AddNode(new RuleRPar(m_Parent));
                y = new RuleOption(m_Parent);
                y.AddNode(new RuleReturns(m_Parent));
                this.AddNode(y);
                this.AddNode(new RuleEOLComment(m_Parent));
                //Todo parse catch-exception statement
                RuleOption   cat = new RuleOption(m_Parent);
                RuleSequence z   = new RuleSequence(m_Parent);

                z.AddNode(new RuleRegex(m_Parent, s_ManyWhitespace + "catch", this));
                z.AddNode(new RuleLPar(m_Parent));
                z.AddNode(new RuleParams(m_Parent));
                z.AddNode(new RuleRPar(m_Parent));
                z.AddNode(new RuleEOLComment(m_Parent));
                z.AddNode(new RuleLCurlPar(m_Parent));
                z.AddNode(new RuleBody(m_Parent));
                z.AddNode(new RuleRCurlPar(m_Parent));
                cat.AddNode(z);
                this.AddNode(cat);
            }
Пример #3
0
        public class RuleUsing : RuleSequence {   //using STRING as NAME  or using STRING
            public RuleUsing(Rule Parent)
                : base(Parent)
            {
                m_Parent = this;
                this.AddNode(new RuleRegex(m_Parent, s_ManyWhitespace + "using" + s_ManyWhitespace, this));
                this.AddNode(new RuleString(m_Parent));

                RuleSequence x = new RuleSequence(m_Parent);

                x.AddNode(new RuleRegex(m_Parent, s_ManyWhitespace + "as" + s_ManyWhitespace, this));
                x.AddNode(new RuleName(m_Parent));

                RuleOption y = new RuleOption(m_Parent);

                y.AddNode(x);
                this.AddNode(y);
                this.AddNode(new RuleEOLComment(m_Parent));
            }
Пример #4
0
        public class RuleSwitch : RuleSequence { //'switch' S* '(' EXPRESSION ')' (COMMENT | EOL) '{' EOL
                                                 //('case ' VALUE ':' EOL
                                                 //    ...
                                                 //    BREAK )?
                                                 // 'default:' EOL
                                                 //    ...
                                                 //'}'
            public RuleSwitch(Rule Parent)
                : base(Parent)
            {
                m_Parent = this;
                this.AddNode(new RuleRegex(m_Parent, s_ManyWhitespace + "\\bswitch\\b" + s_ManyWhitespace, this));
                this.AddNode(new RuleLPar(m_Parent));
                this.AddNode(new RuleName(m_Parent));
                this.AddNode(new RuleRPar(m_Parent));
                this.AddNode(new RuleEOLComment(m_Parent));
                this.AddNode(new RuleLCurlPar(m_Parent));
                RuleMultiple x = new RuleMultiple(m_Parent, 0);

                x.AddNode(new RuleSwitchCase(m_Parent));
                this.AddNode(x);
                RuleOption y = new RuleOption(m_Parent);

                y.AddNode(new RuleSwitchDefault(m_Parent));
                this.AddNode(y);
                this.AddNode(new RuleRCurlPar(m_Parent));
            }
Пример #5
0
        public class RuleFunctionDecl : RuleSequence {  //'function ' NAME S*'(' PARAMDECL? ')' S* RETDECL? S* '{' (COMMENT | EOL) FUNCBODY '}' EOL?
            public RuleFunctionDecl(Rule Parent)
                : base(Parent)
            {
                m_Parent = this;
                this.AddNode(new RuleRegex(m_Parent, s_ManyWhitespace + "function[ \\t]+", this));
                this.AddNode(new RuleName(m_Parent));
                this.AddNode(new RuleLPar(m_Parent));
                RuleOption y = new RuleOption(m_Parent);

                y.AddNode(new RuleParamDecl(m_Parent));
                this.AddNode(y);
                this.AddNode(new RuleRPar(m_Parent));
                y = new RuleOption(m_Parent);
                y.AddNode(new RuleRetDecl(m_Parent));
                this.AddNode(y);
                this.AddNode(new RuleEOLComment(m_Parent));
                //y = new RuleOption(m_Parent);       //body is optional??
                this.AddNode(new RuleLCurlPar(m_Parent));
                this.AddNode(new RuleBody(m_Parent));
                this.AddNode(new RuleRCurlPar(m_Parent));
                //this.AddNode(y);
            }
Пример #6
0
        public class RuleIf : RuleSequence { //'if' S* '(' EXPRESSION ')' (COMMENT | EOL) BODY ('else' (COMMENT | EOL) BODY)?
            public RuleIf(Rule Parent)
                : base(Parent)
            {
                m_Parent = this;
                this.AddNode(new RuleRegex(m_Parent, s_ManyWhitespace + "\\bif\\b" + s_ManyWhitespace, this));
                this.AddNode(new RuleLPar(m_Parent));
                this.AddNode(new RuleBoolExpr(m_Parent));
                this.AddNode(new RuleRPar(m_Parent));
                this.AddNode(new RuleEOLComment(m_Parent));
                this.AddNode(new RuleLCurlPar(m_Parent));
                this.AddNode(new RuleBody(m_Parent));
                this.AddNode(new RuleRCurlPar(m_Parent));
                RuleOption   y = new RuleOption(m_Parent);
                RuleSequence x = new RuleSequence(m_Parent);

                x.AddNode(new RuleRegex(m_Parent, s_ManyWhitespace + "\\belse\\b" + s_ManyWhitespace, this));
                x.AddNode(new RuleEOLComment(m_Parent));
                x.AddNode(new RuleLCurlPar(m_Parent));
                x.AddNode(new RuleBody(m_Parent));
                x.AddNode(new RuleRCurlPar(m_Parent));
                y.AddNode(x);
                this.AddNode(y);
            }
Пример #7
0
            public RuleDecl(Rule Parent) : base(Parent)
            {
                m_Parent = this;
                this.AddNode(new RuleSpaceOptional(m_Parent));
                this.AddNode(new RuleBaseType(m_Parent));
                this.AddNode(new RuleSpace(m_Parent));
                this.AddNode(new RuleName(m_Parent));
                RuleSequence z = new RuleSequence(m_Parent);

                z.AddNode(new RuleRegex(m_Parent, s_ManyWhitespace + "=" + s_ManyWhitespace, this));
                RuleAlternative x = new RuleAlternative(m_Parent);

                x.AddNode(new RuleString(m_Parent));
                x.AddNode(new RuleBool(m_Parent));
                x.AddNode(new RuleName(m_Parent));
                x.AddNode(new RuleExpr(m_Parent));
                z.AddNode(x);
                RuleOption y = new RuleOption(m_Parent);

                y.AddNode(z);
                this.AddNode(y);
                this.AddNode(new RuleEOLComment(m_Parent));
            }
        private TResponse Fail <TResponse, TRule>(RequestData requestData, TRule rule, RuleOption <Exception, int> returnOverride = null)
            where TResponse : class, IElasticsearchResponse, new()
            where TRule : IRule
        {
            var state  = _calls[requestData.Uri.Port];
            var failed = Interlocked.Increment(ref state.Failures);
            var ret    = returnOverride ?? rule.Return;

            if (ret == null)
            {
                throw new TheException();
            }

            return(ret.Match(
                       (e) => throw e,
                       (statusCode) => ReturnConnectionStatus <TResponse>(requestData, CallResponse(rule),
                                                                          //make sure we never return a valid status code in Fail responses because of a bad rule.
                                                                          statusCode >= 200 && statusCode < 300 ? 502 : statusCode, rule.ReturnContentType)
                       ));
        }
Пример #9
0
 public RuleSubRuleElement(TRule ruleType, RuleOption option)
     : base(option)
     => this.RuleType = ruleType;
Пример #10
0
 public RuleTokenElement(TToken tokenType, RuleOption option)
     : base(option)
     => this.tokenType = tokenType;
Пример #11
0
 protected RuleElement(RuleOption option) => this.option = option;
Пример #12
0
 public Rule(RuleOption option)
 {
     Option    = option;
     ViewRules = option.ViewRules.Select(opt => new ViewRule(Option.AddressDevice, opt)).ToList();
 }