anchor.diff:     ;
   
   line
  -   : host logname username datetime request statuscode bytes (referer useragent)?
  +   : host logname username datetimetz request statuscode bytes (referer useragent)?
      ;
   
   host
      : STRING
  -   | ip
  +   | IP
      ;
   
   logname
  
positive.code:    : NUMBER
     ;
  
  ip
     : NUMBER '.' NUMBER '.' NUMBER '.' NUMBER
     ;
  
  
  STRING
     : [a-zA-Z:/();] [a-zA-Z0-9_:/();]*
     ;
  
  
  
negative.code:    | '-'
     ;
  
  datetimetz
     : '[' date ':' time tz ']'
     ;
  
  date
     : NUMBER '/' STRING '/' NUMBER
     ;
  
  time
     : NUMBER ':' NUMBER ':' NUMBER
     ;
  
  tz
     : '-' NUMBER
     ;
  
  referer
     : literal
     ;
  
  request
     : literal
     ;
  
  useragent
     : literal
     ;
  
  literal
     : '"' ~ '"'* '"'
     ;
  
  statuscode
  