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

    Hmm, you do make some good points and I appreciate it. However, I don't know that I'd want to pull the plan out of the grammar as one could use that to easily write some code to parse a bunch of regular TAP strings to validate their TAP producer. At that point, the only required semantic check would be to ensure that test numbers correspond to the correct test line. That would make semantic analysis much simpler since the grammar, as a declarative tool, is more likely to be correct.

    I like the rest of what you've done, though. Still, maybe I'm just smoking crack :)

    Cheers,
    Ovid

    New address of my CGI Course.

Re^2: Revised TAP Grammar
by ysth (Canon) on Sep 14, 2006 at 15:12 UTC
    I'd hate to see plans anywhere but at the beginning or end.
      You're right. That was enforced, and not anymore.