As it turns out, adding support to allow comments after a terminating plan was 
trivial.  However, the grammar was getting a bit old and needed some work.  I 
noticed, amongst other things, that comments had never been integrated.

If you're not familiar with reading this style of grammar, here are a few 
comments:

I'm using POSIX character classes to represent digits and printable characters. 
 If you want to manually encode all of the Unicode characters for [:print:], be 
my guest :)

The following means "all printable characters except the newline".
 
  ([:print:] - "\n")
 
The following means, a digit followed by zero or more digits.

  digit {digit}

A question mark after an atom means it's optional.

I'm not particularly gifted with grammars, so corrections welcome.

The corrected TAP grammar:

 digit              ::= [:digit:]
 character          ::= ([:print:] - "\n")
 positiveInteger    ::= ( digit - '0' ) {digit}
 nonNegativeInteger ::= digit {digit}
 
 tap         ::= plan tests | tests plan {comment}
 plan        ::= '1..' nonNegativeInteger "\n"
 lines       ::= line {lines}
 line        ::= (comment | test) "\n"
 tests       ::= test {test}
 test        ::= status positiveInteger? description? directive?
 status      ::= 'not '? 'ok ' 
 description ::= (character - (digit '#')) {character - '#'}
 directive   ::= '#' ( 'TODO' | 'SKIP' ) ' ' {character}
 comment     ::= '#' {character}

Cheers,
Ovid 

-- 
Buy the book -- http://www.oreilly.com/catalog/perlhks/
Perl and CGI -- http://users.easystreet.com/ovid/cgi_course/



Reply via email to