Asp Forum
Home
|
Login
|
Register
|
Search
Forums
>
comp.lang.ruby
I get syntax errors from RDParser example I found on internet
Larz
11/28/2007 9:00:00 PM
=begin
I got this recursive decent parser from:
http://www.rubyinside.com/recursive-descent-parser-for-rub...
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 (: /["'](.*?[^\]|.*?)["']/
Any ideas on what to change to make it work ?
thanks
=end
require 'rdparser'
parser = RDParser.new do |g|
g.main 'line(s)'
g.line 'expression separator(?) comment(?)'
g.comment '"#" rest_of_line'
g.rest_of_line /.+$/
g.separator /;/
g.expression 'term operation expression | term'
g.term 'number | variable | string | brkt_expression'
g.brkt_expression '"(" expression ")"'
g.number /d+(.d+)?/
g.operation /[+-*/]/
g.variable /[a-z][a-z0-9]*/
g.string %r(["'](.*?[^\]|.*?)["'])
end
content = %q{
(34 - 3) * 42; # Comment here..
"a" + "bcd"
}
syntax_tree = parser.parse(:main, content)
puts RDParser.text_syntax_tree(syntax_tree)
2 Answers
yermej
11/28/2007 10:04:00 PM
0
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-rub...
>
> 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
Larz
11/29/2007 2:48:00 AM
0
On Nov 28, 5:04 pm, yermej <yer...@gmail.com> wrote:
> 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-rub...
>
> > 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:
/[*+-\/]/
Servizio di avviso nuovi messaggi
Ricevi direttamente nella tua mail i nuovi messaggi per
I get syntax errors from RDParser example I found on internet
Inserendo la tua e-mail nella casella sotto, riceverai un avviso tramite posta elettronica ogni volta che il motore di ricerca troverà un nuovo messaggio per te
Il servizio è completamente GRATUITO!
x
Login to ForumsZone
Login with Google
Login with E-Mail & Password