From: "wbsurfver@..." Date: 2007-11-29T11:50:06+09:00 Subject: Re: I get syntax errors from RDParser example I found on internet On Nov 28, 5:04 pm, yermej wrote: > On Nov 28, 2:59 pm, "wbsurf...@yahoo.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 That first one I had tried before and it didn't work, but if I move the * to the begining it does work: /[*+-\/]/