예제 #1
0
        public void Parse(ExpressionParserHelper parseHelper)
        {
            Token start = parseHelper.Current;

            parseHelper.Expect(FunctionSign);
            var helperExpressionLib = parseHelper.ExpressionLib;

            parseHelper.PushNewTokenConfiguration(new TokenizerConfiguration('\\', _lib.FunctionNamesSet, _lib.FunctionNameSetMaxLength, helperExpressionLib.WhiteSpaceOperandsSet, helperExpressionLib.WhiteSpaceOperandsSetMaxLength, null, true, true), ResetIndex.CurrentAndLookAhead);
            Token token    = parseHelper.Next();
            var   function = _lib.Obtain(token.Contents);

            parseHelper.PopTokenConfiguration(ResetIndex.MaintainPosition);
            parseHelper.Next();
            function.Token  = start;
            function.PreFix = start.Contents;
            parseHelper.Push(function);
            if (function.Arguments.Length == 0)
            {
                BracketsParser.MunchEmptyBrackets(parseHelper);
            }
            else if (function.IsParamsFunctions())
            {
                var bp = new BracketsParser(true, function.Arguments.Length, true);
                bp.Parse(parseHelper);
            }
            else
            {
                var bp = new BracketsParser(true, function.Arguments.Length);
                bp.Parse(parseHelper);
            }
        }
예제 #2
0
        internal void Parse(ExpressionParserHelper parseHelper)
        {
            IgnoreSpaces(parseHelper);
            if (!parseHelper.HasMore())
            {
                return;
            }
            parseHelper.Next();
            Token             current = parseHelper.Current;
            IExpressionParser parser  = null;

            if (current.Type == TokenType.Seperator)
            {
                parser = PARSERS_BY_STR[current.Contents];
            }
            else
            {
                parser = PARSERS_BY_TYPE[typeof(PropertyOrConstant)];
            }
            parser.Parse(parseHelper);
            if (parseHelper.HasMore())
            {
                Parse(parseHelper);
            }
        }
예제 #3
0
        public void Parse(ExpressionParserHelper parseHelper)
        {
            Token start = parseHelper.Current;
            var   helperExpressionLib = parseHelper.ExpressionLib;

            parseHelper.PushNewTokenConfiguration(new TokenizerConfiguration('\\', new HashSet <string> {
                _func.Name
            }, _func.Name.Length, helperExpressionLib.WhiteSpaceOperandsSet, helperExpressionLib.WhiteSpaceOperandsSetMaxLength, null, true, true), ResetIndex.CurrentAndLookAhead);
            parseHelper.Expect(_func.Name);
            parseHelper.PopTokenConfiguration(ResetIndex.LookAhead);
            var function = new Function(_func);

            function.Token = start;
            parseHelper.Push(function);
            parseHelper.Next();
            if (function.Arguments.Length == 0)
            {
                BracketsParser.MunchEmptyBrackets(parseHelper);
            }
            else
            {
                var bp = new BracketsParser(true, function.Arguments.Length);
                bp.Parse(parseHelper);
            }
        }
예제 #4
0
 private static void IgnoreSpaces(ExpressionParserHelper parseHelper)
 {
     while (
         parseHelper.HasMore() &&
         parseHelper.Lookahead.Contents.Trim().Length == 0)
     {
         parseHelper.Next();
     }
 }
예제 #5
0
 public void Parse(ExpressionParserHelper parseHelper)
 {
     Token start = parseHelper.Current;
     parseHelper.PushNewTokenConfiguration(true, true,'\\', new string[] {_func.Name}, parseHelper.ExpressionLib.WhiteSpaceOperands, null, ResetIndex.CurrentAndLookAhead);
     parseHelper.Expect(_func.Name);
     parseHelper.PopTokenConfiguration(ResetIndex.LookAhead);
     var function = new Function(_func);
     function.Token = start;
     parseHelper.Push(function);
     parseHelper.Next();
     if (function.Arguments.Length == 0)
     {
         BracketsParser.MunchEmptyBrackets(parseHelper);
     }
     else
     {
         var bp = new BracketsParser(true, function.Arguments.Length);
         bp.Parse(parseHelper);
     }
 }
예제 #6
0
 public void Parse(ExpressionParserHelper parseHelper)
 {
     Token start = parseHelper.Current;
     parseHelper.Expect(FunctionSign);
     parseHelper.PushNewTokenConfiguration(true, true, '\\', _lib.Functions.Select(f=>f.Name).ToArray(), parseHelper.ExpressionLib.WhiteSpaceOperands, null, ResetIndex.CurrentAndLookAhead);
     Token token = parseHelper.Next();
     var function = _lib.Obtain(token.Contents);
     parseHelper.PopTokenConfiguration(ResetIndex.MaintainPosition);
     parseHelper.Next();
     function.Token = start;
     function.PreFix = start.Contents;
     parseHelper.Push(function);
     if (function.Arguments.Length == 0)
     {
            BracketsParser.MunchEmptyBrackets(parseHelper);
     }
     else
     {
         var bp = new BracketsParser(true, function.Arguments.Length);
         bp.Parse(parseHelper);
     }
 }