anchor.diff:                                                 name=identifier_name('$3'),
                                                  fnum=literal_value('$5'),
                                                  opts=[]}.
  -msg_elem -> cardinality type identifier '=' dec_lit '[' field_opts ']' ';':
  +msg_elem -> cardinality type identifier '=' dec_lit '[' opt_field_opts ']' ';':
                                           #field{occurrence='$1',
                                                  type='$2',
                                                  name=identifier_name('$3'),
  
positive.code: 
  enum_field -> identifier '=' integer ';':
                                          {identifier_name('$1'), '$3'}.
  
  message_def -> message identifier '{' msg_elems '}':
                                          {{msg,identifier_name('$2')},'$4'}.
  
negative.code:               reformat_names(flatten_defs(absolutify_names(Defs)))))).
  
  
  parses_empty_msg_field_options_test() ->
      {ok,Defs} = parse_lines(["message m1 { required uint32 f1=1 []; }"]),
      [{{msg,m1}, [#field{name=f1, opts=[]}]}] =
          normalize_msg_field_options(
            enumerate_msg_fields(
              resolve_refs(
                reformat_names(flatten_defs(absolutify_names(Defs)))))).
  
  parses_and_ignores_enum_field_options_test() ->
      {ok,_Defs} = parse_lines(["enum e1 { a=1 [x=y]; }"]).
  
  parses_and_ignores_empty_enum_field_options_test() ->
      {ok,_Defs} = parse_lines(["enum e1 { a=1 []; }"]).
  
  fetches_imports_test() ->
      {ok, Elems} = parse_lines(["package p1;"
                                 "import \"a/b/c.proto\";",
  