ProgrammingLanguageNr1.Parser.assignmentAndOperator C# (CSharp) Method

assignmentAndOperator() private method

private assignmentAndOperator ( ) : ProgrammingLanguageNr1.AST
return ProgrammingLanguageNr1.AST
        private AST assignmentAndOperator()
        {
            #if WRITE_DEBUG_INFO
            Console.WriteLine("assignment and operator");
            #endif

            Token nameToken = match(Token.TokenType.NAME);
            Token operatorToken = match(Token.TokenType.OPERATOR);
            AST expressionTree = expression();

            if(expressionTree != null) {
                AST_Assignment assignmentTree = new AST_Assignment(new Token(Token.TokenType.ASSIGNMENT, "="), nameToken.getTokenString());
                AST selfOperation = null;

                if(operatorToken.getTokenString() == "+=") {
                    selfOperation = new AST(new Token(Token.TokenType.OPERATOR, "+"));
                }
                else if(operatorToken.getTokenString() == "*=") {
                    selfOperation = new AST(new Token(Token.TokenType.OPERATOR, "*"));
                }
                else if(operatorToken.getTokenString() == "-=") {
                    selfOperation = new AST(new Token(Token.TokenType.OPERATOR, "-"));
                }
                else if(operatorToken.getTokenString() == "/=") {
                    selfOperation = new AST(new Token(Token.TokenType.OPERATOR, "/"));
                }
                else {
                    throw new Error("Can't handle the operator '" + operatorToken.getTokenString() + "'",
                                    Error.ErrorType.SYNTAX, assignmentTree.getToken().LineNr,
                                    assignmentTree.getToken().LinePosition);
                }
                selfOperation.addChild(nameToken);
                selfOperation.addChild(expressionTree);
                assignmentTree.addChild(selfOperation);

                return assignmentTree;
            }
            else {
                throw new Error("The expression after " + operatorToken.getTokenString()
                                + " makes no sense", Error.ErrorType.SYNTAX,
                    operatorToken.LineNr, operatorToken.LinePosition);
            }
        }