System.Linq.Dynamic.Parser.ParseComparison C# (CSharp) Méthode

ParseComparison() private méthode

private ParseComparison ( ParseNode parent ) : void
parent ParseNode
Résultat void
		private void ParseComparison(ParseNode parent) // NonTerminalSymbol: Comparison
		{
			Token tok;
			ParseNode n;
			ParseNode node = parent.CreateNode(_scanner.GetToken(TokenType.Comparison), "Comparison");
			parent.Nodes.Add(node);


			// Concat Rule
			ParseAdditive(node); // NonTerminal Rule: Additive

			// Concat Rule
			tok = _scanner.LookAhead(TokenType.COMPARISON, TokenType.IN); // Option Rule
			if (tok.Type == TokenType.COMPARISON
				|| tok.Type == TokenType.IN)
			{
				tok = _scanner.LookAhead(TokenType.COMPARISON, TokenType.IN); // Choice Rule
				switch (tok.Type)
				{
					// Choice Rule
					case TokenType.COMPARISON:
						do
						{
							// OneOrMore Rule

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

							// Concat Rule
							ParseAdditive(node); // NonTerminal Rule: Additive
							tok = _scanner.LookAhead(TokenType.COMPARISON); // OneOrMore Rule
						} while (tok.Type == TokenType.COMPARISON); // OneOrMore Rule
						break;
					case TokenType.IN:

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

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

						// Concat Rule
						ParseValueList(node); // NonTerminal Rule: ValueList

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

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