anchor.diff:  	;
   
   default_value
  -	:	SQBRACKET_OPEN DEFAULT EQUALS literal_value SQBRACKET_CLOSE
  -    {
  +	:	(SQBRACKET_OPEN DEFAULT EQUALS default_literal_value SQBRACKET_CLOSE -> STRING_LITERAL[$default_literal_value.text->setS($default_literal_value.text,$field::defaultValue)])
  +    {
  +
  +    }
  +	;
  +default_literal_value : literal_value
  +  {
           $field::defaultValue=defaultValuePreprocess(ctx, $field::fieldType, $literal_value.text);
  -    }
  -	;
  +  }
  +  ;
   
   numeric_type:		UINT32
   	|	INT32
  
positive.code:     }
      @init {$field::defaultValue=NULL; $field::isNumericType=0;}
      :
       (( (ProtoJSOPTIONAL (multiplicitive_type|field_type) field_name EQUALS field_offset default_value? ITEM_TERMINATOR )  -> WS["\t"] ProtoJSOPTIONAL WS[" "] multiplicitive_type field_type WS[" "] field_name WS[" "] EQUALS WS[" "] field_offset WS[" "] default_value ITEM_TERMINATOR WS["\n"] )
        | 
        ( ( (REQUIRED|REPEATED) (multiplicitive_type|field_type) field_name EQUALS field_offset ITEM_TERMINATOR )  
            -> WS["\t"] REQUIRED REPEATED WS[" "] multiplicitive_type field_type WS[" "] field_name WS[" "] EQUALS WS[" "] field_offset ITEM_TERMINATOR WS["\n"] ) )
      {
          defineField(ctx, $field::fieldType,$field::fieldName,$field::defaultValue,$field::fieldOffset,$REPEATED==NULL,$REQUIRED!=NULL,0);
          stringFree($field::fieldName);
          stringFree($field::fieldType);
          stringFree($field::defaultValue);
      }
  	;
  
  field_offset
      : integer
      {
  
negative.code: QUOTE : '"' ;
  
  COMMA : ',' ;
  
  COLON : ':' ;
  