resources/messages/attributeDescriptions/recoverWhile.html (26 lines of code) (raw):
<html>
<body>
Name of the recovery predicate rule or "#auto" which means "! FOLLOWS(rule)".
<h2>The contract:</h2>
<ol>
<li>The attributed rule is handled as usual</li>
<li>And regardless of the result parser will continue to consume tokens while the predicate rule matches</li>
</ol>
<h2>Notes:</h2>
<ol>
<li>This attribute in most cases should be specified on a rule that is inside a loop</li>
<li>That rule should always have *pin* attribute somewhere as well</li>
<li>Attribute value should be a predicate rule, i.e. leave input intact</li>
<li>In most cases the predicate is "! FOLLOWS(rule)" and can be copied from the rule Quick Documentation</li>
</ol>
<h2>Parenthesized list example:</h2>
<pre><code>
{
tokens=[number="regexp:\d+" comma="," paren1="(" paren2=")"]
}
list ::= "(" [!")" item (',' item) * ] ")" {pin(".*")=1}
item ::= number {recoverWhile=item_recover}
private item_recover ::= !(")" | ",")
</code></pre>
</body>
</html>