On Nov 28, 2:59 pm, "wbsurf... / yahoo.com" <wbsurf... / gmail.com> wrote:
> =begin
> I got this recursive decent parser from:http://www.rubyinside.com/recursive-descent-parser-for-ruby-300.html
>
> I get this syntax error:
> C:/rb-play/parser/try.rb:13: syntax error, unexpected ']', expecting
> kEND
> g.operation /[+-*/]/
>
> if I change that line to:
> g.operation /[+-]/
> that line no longer has an error, so the / and * threw it off
>
> then I get an error on another line:
>
> g.string %r(["'](.*?[^\]|.*?)["'])
> C:/rb-play/parser/try.rb:15: warning: character class has `[' without
> escape
> C:/rb-play/parser/try.rb:15: unmatched (: /["'](.*?[^\]|.*?)["']/
>
In the first, you need the - at the beginning of the (or escaped with
a backslash) or Ruby interprets it as a character range. You also need
to escape the first forward slash or Ruby interprets it as the end of
the Regex. So:
/[-+*\/]/
In the second, the backslash needs to be escaped. If it isn't, then it
is used to escape the following ] so the character class isn't closed
until the final ] which is just wrong. So:
%r(["'](.*?[^\\]|.*?)["'])
Consider both issues were due to missing backslashes, they were
probably originally correct. I guess somewhere along the way the
backslashes were interpreted as escape characters and didn't make it
to the final page.
Jeremy