System.Linq.Dynamic.Parser.ParseExpression C# (CSharp) Method

ParseExpression() private method

private ParseExpression ( ParseNode parent ) : void
parent ParseNode
return void
		private void ParseExpression(ParseNode parent) // NonTerminalSymbol: Expression
		{
			ParseNode node = parent.CreateNode(_scanner.GetToken(TokenType.Expression), "Expression");
			parent.Nodes.Add(node);


			// Concat Rule
			ParseLogicalOr(node); // NonTerminal Rule: LogicalOr

			// Concat Rule
			var tok = _scanner.LookAhead(TokenType.QUESTION);
			if (tok.Type == TokenType.QUESTION)
			{

				// Concat Rule
				tok = _scanner.Scan(TokenType.QUESTION); // Terminal Rule: QUESTION
				var n = node.CreateNode(tok, tok.ToString());
				node.Token.UpdateRange(tok);
				node.Nodes.Add(n);
				if (tok.Type != TokenType.QUESTION)
				{
					tree.Errors.Add(new ParseError(
						"Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.QUESTION.ToString(), 0x1001, tok));
					return;
				}

				// Concat Rule
				ParseExpression(node); // NonTerminal Rule: Expression

				// Concat Rule
				tok = _scanner.Scan(TokenType.COLON); // Terminal Rule: COLON
				n = node.CreateNode(tok, tok.ToString());
				node.Token.UpdateRange(tok);
				node.Nodes.Add(n);
				if (tok.Type != TokenType.COLON)
				{
					tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.COLON.ToString(),
						0x1001, tok));
					return;
				}

				// Concat Rule
				ParseExpression(node); // NonTerminal Rule: Expression
			}

			parent.Token.UpdateRange(node.Token);
		} // NonTerminalSymbol: Expression