[Tutor] Re: Algebraic symbol manipulation program idea

Danny Yoo dyoo@hkn.eecs.berkeley.edu
Sun, 19 Aug 2001 00:14:15 -0700 (PDT)


On Fri, 10 Aug 2001, Christopher Smith wrote:

> When given 2*3+2^2/3 Pythonica returns:
> 
> 	in FullForm: Divide[Plus[Times[2,3],Power[2,2]],3]
> 	evaluates to: 3.33333333333
> 
> but it should probably be something like:
> 
> 	Plus[Times[2,3],Divide[Power[2,2],3]]
> 
> and evaluate to 7.33333333333

[I'm not quite sure if my message is appropriate on tutor, but perhaps
someone is interested in recursive descent parsing.  Recursive descent
parsing is a technique that's used to try converting arithmetic
expressions into a form that's supposedly easy to work with.  *grin*]


Pythonica seems pretty interesting!  I'm taking a closer look at this now.  
Does anyone have a formal context free grammar for Pythonica or
Mathematica?  I'm working on a Pythonica recursive descent parser now to
fix this bug.  Here's the link to what I have so far:

    http://hkn.eecs.berkeley.edu/~dyoo/python/pythonica/


As a warning, this is ROUGH code; it doesn't even connect to Pythonica
yet.  For now, PythonicaParser.py can only build the parse tree for simple
arithmetic expressions.  Here's a sample run:

###
dyoo@einfall:~/pythonica$ python PythonicaParser.py
>>> 3 * 4 + 5 * (foo + bar)
['Expression',
 ['Term',
  ['Factor', 'NUMBER', '3'],
  ['Term1', '*', ['Factor', 'NUMBER', '4'], None]],
 ['Expression1',
  '+',
  ['Term',
   ['Factor', 'NUMBER', '5'],
   ['Term1',
    '*',
    ['Factor',
     'GROUP',
     ['Expression',
      ['Term', ['Factor', 'IDENTIFIER', 'foo'], None],
      ['Expression1',
       '+',
       ['Term', ['Factor', 'IDENTIFIER', 'bar'], None],
       None]]],
    None]],
  None]]
None
###

I'll see if I can coax it to handle more interesting things like
exponentiation tonight.  *grin*