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

ParseValue() private méthode

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

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

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