Pascal Report  183  Q  := C div R;  R:= C mod D;  A2  := A2  - Q*AI;  B2  B2  - Q*BI;  C  .= D;  D:= R;  R  := AI;  AI.- A2;  A2  R;  R  := BI;  BI:= B2;  B2:= R  end;  X  := C;  Y:= A2;  Z:= B2  { X =  GCD(M,N)  =  Y*M  +  Z*N  end  { GCD  };  11.2  Function Declarations  A function declaration serves to introduce a function identifier, and to  associate the identifier with a result type, with a block, and possibly  with a fonnal parameter list.  The function heading of a function  declaration introduces the function identifier, the result type, and the  fonnal parameter list.  A function  may be  declared by  a  single  function  declaration  consisting of the function heading and the block. This is the most  common fonn.  Alternatively, it may be declared with a "forward declaration": one  function declaration consists of the function heading and the directive  forward, and a second declaration in the same procedure and function  declaration part consists of a function identification and the block. The  function identifier in the function identification must be the identifier  introduced by the first declaration. Note that the fonnal parameter list,  if any, and the result type are not specified in the second declaration.  The block of a function declaration must contain at least one  assignment to the function identifier. The use of the function identifier  in  a  function  designator  within  the  block  of  its  declaration  impliesrecursive execution of the function.  FunctionDeclaration  =  FunctionHeading  ";"  Block  I  FunctionHeading  ";"  Directive  I  Functionldentification  ";"  Block.  FunctionHeading  =  "function"  Identifier [FormaIParameterList]  ":"  ResultType .  ResultType  =  OrdinalTypeldentifier  I  RealTypeldentifier  I  PointerTypeldentifier.  Functionldentification  = "function"  Functonldentifier.  Functionldentifier  =  Identifier. 