anchor.diff:  ;
   attributes_names returns[String attributes]
     : single_attr = attribute_attr_name
  -    {$attributes = "\"" + $single_attr.attribute_name + "\"";}
  +    {$attributes = $single_attr.attribute_name;}
   
     | {$attributes="";}
       multi_attr1 = attribute_attr_name
  -    {$attributes = "\"" + $multi_attr1.attribute_name + "\"";}
  +    {$attributes = $multi_attr1.attribute_name;}
   
       ( multi_attr2 = attribute_attr_name
  -      {$attributes += ", \"" + $multi_attr2.attribute_name + "\"";}
  +      {$attributes += ", " + $multi_attr2.attribute_name;}
       )+
   ;
   action_attr returns [String actions]
  
positive.code: grammar occi_http_text;
  
  //TODO: So the generated lexer and parser are useable by all languages and to not be dependant on embedded target code (e.g. actions)
  //      the parser should return well-formed json which can be deserialised by most languages.
  
  //Caveat! JSON strings are created via concatenation. This is not efficent. If you want more efficency, modify the
  //        grammar so that it utilises more direct means of in-memory/domain specific model creation.
  
  options {
    //Change me: if you want a different targetted language for the parser/lexer generation
  
negative.code: // ---------- All OCCI Headers ------------
  // ----------------------------------------
  
  occi_headers returns [String header]
    :
    (
  	  //Nice-to-have: merge these 2 rules
  	    multiple_category_header {$header = $multiple_category_header.category;}
  
  	  | category_header {$header = $category_header.category;}
  
  	  | link_header {$header = $link_header.link_header;}
  
  	  | attribute_header {$header = $attribute_header.attribute_header;}
  
  	  | location_header {$header = $location_header.locations_val;}
    )+
    EOF
  ;
  