001    /*
002    // $Id: MdxParser.java 482 2012-01-05 23:27:27Z jhyde $
003    //
004    // Licensed to Julian Hyde under one or more contributor license
005    // agreements. See the NOTICE file distributed with this work for
006    // additional information regarding copyright ownership.
007    //
008    // Julian Hyde licenses this file to you under the Apache License,
009    // Version 2.0 (the "License"); you may not use this file except in
010    // compliance with the License. You may obtain a copy of the License at:
011    //
012    // http://www.apache.org/licenses/LICENSE-2.0
013    //
014    // Unless required by applicable law or agreed to in writing, software
015    // distributed under the License is distributed on an "AS IS" BASIS,
016    // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
017    // See the License for the specific language governing permissions and
018    // limitations under the License.
019    */
020    package org.olap4j.mdx.parser;
021    
022    import org.olap4j.mdx.ParseTreeNode;
023    import org.olap4j.mdx.SelectNode;
024    
025    /**
026     * Parser for the MDX query language.
027     *
028     * <p>A parser is reusable but not reentrant: you can call {@link #parseSelect}
029     * and {@link #parseExpression} several times, but not at the same time
030     * from different threads.
031     *
032     * @see MdxParserFactory
033     *
034     * @author jhyde
035     * @version $Id: MdxParser.java 482 2012-01-05 23:27:27Z jhyde $
036     * @since Aug 22, 2006
037     */
038    public interface MdxParser {
039        /**
040         * Parses an MDX Select statement and returns the {@link SelectNode} at the
041         * root of the parse tree.
042         *
043         * <p>In order to be parsed successfully, the expression must be
044         * syntactically correct but does not need to be valid. (Syntactic
045         * correctness and validity are described further in the description of
046         * {@link #parseExpression(String)}.)
047         *
048         * @param mdx MDX query string
049         * @return Parse tree
050         */
051        SelectNode parseSelect(String mdx);
052    
053        /**
054         * Parses an MDX expression and returns a parse tree.
055         *
056         * <p>An expression is a combination of operators and operands, which can
057         * occur in many places inside an MDX query, such as the definition of a
058         * calculated member or an axis.
059         *
060         * <p>In order to be parsed successfully, the expression must be
061         * syntactically correct but does not need to be valid.
062         * For example,
063         *
064         * <blockquote><code>(1 + (2 + 3)</code></blockquote>
065         *
066         * is syntactically incorrect,
067         * because there are more open parentheses "(" than close parentheses ")",
068         * and the parser will give an error. Conversely,
069         *
070         * <blockquote><code>(1 + [Measures].[Bad Measure])</code></blockquote>
071         *
072         * is syntactically correct, and the parser
073         * will successfully create a parse tree, even if
074         * <code>[Measures].[Bad Measure]</code> does not exist.
075         *
076         * @param mdx MDX expression
077         * @return Parse tree
078         */
079        ParseTreeNode parseExpression(String mdx);
080    }
081    
082    // End MdxParser.java