You might want to look at Parse::RecDescent or at the various other Parse Modules, amongst which Parse::Yapp might be quite familiar to you if you are used to YACC.

An alternate way is to use regexps but it becomes really complex if you want to have tests and complex expressions.

One way, usually not bullet proof by a long shot, is to allow a subset (or a modified subset) of the Perl syntax so all you have to do is to check the syntax, maybe change a couple of items in the query and then eval it. If you sort of trust your users not to do anything too stupid and not to try to abuse the system then it might work.

If you want to play it safe (and spend some more energy) you will have to write an interpreter though. Parse::RecDescent comes with a _huge_ doc though, so you might be able to find something close to what you want in there.


In reply to Re: Writing an interpreter in Perl by mirod
in thread Writing an interpreter in Perl by jepri

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.