Google
 

Trailing-Edge - PDP-10 Archives - BB-JF18A-BM - sources/diu/diupattoken.req
There are 4 other files named diupattoken.req in the archive. Click here to see a list.
!	COPYRIGHT (C) DIGITAL EQUIPMENT CORPORATION 1986.
!	ALL RIGHTS RESERVED.
!
!	THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY  BE  USED  AND
!	COPIED ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE AND WITH
!	THE INCLUSION OF THE ABOVE COPYRIGHT NOTICE.   THIS  SOFTWARE  OR
!	ANY  OTHER  COPIES  THEREOF MAY NOT BE PROVIDED OR OTHERWISE MADE
!	AVAILABLE TO ANY OTHER PERSON.  NO TITLE TO AND OWNERSHIP OF  THE
!	SOFTWARE IS HEREBY TRANSFERRED.
!
!	THE INFORMATION IN THIS SOFTWARE IS  SUBJECT  TO  CHANGE  WITHOUT
!	NOTICE  AND  SHOULD  NOT  BE CONSTRUED AS A COMMITMENT BY DIGITAL
!	EQUIPMENT CORPORATION.
!
!	DIGITAL ASSUMES NO RESPONSIBILITY FOR THE USE OR  RELIABILITY  OF
!	ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BY DIGITAL.
!
! DIUPATTOKEN.REQ

!++
! FACILITY: 	PAT Parser
!
! ABSTRACT:
!
!	PATTOKEN.REQ is the external specification for the
!	parser token buffer management routines.
!
! ENVIRONMENT:	VAX/VMS user mode
!
! AUTHOR:  Charlie Mitchell, CREATION DATE:  9-Nov-1981
!
! MODIFIED BY:
! 001 - C. Richardson 25-May-84 Remove VMS dependencies.
!
!  253  Rename file to DIUPATTOKEN.
!       Gregory A. Scott 1-Jul-86
!
!--

require 'DIUPATREQPRO';

library 'DIUPATLANGSP';
! PAT$TOKEN_CURRENT_PTR is the current token pointer.  It is set everytime
! that PAT$TOKEN_GET is called.  Thus, it contains a pointer to
! a "future" lexical token when parse ahead is being done.

%IF %BLISS (BLISS36)						! 001
%THEN								! 001
macro								! 001
PAT$TOKEN_CURRENT_PTR			=	TOKCUR %;	! 001
%FI								! 001

external
    PAT$TOKEN_CURRENT_PTR;
%IF %BLISS (BLISS36)						! 001
%THEN								! 001
macro								! 001
PAT$TOKEN_INIT_BUFFER			=	TOKINB %;	! 001
%FI								! 001

external routine
    PAT$TOKEN_INIT_BUFFER : novalue;

!++
! FUNCTIONAL DESCRIPTION:
!
!	This routine initializes the token buffer and should
!	be called at the start of a parse.
!
! FORMAL PARAMETERS:
!
!	NONE
!
!--
%IF %BLISS (BLISS36)						! 001
%THEN								! 001
macro								! 001
PAT$TOKEN_GET				=	TOKGET %;	! 001
%FI								! 001

external routine
    PAT$TOKEN_GET;

!++
! FUNCTIONAL DESCRIPTION:
!
!	This routine gets the next token either by taking it from the
!	list of tokens which have been read but not consumed or, if
!	there are none, by calling the lexical analyzer.
!	A pointer to then new token is assigned to PAT$TOKEN_CURRENT_PTR.
!
! FORMAL PARAMETERS:
!
!	CONSUME		- Boolean variable.  If TRUE then tokens are consumed,
!			  if FALSE then they are saved for future use.
!
! IMPLICIT OUTPUTS:
!
!	PAT$TOKEN_CURRENT_PTR
!
! ROUTINE VALUE:
!
!	Terminal symbol number of token that was fetched
!
!--
%IF %BLISS (BLISS36)						! 001
%THEN								! 001
macro								! 001
PAT$TOKEN_BUF_HEAD			=	TOKBHD %,	! 001
PAT$TOKEN_BUF_TAIL			=	TOKBTL %;	! 001
%FI								! 001

! This macro is equivalent to a call to PAT$TOKEN_GET (TRUE)

