001 /* 002 // $Id: MdxParser.java 229 2009-05-08 19:11:29Z jhyde $ 003 // This software is subject to the terms of the Eclipse Public License v1.0 004 // Agreement, available at the following URL: 005 // http://www.eclipse.org/legal/epl-v10.html. 006 // Copyright (C) 2006-2008 Julian Hyde 007 // All Rights Reserved. 008 // You must accept the terms of that agreement to use this software. 009 */ 010 package org.olap4j.mdx.parser; 011 012 import org.olap4j.mdx.SelectNode; 013 import org.olap4j.mdx.ParseTreeNode; 014 015 /** 016 * Parser for the MDX query language. 017 * 018 * <p>A parser is reusable but not reentrant: you can call {@link #parseSelect} 019 * and {@link #parseExpression} several times, but not at the same time 020 * from different threads. 021 * 022 * @see MdxParserFactory 023 * 024 * @author jhyde 025 * @version $Id: MdxParser.java 229 2009-05-08 19:11:29Z jhyde $ 026 * @since Aug 22, 2006 027 */ 028 public interface MdxParser { 029 /** 030 * Parses an MDX Select statement and returns the {@link SelectNode} at the 031 * root of the parse tree. 032 * 033 * <p>In order to be parsed successfully, the expression must be 034 * syntactically correct but does not need to be valid. (Syntactic 035 * correctness and validity are described further in the description of 036 * {@link #parseExpression(String)}.) 037 * 038 * @param mdx MDX query string 039 * @return Parse tree 040 */ 041 SelectNode parseSelect(String mdx); 042 043 /** 044 * Parses an MDX expression and returns a parse tree. 045 * 046 * <p>An expression is a combination of operators and operands, which can 047 * occur in many places inside an MDX query, such as the definition of a 048 * calculated member or an axis. 049 * 050 * <p>In order to be parsed successfully, the expression must be 051 * syntactically correct but does not need to be valid. 052 * For example, 053 * 054 * <blockquote><code>(1 + (2 + 3)</code></blockquote> 055 * 056 * is syntactically incorrect, 057 * because there are more open parentheses "(" than close parentheses ")", 058 * and the parser will give an error. Conversely, 059 * 060 * <blockquote><code>(1 + [Measures].[Bad Measure])</code></blockquote> 061 * 062 * is syntactically correct, and the parser 063 * will successfully create a parse tree, even if 064 * <code>[Measures].[Bad Measure]</code> does not exist. 065 * 066 * @param mdx MDX expression 067 * @return Parse tree 068 */ 069 ParseTreeNode parseExpression(String mdx); 070 } 071 072 // End MdxParser.java