anchor.diff:  atom:  ('(' (yield_expr|testlist_comp)? ')' |
           '[' (listmaker)? ']' |
           '{' (dictorsetmaker)? '}' |
  -        '`' testlist1 '`' |
  +        '`' testlist1 '`' | '.' '.' '.' | // tt: added elipses.
           NAME | NUMBER | STRING+)
       ;
   listmaker: test ( list_for | (',' test)* (',')? )
  
positive.code: 
  testlist1: test (',' test)*
      ;
      
  // not used in grammar, but may appear in "node" passed from Parser to Compiler
  encoding_decl: NAME
      ;
      
  yield_expr: 'yield' (testlist)?
      ;
  
  /*
   * Lexer rules
   */
   
  STRING
      : [uUbB]? [rR]? 
      ( '\''     ('\\' (([ \t]+ ('\r'? '\n')?)|.) | ~[\\\r\n'])*  '\''
      | '"'      ('\\' (([ \t]+ ('\r'? '\n')?)|.) | ~[\\\r\n"])*  '"'
      | '"""'    ('\\' .                          | ~'\\'     )*? '"""'
      | '\'\'\'' ('\\' .                          | ~'\\'     )*? '\'\'\''
      )
      ;
      
      
  NAME: [a-zA-Z_] [a-zA-Z0-9_]*
      ;
      
  NUMBER
      :      '0' ([xX] [0-9a-fA-F]+
      |           [oO] [0-7]+
      |           [bB] [01]+ ) [lL]?
      |    ([0-9]+ '.' [0-9]* | '.' [0-9]+) ([jJ] | [eE] [-+]? [0-9]+)?
      |     [0-9]+                          ([jJ] | [eE] [-+]? [0-9]+ | [lL])?
      ;
   
  LINENDING:             (('\r'? '\n')+ {self._lineContinuation=False}
      |      '\\'  [ \t]* ('\r'? '\n')  {self._lineContinuation=True}) 
  {
  if self._openBRCount == 0 and not self._lineContinuation:
      if not self._suppressNewlines:
  
negative.code:                 raise Exception()
  }  -> channel(HIDDEN)
      ;
  
  COMMENT:        '#' ~[\r\n]* -> skip;
  
  OPEN_PAREN:     '(' {self._openBRCount  += 1};
  