anchor.diff:  	}
   	
   	/**
  +	 * Extracts macro name from macro string
  +	 * @param aMacroString macro string, for example: \$a, \${a}
  +	 * @return extracted macro name without extra characters, for example: a
  +	 */
  +	private String getMacroName( final String aMacroString ) {
  +		final Matcher m = PATTERN_MACRO.matcher( aMacroString );
  +		if ( m.find() ) {
  +			return m.group(1);
  +		} else {
  +			return null;
  +		}
  +	}
  +	
  +	/**
  +	 * Extracts macro name from typed macro string
  +	 * @param aMacroString macro string, for example: \${a, float}
  +	 * @return extracted macro name without extra characters, for example: a
  +	 */
  +	private String getTypedMacroName( final String aMacroString ) {
  +		final Matcher m = PATTERN_TYPED_MACRO.matcher( aMacroString );
  +		if ( m.find() ) {
  +			return m.group(1);
  +		} else {
  +			return null;
  +		}
  +	}
  +		
  +	/**
   	 * Gets the macro value string of a macro (without type)
   	 * @param aMacroToken the macro token
   	 * @param aErrorFormatStr format strings for error messages if definition (macro or environment variable) cannot be resolved
  
positive.code: 	 * @return the macro value string
  	 *         or "" if macro is invalid. In this case an error marker is also created
  	 */
  	private String getMacroValue( ParserRuleContext aMacroRule, String aErrorFormatStr ) {
  		String definition = aMacroRule.getText().substring( 1, aMacroRule.getText().length() );
  		String value = getDefinitionValue( definition );
  		if ( value == null ) {
  			String errorMsg = String.format( aErrorFormatStr, definition );
  			reportError( errorMsg, aMacroRule.start, aMacroRule.stop );
  			return "";
  		}
  
negative.code: import org.eclipse.core.resources.IFile;
  
  import java.util.Map;
  import java.util.regex.Matcher;
  import java.util.regex.Pattern;
  }
  
  @members{
  