in reply to Parse::RecDescent greedy matches

"I'm working on a grammar to parse SQL"

Any particular reason? Is this just a learning exercise, or are you doing it because you actually need to parse some SQL? If the latter, stop doing what you're doing, and use SQL::Statement instead.

If you're just trying to learn PRD, then here's a hint... alias is probably defined something like this:

alias: identifier identifier: /.../ # some regex

To the production for identifier you need to add an action which rejects illegal identifiers:

alias: identifier identifier: /.../ # some regex { if ($item{identifier} =~ /^(?:select|insert|from|as)$/i) { undef } else { 1 } }
perl -E'sub Monkey::do{say$_,for@_,do{($monkey=[caller(0)]->[3])=~s{::}{ }and$monkey}}"Monkey say"->Monkey::do'

Replies are listed 'Best First'.
Re^2: Parse::RecDescent greedy matches
by zuma53 (Beadle) on Jul 25, 2012 at 18:15 UTC

    OK, thanks. I will give that a try.

    I couldn't discern how to alter the flow-of-control in RD; certainly this will help.

    I'm trying to parse MSSQL-specific queries with all its funky quirks to separate out columns/tables from the SQL verbiage.

      One more question on RD:

      If I have a production like this:

       foo : /tag/ '(' <things in parens> ')'

      I'd like to throw away all of the text between nested parens. I tried /.*/ but this overshoots and gobbles up the rest of the line.

      Any suggestions on how to approach this? Thanks.