[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*