anchor.diff:  :
       ( LCURLY RCURLY ) => l:LCURLY^ RCURLY!
       { #functionBody= #(#l, #(#[PARENTHESIZED, "Parenthesized"], null)); }
  -    | LCURLY^ expr RCURLY!
  +    | LCURLY^
  +    { lexer.inFunctionBody = true; }
  +    expr
  +    { lexer.inFunctionBody = false; }
  +    RCURLY!
       ;
   
   returnType throws XPathException:
  
positive.code: 	protected boolean inStringConstructor = false;
  	protected boolean inElementContent= false;
  	protected boolean inAttributeContent= false;
  	protected char attrDelimChar = '"';
  	protected boolean inComment= false;
  	protected boolean inPragma = false;
  
negative.code: 	relativePathExpr
  	|
  	( SLASH relativePathExpr )
  	=> s1:SLASH relPath:relativePathExpr
  	{
  	  if (lexer.inFunctionBody) {
          throw new XPathException(#s1.getLine(), #s1.getColumn(), ErrorCodes.XPDY0002,
                 "Leading '/' selects nothing, ContextItem is absent in function body");
  	  }
  	  #pathExpr= #(#[ABSOLUTE_SLASH, "AbsoluteSlash"], #relPath);
  	}
  	// lone slash
  	|
  	s2:SLASH
  	{
  	  if (lexer.inFunctionBody) {
          throw new XPathException(#s2.getLine(), #s2.getColumn(), ErrorCodes.XPDY0002,
                 "Leading '/' selects nothing, ContextItem is absent in function body");
  	  }
  	  #pathExpr= #[ABSOLUTE_SLASH, "AbsoluteSlash"];
  	}
  	|
  	ds:DSLASH relPath2:relativePathExpr
  	{
  	  if (lexer.inFunctionBody) {
          throw new XPathException(#ds.getLine(), #ds.getColumn(), ErrorCodes.XPDY0002,
                 "Leading '//' selects nothing, ContextItem is absent in function body");
  	  }
  	  #pathExpr= #(#[ABSOLUTE_DSLASH, "AbsoluteSlashSlash"], #relPath2);
  	}
  	;
  
  relativePathExpr throws XPathException
  