anchor.diff:      ;
   
   statement returns [Statement statement]
  -    : specificationStatement
  -      { $statement = $specificationStatement.specifierStatement; }
  -    | expressionStatement
  -      { $statement = $expressionStatement.expressionStatement; }
  -    | directiveStatement
  +    : directiveStatement
         { $statement = $directiveStatement.directive; }
       | controlStatement
         { $statement = $controlStatement.controlStatement; }
  -    ;
  -
  -specificationStatement returns [SpecifierStatement specifierStatement]
  -    : memberName 
  -      { $specifierStatement = new SpecifierStatement(null); 
  -        BaseMemberExpression bme = new BaseMemberExpression(null);
  -        bme.setTypeArguments( new InferredTypeArguments(null) );
  -        bme.setIdentifier($memberName.identifier);
  -        $specifierStatement.setBaseMemberExpression(bme); }
  -      specifier
  -      { $specifierStatement.setSpecifierExpression($specifier.specifierExpression); }
  -      ';'
  -    ;
  -
  -expressionStatement returns [ExpressionStatement expressionStatement]
  +    | expressionOrSpecificationstatement
  +      { $statement = $expressionOrSpecificationstatement.statement; }
  +    ;
  +
  +expressionOrSpecificationstatement returns [Statement statement]
  +    @init { SpecifierStatement ss=new SpecifierStatement(null); 
  +            ExpressionStatement es=new ExpressionStatement(null); }
       : expression 
  -      { $expressionStatement = new ExpressionStatement(null); 
  -        $expressionStatement.setExpression($expression.expression); } 
  +      { es.setExpression($expression.expression);
  +        $statement = es; }
  +      (
  +        { $expression.expression.getTerm() instanceof BaseMemberExpression }?=>
  +        specifier
  +        { ss.setSpecifierExpression($specifier.specifierExpression);
  +          ss.setBaseMemberExpression((BaseMemberExpression)$expression.expression.getTerm()); 
  +          $statement = ss; }
  +      )?
         (
           SEMICOLON
         | { displayRecognitionError(getTokenNames(), 
  
positive.code: memberBody[StaticType type] returns [Block block]
        //options { memoize=true; }
      : 
      {$type instanceof BaseType}? 
      (
        (namedArguments)
        => namedArguments //first try to match with no directives or control structures
  
negative.code:         COMMA
        )
      ;
  
  directiveStatement returns [Directive directive]
      : d=directive 
        { $directive=$d.directive; } 
  