private AstNodeBase GetPropExpr1(AstNodeBase leftChild) { if (!_tokenizer.HasNext) { return(null); } var token = _tokenizer.NextToken(); if (token?.Operator?.Type == OperatorType.Reference) { var strtoken = _tokenizer.NextToken(); AstNodeBase rchild = new StringConstantAstNode { Token = strtoken, DeductedType = typeof(string) }; AstNodeBase node = new PropertyAstNode() { Token = token, RightChild = rchild, }; var nodebase = GetPropExpr1(node); return(nodebase ?? node); } _tokenizer.Failback(token); return(null); }
/// <summary> /// ValExpr ::= DATE /// | NUMBER /// | BOOL /// | PropExpr /// | STRING /// /// </summary> /// <returns></returns> private AstNodeBase GetValExpr() { if (!_tokenizer.HasNext) { return(null); } var node = GetPropExpr(); if (node != null) { return(node); } var token = _tokenizer.NextToken(); if (token.Type == TokenType.DateLiteral) { AstNodeBase tnode = new DateConstantAstNode() { Token = token }; return(tnode); } if (token.Type == TokenType.NumberLiteral) { AstNodeBase tnode = new NumberConstantAstNode() { Token = token }; return(tnode); } if (token.Type == TokenType.StringLiteral) { AstNodeBase tnode = new StringConstantAstNode() { Token = token }; return(tnode); } _tokenizer.Failback(token); return(null); }