Q: sample code for parsing algebraic expressions?

Charlie Zender <zender@ncar.ucar.edu>
9 Dec 1995 20:01:01 -0500

          From comp.compilers

Related articles
Q: sample code for parsing algebraic expressions? zender@ncar.ucar.edu (Charlie Zender) (1995-12-09)
| List of all articles for this month |

From: Charlie Zender <zender@ncar.ucar.edu>
Newsgroups: comp.programming,comp.compilers
Date: 9 Dec 1995 20:01:01 -0500
Organization: National Center for Atmospheric Research
Keywords: parse, question, comment

hi,
I need to parse algebraic expressions for a data processor i'm writing.
that is, I need a function to take forward algebraic expressions like
x^2+3*(x+2) and return a parsed listed of (binary,unary) operator
expressions in the correct order. The algebraic expressions will be
known at run time, so that the code I need does not have to be able
to work like a calculator, and take expressions in real time from the
user.


Here's what I'm hoping the function will do
function results in quotes,


input to function->"x^2+3*x+9"
output from function->
"x,2 binary exponentiate" (goes on stack)
"x,3 binary multiply" (goes on stack)
"binary add" (adds last two number on stack together, places result on stack)
"9 binary add" (add 9 to last number on stack)


Clearly every compiler that knows math has a parser like this in it
somewhere, but I don't know what's most appropriate for my uses.
Does anyone have recommendations on how to do this? Sample code? Books?
Articles? Should I use yacc/bison? Should I write it in C?


thanks in advance (please email as well as post any responses)
charlie
--
Charlie Zender Voice, FAX: (303) 497-1612, 497-1324
NCAR/CGD/CMS E-mail: zender@ncar.ucar.edu
P.O. Box 3000 URL: http://www.cgd.ucar.edu/cms/zender
Boulder CO 80307-3000 PGP: finger -l zender@heinlein.cgd.ucar.edu
[Our book "lex&yacc, 2nd ed" has the usual calculator example, but someone
might have canned infix to RPN code. -John]
--


Post a followup to this message

Return to the comp.compilers page.
Search the comp.compilers archives again.