private static ASTNode ParseElse() { ASTNode branching; ASTNode body; GetNextToken(); if (curTok.token == Tokens.Token.K_IF) { bufferTok.token = Tokens.Token.K_ELSE_IF; return(new ElseAST(ParseIf())); } else if (curTok.token == Tokens.Token.BRACE_L) { return(new ElseAST(new BodyMethodAST(ParseBrace(Area.METHOD, isCycleArea)))); } else { if (bufferTok.token == Tokens.Token.K_ELSE) { ConsoleHelper.WriteErrorAST("Expected 'else if' or 'if'", curTok.y, curTok.x); } isRawToken = true; body = MemberMethod(false); branching = new ConditionNodeAST(null, body); } return(new ElseAST(branching)); }
//--------------------- // Парсер if //--------------------- public static ASTNode ParseIf() { ASTNode branching; GetNextToken(); ASTNode condition = null; if (curTok.token == Tokens.Token.PARENTHESIS_L) { condition = ParseConditionIf(); GetNextToken(); } else { ConsoleHelper.WriteErrorAST("Expected '('", curTok.y, curTok.x); SkipToToken(Tokens.Token.BRACE_L); } ASTNode bodyIf; if (curTok.token == Tokens.Token.BRACE_L) { bodyIf = new BodyMethodAST(ParseBrace(Area.METHOD, isCycleArea)); branching = new ConditionNodeAST(condition, bodyIf); } else { isRawToken = true; bodyIf = MemberMethod(isCycleArea); branching = new ConditionNodeAST(condition, bodyIf); } return(new IfAST(branching)); }