anchor.diff:                                          {{service,identifier_name('$2')},'$4'}.
   
   rpc_defs -> rpc_def rpc_defs:           ['$1' | '$2'].
  +rpc_defs -> ';' rpc_defs:               '$2'.
   rpc_defs -> '$empty':                   [].
   
  -rpc_def -> rpc identifier '(' name ')' returns  '(' name ')' ';':
  +rpc_def -> rpc identifier '(' name ')' returns '(' name ')' ';':
                                           {identifier_name('$2'), '$4', '$8'}.
  +rpc_def -> rpc identifier '(' name ')' returns '(' name ')' '{' m_opts '}' ';':
  +                                        {identifier_name('$2'), '$4', '$8'}.
  +
  +m_opts -> ';' m_opts:                   '$2'.
  +m_opts -> '$empty':                     [].
   
   Erlang code.
   
  
positive.code:             io:format(user, "Scan error:~n  ~p~n", [Reason]),
              erlang:error({scan_error,Lines,Reason})
      end.
  
negative.code:                                         {{msg,identifier_name('$2')},'$4'}.
  
  msg_elems -> msg_elem msg_elems:        ['$1' | '$2'].
  msg_elems -> ';' msg_elems:             '$2'.
  msg_elems -> '$empty':                  [].
  
  msg_elem -> cardinality type identifier '=' dec_lit ';':
  