001    /**
002     * =========================================
003     * LibFormula : a free Java formula library
004     * =========================================
005     *
006     * Project Info:  http://reporting.pentaho.org/libformula/
007     *
008     * (C) Copyright 2006-2007, by Pentaho Corporation and Contributors.
009     *
010     * This library is free software; you can redistribute it and/or modify it under the terms
011     * of the GNU Lesser General Public License as published by the Free Software Foundation;
012     * either version 2.1 of the License, or (at your option) any later version.
013     *
014     * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
015     * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
016     * See the GNU Lesser General Public License for more details.
017     *
018     * You should have received a copy of the GNU Lesser General Public License along with this
019     * library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
020     * Boston, MA 02111-1307, USA.
021     *
022     * [Java is a trademark or registered trademark of Sun Microsystems, Inc.
023     * in the United States and other countries.]
024     *
025     *
026     * ------------
027     * $Id: FormulaParser.java 3521 2007-10-16 10:55:14Z tmorgner $
028     * ------------
029     * (C) Copyright 2006-2007, by Pentaho Corporation.
030     */
031    package org.jfree.formula.parser;
032    
033    import java.io.StringReader;
034    
035    import org.jfree.formula.DefaultFormulaContext;
036    import org.jfree.formula.EvaluationException;
037    import org.jfree.formula.LibFormulaBoot;
038    import org.jfree.formula.lvalues.LValue;
039    import org.jfree.formula.operators.DefaultOperatorFactory;
040    import org.jfree.formula.operators.OperatorFactory;
041    
042    public class FormulaParser extends GeneratedFormulaParser
043    {
044      // This is my parser class
045      private OperatorFactory operatorFactory;
046    
047      public FormulaParser()
048      {
049        super(new StringReader(""));
050        operatorFactory = new DefaultOperatorFactory();
051        operatorFactory.initalize(LibFormulaBoot.getInstance().getGlobalConfig());
052      }
053    
054      protected OperatorFactory getOperatorFactory()
055      {
056        return operatorFactory;
057      }
058    
059      public LValue parse(final String formula) throws ParseException
060      {
061        if (formula == null)
062        {
063          throw new NullPointerException("Formula-text given must not be null.");
064        }
065        ReInit(new StringReader(formula));
066        return getExpression();
067      }
068    
069      public static void main(final String[] args)
070          throws ParseException, EvaluationException
071      {
072        final FormulaParser parser = new FormulaParser();
073    
074        //    x = parser.parse("1 * 2 + 3 * 4");
075    //    x.initialize(new DefaultFormulaContext());
076    //    System.out.println(x);
077    //
078    //    x = parser.parse("[a] * [b] + [c] * [d]");
079    //    x.initialize(new DefaultFormulaContext());
080    //    System.out.println(x);
081    //
082    //    x = parser.parse("IF([A];[B];[C])");
083    //    x.initialize(new DefaultFormulaContext());
084    //    System.out.println(x);
085    //
086    //    x = parser.parse("1 + ( 2+ (3 + (400 + 200)))");
087    //    x.initialize(new DefaultFormulaContext());
088    //    System.out.println(x);
089    
090        final LValue x = parser.parse("(1)()");
091        x.initialize(new DefaultFormulaContext());
092        System.out.println(x);
093      }
094    }