Racc error recovery

A

Aaron Patterson

Hi everyone,

I'm writing a racc parser, and I need to recover from parse errors.
Basically I'm writing a CSS parser, and I need to handle poorly
formatted CSS.

Unfortunately I can't seem to find any good documentation or examples on
error recovery. I've read the Racc documentation about on_error and
entering "error recovering mode", as well as calling yyerrok to leave
error recovering mode, but I don't know what that actually means.

I've also discovered the "error" rule, but I don't want to explicitly
add that rule to every rule that could possibly have an error.

Any tips would be greatly appreciated. Thanks!
 
G

Giles Bowkett

I'm writing a racc parser, and I need to recover from parse errors.
...
Unfortunately I can't seem to find any good documentation or examples on
error recovery. I've read the Racc documentation about on_error and

Wild stab in the dark: is there any equivalent stuff in yacc you could
use as a starting point?

I realize it probably isn't modeled that closely, but that's the first
thought I had.

Wild stab in the dark, part 2: tried using Sass instead? It's a CSS
DSL. Or do you have to work with the CSS you've already got?

--
Giles Bowkett

Blog: http://gilesbowkett.blogspot.com
Portfolio: http://www.gilesgoatboy.org
Tumblelog: http://giles.tumblr.com/
 
A

Aaron Patterson

Wild stab in the dark: is there any equivalent stuff in yacc you could
use as a starting point?

Yes there is. I was hoping I could get an answer without digging up my
lex & yacc book. ;-) Fortunately I found it and there is an error
recovery section that has definitely helped.
I realize it probably isn't modeled that closely, but that's the first
thought I had.

Wild stab in the dark, part 2: tried using Sass instead? It's a CSS
DSL. Or do you have to work with the CSS you've already got?

No. I'm trying to parse CSS, not generate it.
 
B

barjunk

Yes there is. I was hoping I could get an answer without digging up my
lex & yacc book. ;-) Fortunately I found it and there is an error
recovery section that has definitely helped.





No. I'm trying to parse CSS, not generate it.

Aaron,

Would you mind sharing some of what you found in the book? I'm more
interested in what you were thinking originally and then what the book
had to say to change your mind.

I'm interested in putting together some more documentation for Racc.

Mike B.
 
A

Aaron Patterson

Aaron,

Would you mind sharing some of what you found in the book? I'm more
interested in what you were thinking originally and then what the book
had to say to change your mind.

What I was thinking originally was that on_error could eat up tokens
until the grammar could be recovered. Then, after reading the lex/yacc
book I found out that that is exactly what the "error" token does.

Take this grammar/script for example:

class Tester

token A LBRACE

rule
a_a_lbrace
: A A LBRACE { puts val }
| A error LBRACE { puts "got error"; puts val }
;

end

require 'tester.tab'

class Foo < Tester
def initialize
@tokens = [
[ :A, 'a' ],
[ :B, 'b' ],
[ :LBRACE, '{' ],
]
end

def parse
do_parse
end

def next_token
@tokens.shift
end
end

Foo.new.parse

The second rule gets called, and Racc uses LBRACE as a "pivot point"
(IIRC, that is what the yacc book called it). The error rule will eat
up tokens until an LBRACE is found. Then parsing can continue as usual.

Unfortunately, I'm not sure when on_error is supposed to be called. I'm
also having a hard time figuring out where to place the error token in
some of my rules. But I am going to start a new thread about that.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Similar Threads

Racc 2
Racc: when is on_error called? 1
Error reporting in Racc 0
Bug in Racc? 0
problems with racc: $end token 13
Method error 0
rlex and ryacc 9
[ANN] ruby_parser 2.0.0 Released 8

Members online

No members online now.

Forum statistics

Threads
473,769
Messages
2,569,582
Members
45,065
Latest member
OrderGreenAcreCBD

Latest Threads

Top