anchor.diff:  ruleName = name | spaces tsString,
   rule = &(ruleName:n) spaces rulePart(n):x ("," spaces rulePart(n))*:xs -> << (prog1 `(:rule ,n ,(locals o) (:or ,x ,@xs)) (setf (locals o) nil)) >>,
   rulePart :rn = ruleName:n ?<<(equal n rn)>> spaces expr4:b1 (spaces "=" spaces expr:b2 -> << `(:and ,b1 ,b2) >> | empty -> b1),
  -grammar = okeyword("ometa") spaces name:n spaces ("<:" name | empty -> "OMeta"):sn spaces "{" listof("rule", ","):rs spaces "}" -> << `(:grammar ,n ,sn ,@rs) >>
  +grammar = okeyword("ometa") spaces name:n spaces ("<:" name | empty -> <<"OMeta">>):sn spaces "{" listof("rule", ","):rs spaces "}" -> << `(:grammar ,n ,sn ,@rs) >>
   }
   
  
positive.code: ometa ometa-parser <: ometa {
  nameFirst = letter,
  nameRest = nameFirst | digit | $- | $!,
  tsName = firstAndRest("nameFirst", "nameRest"):xs -> << (coerce xs 'string)>>,
  name = spaces tsName,
  
negative.code: 
  osymbol = spaces "#" tsName:s -> << `(:app exactly (:symbol ,s))>>,
  char-literal = "$" anything:d -> << `(:app exactly (:character ,d)) >>,
  onumber = ("-" | empty -> <<"">>):sign digit+:ds -> <<`(:app exactly ,(parse-integer (coerce ds 'string)))>>,
  letterOrDigit = letter | digit,
  args = $( listof("hostExpr", ","):xs $) -> xs | empty -> << nil >>,
  
  