anchor.diff:  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
  +//The generated lexer and parser are useable by all languages and are not dependant on embedded target code (e.g. actions)
  +//the parser returns well-formed json which can be deserialised by most languages.
  +
  +//Caveat! JSON strings are created via string 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.
  +
  +//Idea: using a OVF library make the intermediatry output format OVF :-)
   
   options {
     //Change me: if you want a different targetted language for the parser/lexer generation
  
positive.code:   X-OCCI-Attribute: occi.compute.architechture="x86_64"
    X-OCCI-Attribute: occi.compute.architechture="x86_64", occi.compute.cores=2
  */
  //TODO output attribute header as JSON
  attribute_header:
    ATTR_HEADER attribute_attrs
  ;
  attribute_attrs:
    attribute_attr (COMMA attribute_attr)*
  ;
  
  // ----------------------------------------
  
negative.code:   {$link_category_val = $TOKEN.text;}
  ;
  
  link_attributes_attr returns [String link_attributes_attr]
    : CAT_ATTR_SEP single_attr = attribute_attr
      {$link_attributes_attr = $single_attr.attribute_attr;}
  
    |
      CAT_ATTR_SEP multi_attr1 = attribute_attr
      {$link_attributes_attr = $multi_attr1.attribute_attr;}
      (
        CAT_ATTR_SEP multi_attr2 = attribute_attr
        {$link_attributes_attr += ", " + $multi_attr2.attribute_attr;}
      )+
  ;
  attribute_attr returns [String attribute_attr]
    : attribute_attr_name VAL_ASSIGN attribute_attr_val
      {$attribute_attr = $attribute_attr_name.attribute_name + ":" + $attribute_attr_val.attribute_attr_val;}
  ;
  attribute_attr_name returns [String attribute_name]
    : ATTRIB_NAME
      {$attribute_name = "\""+$ATTRIB_NAME.text+"\"";}
  ;
  attribute_attr_val returns [String attribute_attr_val]
    : (
        QUOTE attribute_attr_string_val QUOTE
        {$attribute_attr_val = "\""+$attribute_attr_string_val.attr_str+"\"";}
      )
    | attribute_attr_int_val
      {$attribute_attr_val = $attribute_attr_int_val.attr_int;}
  ;
  attribute_attr_string_val returns [String attr_str]
    : TOKEN
  