Click here to Skip to main content
Click here to Skip to main content

Tagged as

A powerful function parser

, 22 Feb 2000
Rate this:
Please Sign up or sign in to vote.
A simple yet powerful function parser that parses and evaluates standard mathematical functions
  • Download source files - 82 Kb
  • The inspiration to write this code was to have an easy-to-use parser for functions given as string. You have a string like "cos(x)-7*x/(1+x)", and you want to compute some values, maybe for displaying the graph of the function. You can write code like this:

    CFunction<long double>* fkt = CFunction<long double>::Parse("cos(x)-7*x/(1+x)");
    long double y = fkt->Execute(1.5);

    There are lots of definitions in the background, but the result is easy and fast! There is a one-time pasing step to construct the function tree, and function evaluations are only calls of standard math functions like sin, +, *, sqrt. When you want to know details about the implementaion, you should look into the source code. It would be too complex to describe the parsing algorithm here.


    This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

    A list of licenses authors might use can be found here


    About the Author

    Andreas Jäger
    Web Developer
    Germany Germany
    No Biography provided

    Comments and Discussions

    GeneralMFC compile PinmemberLuke Murphey6-Jul-02 10:28 
    I am working on a port of UNIX Xspread to windows. I am attempting to integrate this code into my MFC application, however, I cannot get it to compile. Below is the code snippet intended to get the result:
    CString Expression;
    //Call the math parser, get the function result and set the cell value to the result
    CFunction* bob = CFunction::Parse(m_strText);
    Expression = bob->GetName();

    Note: when I post this message to this site, the template prefix argument keeps disappearing (strange). CFunction has a template argument of long double (so does the scope for the call to Parse). This is OK in my application.
    Here is the errors:
    C:\My Documents\MyProjects\Xspread32\xspread32\Grid_src\GridCell.cpp(212) : error C2065: 'CFunction' : undeclared identifier
    C:\My Documents\MyProjects\Xspread32\xspread32\Grid_src\GridCell.cpp(212) : error C2062: type 'long double' unexpected
    C:\My Documents\MyProjects\Xspread32\xspread32\Grid_src\GridCell.cpp(212) : error C2039: 'Parse' : is not a member of '`global namespace''
    C:\My Documents\MyProjects\Xspread32\xspread32\Grid_src\GridCell.cpp(213) : error C2065: 'bob' : undeclared identifier
    C:\My Documents\MyProjects\Xspread32\xspread32\Grid_src\GridCell.cpp(213) : error C2227: left of '->GetName' must point to class/struct/union

    I did include the header files, and the IDE does display that the object "func" is a CFunction object (i.e. when you hover the cursor over the object name in MVC++ 6). I just can't make a connnection between my code and this math parser. I downloaded the command line code and it compiles with no problems. I created a new MFC project and tried to integrate the parser in the same manner as the console code that worked & I got the same errors. I am relatively new to MFC (not new to C++ however) and I could use any help I can get.
    GeneralRe: MFC compile PinmemberlLukeMurphey8-Jul-02 7:56 
    GeneralA version without MFC / MS dependencies PinmemberJochenKa14-Feb-02 21:23 
    GeneralRe: A version without MFC / MS dependencies Pinmemberjean-luc adam19-Feb-02 2:50 
    GeneralRe: A version without MFC / MS dependencies PinmemberJochen Kalmbach29-Jan-04 20:31 
    GeneralRe: A version without MFC / MS dependencies PinmemberPhilippe Lhoste4-Dec-04 3:25 
    GeneralRe: A version without MFC / MS dependencies PinmemberJochen Kalmbach [MVP VC++]1-Jan-06 20:58 
    GeneralRe: A version without MFC / MS dependencies PinmemberMember 190613125-Jul-13 14:18 
    Generalmore General expression PinmemberJie Luo16-Jan-02 2:56 
    GeneralWorld peace PinmemberBartosz Bien14-Dec-01 14:14 
    GeneralTo B.Starks, W.Dean, & J.Andreas PinmemberAmit Gefen8-Nov-01 13:43 
    GeneralOperators/precedence/types etc PinmemberAndrew Phillips26-Sep-01 19:04 
    GeneralVery good success with this PinmemberJeff12-May-01 9:59 
    GeneralYou must read jeff's reply..!! then you will success PinmemberJsSong25-Mar-02 15:47 
    GeneralBugs etc below should be renamed to Dean Wyant knows little about programming. PinmemberB. Starks13-Apr-01 8:36 
    GeneralRe: Bugs etc below should be renamed to Dean Wyant knows little about programming. PinmemberDean Wyant30-Apr-04 11:11 
    GeneralA good Parser Pinmemberstocklab18-Jan-01 18:57 
    GeneralRe: A good Parser PinmemberPing He10-May-01 0:36 
    GeneralRe: A good Parser PinmemberMathePeter3-Jul-07 4:22 
    GeneralDoes not understand decimals PinsussAnonymous3-Nov-00 5:55 
    QuestionBugs etc. - How does it deserve such high ratings? PinsussDean Wyant23-May-00 14:59 
    QuestionEnglish translation of comments? PinsussPeter Helmers10-Apr-00 5:03 
    GeneralFunctionParser PinsussArmin Zürcher12-Mar-00 2:57 

    General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

    Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

    | Advertise | Privacy | Terms of Use | Mobile
    Web04 | 2.8.150327.1 | Last Updated 23 Feb 2000
    Article Copyright 2000 by Andreas Jäger
    Everything else Copyright © CodeProject, 1999-2015
    Layout: fixed | fluid