anchor.diff:        (LIDENTIFIER|UIDENTIFIER|FUNCTION_MODIFIER|VALUE_MODIFIER|VOID_MODIFIER)
       ;
   
  +destructureStart
  +    : VALUE_MODIFIER compilerAnnotations (LBRACKET|UIDENTIFIER|VOID_MODIFIER|VALUE_MODIFIER|FUNCTION_MODIFIER|LIDENTIFIER ENTRY_OP)
  +    ;
  +
   declarationOrStatement returns [Statement statement]
       options {memoize=true;}
       : compilerAnnotations
  -      ( 
  -        (VALUE_MODIFIER LBRACKET) => d1=destructure
  +      (
  +        (destructureStart) => d1=destructure
           { $statement=$d1.destructure; }
  -      | (VALUE_MODIFIER var ENTRY_OP) => d2=destructure
  -        { $statement=$d2.destructure; }
         | (annotatedDeclarationStart) => d3=declaration
           { $statement=$d3.declaration; }
         | (annotatedAssertionStart) => assertion
  
positive.code:     ;
  
  keyValue returns [KeyValue keyValue]
      : v1=var
        { $keyValue = new KeyValue(null);
          $keyValue.setKey($v1.variable); }
        ENTRY_OP
        { $keyValue.setEndToken($ENTRY_OP); }
        (
          v2=var
          { $keyValue.setValue($v2.variable); 
            $keyValue.setEndToken(null); }
        )?
      ;
  
  destructure returns [Destructure destructure]
  
negative.code:         $destructure = new Destructure(null);
          $destructure.setType(vm); }
        (
          (keyValueStart) => keyValue
          { $destructure.setDestructuredVariables($keyValue.keyValue); }
        |
          variableTuple
  