CSharpUtils.Templates.TemplateHandler.HandleLevel_Identifier C# (CSharp) Метод

HandleLevel_Identifier() публичный Метод

public HandleLevel_Identifier ( ) : ParserNode
Результат ParserNode
		public ParserNode HandleLevel_Identifier()
		{
			ParserNode ParserNode;

			switch (CurrentTokenType)
			{
				case "OperatorTemplateToken":
					String Operator = CurrentToken.Text;
					switch (Operator)
					{
						// Unary Operators
						case "+": case "-":
							Tokens.MoveNext();
							ParserNode = new ParserNodeUnaryOperation()
							{
								Parent = HandleLevel_Identifier(),
								Operator = Operator,
							};
							Tokens.MoveNext();
							break;
						case "(":
							Tokens.MoveNext();
							ParserNode = HandleLevel_Expression();
							Tokens.ExpectValueAndNext(")");
							break;
						default:
							throw (new Exception(String.Format("Invalid operator '{0}'('{1}')", CurrentTokenType, CurrentToken.Text)));
					}
					break;
				case "NumericLiteralTemplateToken":
					ParserNode = new ParserNodeNumericLiteral()
					{
						Value = Int64.Parse(CurrentToken.Text),
					};
					Tokens.MoveNext();
					break;
				case "IdentifierTemplateToken":
					String Id = CurrentToken.Text;
					Tokens.MoveNext();

					// Constants.
					switch (Id) {
						case "true":
							ParserNode = new ParserNodeConstant(Id);
							break;
						case "false":
							ParserNode = new ParserNodeConstant(Id);
							break;
						case "none":
							ParserNode = new ParserNodeConstant(Id);
							break;
						default:
							ParserNode = new ParserNodeIdentifier(Id);

							while (true)
							{
								if (CurrentToken.Text == ".")
								{
									Tokens.MoveNext();
									TemplateToken AcessToken = Tokens.ExpectTypeAndNext(typeof(IdentifierTemplateToken));
									ParserNode = new ParserNodeAccess(ParserNode, new ParserNodeStringLiteral(AcessToken.Text));
								}
								else if (CurrentToken.Text == "[")
								{
									Tokens.MoveNext();
									ParserNode AccessNode = HandleLevel_Expression();
									Tokens.ExpectValueAndNext("]");
									ParserNode = new ParserNodeAccess(ParserNode, AccessNode);
								}
								else
								{
									break;
								}
							}

							break;
					}
					
					break;
				case "StringLiteralTemplateToken":
					ParserNode = new ParserNodeStringLiteral(((StringLiteralTemplateToken)CurrentToken).UnescapedText);
					Tokens.MoveNext();
					break;
				default:
					throw (new Exception(String.Format("Invalid Identifier '{0}'('{1}')", CurrentTokenType, CurrentToken.Text)));
			}

			return ParserNode;
		}