macro
    PAT$TOKEN_GET_CONSUME =
	begin

	external
	    PAT$TOKEN_BUF_HEAD,
	    PAT$TOKEN_BUF_TAIL;

	if (.PAT$TOKEN_BUF_HEAD eql .PAT$TOKEN_BUF_TAIL)
	then 					! Empty buffer
	    PAT$TOKEN_CURRENT_PTR = LS_GET_LEX_TOKEN
	else 					! Unread tokens in buffer
	    begin
	    PAT$TOKEN_CURRENT_PTR = ..PAT$TOKEN_BUF_HEAD;
	    PAT$TOKEN_ADVANCE (PAT$TOKEN_BUF_HEAD);
	    end;

	LS_LEX_TERM (PAT$TOKEN_CURRENT_PTR)
	end
    %;
%IF %BLISS (BLISS36)						! 001
%THEN								! 001
macro								! 001
PAT$TOKEN_SAVE				=	TOKSAV %;	! 001
%FI								! 001

external routine
    PAT$TOKEN_SAVE : novalue;

!++
! FUNCTIONAL DESCRIPTION:
!
!	This routine saves TOKEN_PTR in the token buffer
!	so that it will be the next one returned by PAT$TOKEN_GET.
!	If PERMANENT is FALSE, this change will only affect
!	the current error recovery attempt.
!
! FORMAL PARAMETERS:
!
!	TOKEN_PTR	Token to be saved
!
!	PERMANENT	TRUE if definite correction,
!			FALSE if temporary change for trial correction
!
!--

! This macro is equivalent to a call to PAT$TOKEN_SAVE (XXX, TRUE)

macro
    PAT$TOKEN_SAVE_PERMANENT (TOKEN_PTR) =
	begin

	external
	    PAT$TOKEN_BUF_HEAD;

	PAT$TOKEN_BACKUP (PAT$TOKEN_BUF_HEAD);
	.PAT$TOKEN_BUF_HEAD = (TOKEN_PTR);
	end
    %;
%IF %BLISS (BLISS36)						! 001
%THEN								! 001
macro								! 001
PAT$TOKEN_SAVE_BUF		=	TKSVBF %;		! 001
%FI								! 001

external routine
    PAT$TOKEN_SAVE_BUF;

!++
! FUNCTIONAL DESCRIPTION:
!
!	This routine saves the first n tokens (or all tokens) in the
!	token buffer in temporary storage so that they can be
!	restored after an error recovery attempt.  The tokens can
!	be restored by calling PAT$TOKEN_RESTORE_BUF.
!
! FORMAL PARAMETERS:
!
!	SAVE_UPTO	- number of tokens to be saved
!
! RETURN VALUE:
!
!	Number of tokens saved
!--
%IF %BLISS (BLISS36)						! 001
%THEN								! 001
macro								! 001
PAT$TOKEN_RESTORE_BUF			=	TKRSBF %;	! 001
%FI								! 001

external routine
    PAT$TOKEN_RESTORE_BUF : novalue;

!++
! FUNCTIONAL DESCRIPTION
!
!	This routine restores tokens saved by the previous call
!	to PAT$TOKEN_SAVE_BUF.
!
! FORMAL PARAMTERS:
!
!	NUM_TOKENS	- Value returned on prior call to
!			  PAT$TOKEN_SAVE_BUF.
!
!--
%IF %BLISS (BLISS36)						! 001
%THEN								! 001
macro								! 001
PAT$TOKEN_RESET_BUFFER		=	TKRSTB %;		! 001
%FI								! 001

external routine
    PAT$TOKEN_RESET_BUFFER : novalue;

!++
! FUNCTIONAL DESCRIPTION
!
!	This routine undoes the effect of non-consumed gets (via
!	calls to PAT$TOKEN_GET) and non-permanent saves (via calls
!	to PAT$TOKEN_SAVE) since the last consumed get or permanent
!	save.
!
! FORMAL PARAMTERS:
!
!	NONE
!
!--
%IF %BLISS (BLISS36)						! 001
%THEN								! 001
macro								! 001
PAT$TOKEN_TEMP_HEAD			=	TOKTMH %;	! 001
%FI								! 001

external routine
    PAT$TOKEN_TEMP_HEAD;

