示例#1
0
        public void ParseToken(DslToken token)
        {
            if (_expressionDepth > 0)
            {
                switch (token.TokenType)
                {
                case "openParenthesis":
                    _expressionDepth++;
                    break;

                case "closeParenthesis":
                    _expressionDepth--;
                    if (_expressionDepth == 0)
                    {
                        _fiqlElements.Add(_currentChildExpression);
                        _currentChildExpression = null;
                    }
                    break;

                case "sequenceTerminator":
                    throw new FIQLException("FIQL Clause is not correct. There are too much open parenthesis.");

                default:
                    _currentChildExpression.ParseToken(token);
                    break;
                }
            }
            else
            {
                switch (token.TokenType)
                {
                case "openParenthesis":
                    _expressionDepth++;
                    _currentChildExpression = new FIQLExpression();
                    break;

                case "closeParenthesis":
                    throw new FIQLException("FIQL Clause is not correct. We encountered a problem with a close parenthesis.");

                case "constraint":
                    // TODO : modify with the column name
                    var fiqlConstraint = new FIQLConstraint();
                    fiqlConstraint.ParseToken(token);
                    _fiqlElements.Add(fiqlConstraint);
                    break;

                case "operator":
                    var fiqlOperator = new FIQLOperator();
                    fiqlOperator.ParseToken(token);
                    _fiqlElements.Add(fiqlOperator);
                    break;

                case "sequenceTerminator":
                    return;
                }
            }
        }
示例#2
0
        public FIQLExpression Parse(string fiqlQuery)
        {
            var expressionTokenDefinitions = new ExpressionTokenDefinitions();
            var tokenizer = new Tokenizer(expressionTokenDefinitions.TokenDefinitions);
            var tokens    = tokenizer.Tokenize(fiqlQuery);

            FIQLExpression rootExpression = new FIQLExpression();

            foreach (var token in tokens)
            {
                rootExpression.ParseToken(token);
            }
            return(rootExpression);
        }