Beefy Boxes and Bandwidth Generously Provided by pair Networks
more useful options
 
PerlMonks  

Re^2: Operator Precedence Parser

by Rhandom (Curate)
on Jun 12, 2006 at 13:03 UTC ( #554798=note: print w/ replies, xml ) Need Help??


in reply to Re: Operator Precedence Parser
in thread Operator Precedence Parser

CGI::Ex::Template does all of this.

You can add arbitrary entries to the $OPERATORS table and then use the built in functions to rebuild the global qr's helping in the parsing.

The parse_expr method takes a reference to a string (which it will consume) and returns a parsed optree.

The play_expr method takes the optree and actually executes it.

The parser allows for TT2 style nested variables, function calls, number, double and single quoted strings, arrays and hashes. It also has proper precedence and associativity parsing.

The entry in the $OPERATORS table should contain the following:

type: prefix, postfix, left, right, none, ternary, or assign (right +) precedence: the relative precedence value symbols or names: an arrayref of symbols or operators for that oper +ation function: a code ref to run when that operator is found.


It isn't entirely general as the variable names are TT2'ish - but it certainly could be used in other applications.

my @a=qw(random brilliant braindead); print $a[rand(@a)];


Comment on Re^2: Operator Precedence Parser
Download Code

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://554798]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others scrutinizing the Monastery: (8)
As of 2014-12-19 07:43 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    Is guessing a good strategy for surviving in the IT business?





    Results (73 votes), past polls