!++
! FUNCTIONAL DESCRIPTION
!
!	Routines PAT$TOKEN_TEMP_HEAD and PAT$TOKEN_SET_TEMP_HEAD
!	are used to save and restore the pointer to
!	the "first" token in the temporary token buffer.
!
!	Example of usage:
!
!	    begin
!		local SAVED_TEMP_HEAD;
!		SAVED_TEMP_HEAD = PAT$TOKEN_TEMP_HEAD ();
!		...
!		PAT$TOKEN_SET_TEMP_HEAD (.SAVED_TEMP_HEAD)
!
!	PAT$TOKEN_SET_HEAD can be used to modify the actual buffer.
!
! FORMAL PARAMTERS:
!
!	NONE
!
! RETURN VALUE:
!
!	Pointer to the first token in the temporary token buffer.
!--
%IF %BLISS (BLISS36)						! 001
%THEN								! 001
macro								! 001
PAT$TOKEN_DET_TEMP_HEAD		=	TOKSTH %;		! 001
%FI								! 001

external routine
    PAT$TOKEN_SET_TEMP_HEAD : novalue;

!++
! FUNCTIONAL DESCRIPTION
!
!	See PAT$TOKEN_TEMP_HEAD.
!
! FORMAL PARAMTERS:
!
!	TEMP_HEAD	Value returned on previous call to
!			PAT$TOKEN_TEMP_HEAD
!
!--
%IF %BLISS (BLISS36)						! 001
%THEN								! 001
macro								! 001
PAT$TOKEN_SET_HEAD			=	TOKSEH %;	! 001
%FI								! 001

external routine
    PAT$TOKEN_SET_HEAD : novalue;

!++
! FUNCTIONAL DESCRIPTION
!
!	See PAT$TOKEN_TEMP_HEAD.
!
! FORMAL PARAMTERS:
!
!	HEAD		Value returned on previous call to
!			PAT$TOKEN_TEMP_HEAD
!
!--
! The macros that follow are not intended for direct use outside of
! PATTOKEN.


%IF %BLISS (BLISS36)						! 001
%THEN								! 001
macro								! 001
PAT$TOKEN_BUF_HIGH			=	TOKBFH %,	! 001
PAT$TOKEN_BUF_LOW			=	TOKBFL %;	! 001
%FI								! 001

macro
    PAT$TOKEN_ADVANCE (BUF_PTR) =
	begin

	external
	    PAT$TOKEN_BUF_HIGH,
	    PAT$TOKEN_BUF_LOW;

	if .BUF_PTR eql .PAT$TOKEN_BUF_HIGH
	then
	    BUF_PTR = .PAT$TOKEN_BUF_LOW
	else
	    BUF_PTR = .BUF_PTR + %upval

	end
    %;

macro
    PAT$TOKEN_BACKUP (BUF_PTR) =
	begin

	external
	    PAT$TOKEN_BUF_HIGH,
	    PAT$TOKEN_BUF_LOW;

	if .BUF_PTR eql .PAT$TOKEN_BUF_LOW
	then
	    BUF_PTR = .PAT$TOKEN_BUF_HIGH
	else
	    BUF_PTR = .BUF_PTR - %upval

	end
    %;
%if PATBLSEXT_DEBUGGING
%then

external routine
    PAT$DUMP_TOKEN : novalue;

!++
! FUNCTIONAL DESCRIPTION:
!
!	PAT$DUMP_TOKEN outputs the lexical token pointed to by PAT$TOKEN_CURRENT_PTR.
!
! FORMAL PARAMETERS:
!
!	NONE
!
! IMPLICIT INPUTS:
!
!	PAT$TOKEN_CURRENT_PTR
!
! IMPLICIT OUTPUTS:
!
!	NONE
!
! ROUTINE VALUE:
!
!	NONE
!
! SIDE EFFECTS:
!
!	NONE
!
!--
%IF %BLISS (BLISS36)						! 001
%THEN								! 001
macro								! 001
PAT$DUMP_TKN_BUF			=	DMPTKB %;	! 001
%FI								! 001

external routine
    PAT$DUMP_TKN_BUF : novalue;

!++
! FUNCTIONAL DESCRIPTION:
!
!	PAT$DUMP_TKN_BUF outputs the buffer of tokens read but not consumed
!	and the temporary buffer of tokens used in local error recovery.
!	When called other than during local error recovery the temporary
!	buffer may contain some "garbage".
!
! FORMAL PARAMETERS:
!
!	NONE
!
! IMPLICIT INPUTS:
!
!	TKN_BUF_HEAD
!
!	TKN_BUF_TEMP_HEAD
!
!	TKN_BUF_TAIL
!
! IMPLICIT OUTPUTS:
!
!	NONE
!
! ROUTINE VALUE:
!
!	NONE
!
! SIDE EFFECTS:
!
!	NONE
!
!--

%fi

! End of PATTOKEN.REQ