hi folks, I am playing around with PRD, and really like it so far. But I can quite get my head around some details of the error reporting. consider the following grammar:
code : fact(s?) eofile { $item[1] } | <error> eofile : /^\Z/ fact : 'fact' <commit> identifier ';' { [$item[0], $item[3]] } | <error?><reject> identifier : m{[A-Za-z_][A-Za-z0-9_]*} and an input like this: fact TFactA; # case 1 # fact TFactB 234; # # case 2 # blablabla the unmodified input parses nicely, and if I uncomment any of the two syntax errors, it correctly rejects the input. excellent. but the error reporting is slightly less than ideal: the error case 1 will set off the <error> directive of the 'fact' rule (good), but *also* the <error> directive of the 'code' rule, which is a bit odd. If I remove the error directive of the parent rule, i'll miss errors of type 2, and if remove the error directive of 'fact', then the error is reported in a very hard to decipher way. Ideally i would like to have an error directive of most rules in my syntax, but simply stop processing after I hit any of them. Is there a way to achieve that? I have read the FAQ and some other pages which talk about similar problems, but please note that in this case the parser correctly rejects the input, it just emits too many error messages thanks robert -- Robert Lemmen http://www.semistable.com
signature.asc
Description: Digital signature