private static AstNode ParseTerm(Parser.Parser parser) { if (parser.MatchToken(TokenType.Number)) { return(new NumberNode(Convert.ToDouble(parser.ExpectToken(TokenType.Number).Value))); } else if (parser.AcceptToken(TokenType.Parentheses, "(")) { AstNode statement = ExpressionNode.Parse(parser); parser.ExpectToken(TokenType.Parentheses, ")"); return(statement); } else if (parser.AcceptToken(TokenType.Bracket, "[")) { AstNode statement = ArrayInitializerNode.Parse(parser); parser.ExpectToken(TokenType.Bracket, "]"); return(statement); } else if (parser.MatchToken(TokenType.String)) { return(new StringNode(parser.ExpectToken(TokenType.String).Value.ToString())); } else if (parser.MatchToken(TokenType.Identifier)) { return(new IdentifierNode(parser.ExpectToken(TokenType.Identifier).Value.ToString())); } else { throw new Exception("Unexpected in Parser: " + parser.CurrentToken().Value); } }