in reply to Revised TAP Grammar
For purposes of forward compatability, all lines which do not match the grammar are labeled as TAPx::Parser::Result::Unknown and are not considered parse errors.
In other words,
test ::= status positiveInteger? description? directive? | unknown unknown ::= {character}
Update: lines is never referenced.
Update: Thinking about the unreferenced lines, I thought of a possible simplification: Requiring one and only one (no more, no less) "plan" line should not be enforced using the grammar. In other words, treat the count of plan lines as a semantic check, not a syntactic check. This leads to a slightly simpler grammar that will be easier to maintain, especially as things are added.
tap ::= lines lines ::= line {lines} line ::= (comment | test | plan | unknown ) "\n" plan ::= '1..' nonNegativeInteger "\n" test ::= status positiveInteger? description? directive? status ::= 'not '? 'ok ' description ::= (character - (digit '#')) {character - '#'} directive ::= '#' ( 'TODO' | 'SKIP' ) ' ' {character} comment ::= '#' {character} unknown ::= {character} digit ::= [:digit:] character ::= ([:print:] - "\n") positiveInteger ::= ( digit - '0' ) {digit} nonNegativeInteger ::= digit {digit}
This doesn't mean it can't be checked at parse-time. Make sure a plan wasn't already specified when one is encountered. Make sure a plan was specified when parsing is done.
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: Revised TAP Grammar
by Ovid (Cardinal) on Sep 14, 2006 at 13:18 UTC | |
|
Re^2: Revised TAP Grammar
by ysth (Canon) on Sep 14, 2006 at 15:12 UTC | |
by ikegami (Patriarch) on Sep 14, 2006 at 16:50 UTC |