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; } } }
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); }