anchor.diff:          option
           %% '(' and ')' for custom options
           extensions extend max to
  -        %% 'service', 'rpc', 'returns', '(' and ')' for services
  +        service rpc returns
           packed deprecated
  -        '.' ';' '{' '}' '[' ']' '=' ','
  +        '.' ';' '(' ')' '{' '}' '[' ']' '=' ','
           .
   
   Rootsymbol
  
positive.code: element -> message_def:                 '$1'.
  element -> extend_def:                  '$1'.
  element -> option_def:                  '$1'.
  %% element -> service_def                  '$1'.
  
  package_def -> package name ';':        {package, '$2'}.
  
  
negative.code: extend_def -> extend identifier '{' msg_elems '}':
                                          {{extend,identifier_name('$2')},'$4'}.
  
  
  service_def -> service identifier '{' rpc_defs '}':
                                          {{service,identifier_name('$2')},'$4'}.
  
  rpc_defs -> rpc_def rpc_defs:           ['$1' | '$2'].
  rpc_defs -> '$empty':                   [].
  
  rpc_def -> rpc identifier '(' name ')' returns  '(' name ')' ';':
                                          {identifier_name('$2'), '$4', '$8'}.
  
  Erlang code.
  
  