Hey Matthew,
You are right, the EBNF sample isn't 100% the same as the other samples.. technically it'd be:
var firstValue = match["first"]["optional bracket"]["simple value"].Value;
var secondValue = match["second"]["optional bracket"]["bracket value"]["simple value"].Value;
This is due to not being able to specify which parsers are named or not using ebnf.
One thing to note about the ErrorMessage - it will be set even if the value has succeeded. Make sure you test match.Success first, before checking the ErrorMessage property.
I'll see what I can do to make the ebnf sample more accurate.
Hope this helps!
Curtis.