home *** CD-ROM | disk | FTP | other *** search
- LETTER : GETIDENTIFIER(
- (* UPDATING *) CURRCHAR,
- NEXTCHAR,
- (* RETURNING *) NAME,
- VALUE,
- LENGTH );
- DIGIT : GETNUMBER(
- (* UPDATING *) CURRCHAR,
- NEXTCHAR,
- (* RETURNING *) NAME,
- VALUE,
- LENGTH );
- QUOTE : GETCHARLITERAL(
- (* UPDATING *) CURRCHAR,
- NEXTCHAR,
- (* RETURNING *) NAME,
- VALUE,
- LENGTH );
- OTHERCHAR : BEGIN
- GETSPECIALCHAR(
- (* UPDATING *) CURRCHAR,
- NEXTCHAR,
- (* RETURNING *) NAME,
- VALUE,
- LENGTH );
- IF NAME = OPENCOMMENT
- THEN
- GETCOMMENT(
- (* UPDATING *) CURRCHAR,
- NEXTCHAR,
- NAME,
- VALUE,
- LENGTH )
- END;
- FILEMARK : NAME := ENDOFFILE
- END (* CASE *)
- END; (* GETNEXTSYMBOL *)
- PROCEDURE GETSYMBOL(
- (* UPDATING *) VAR NEXTSYM : SYMBOLINFO;
- (* RETURNING *) VAR CURRSYM : SYMBOLINFO );
- VAR
- DUMMY: SYMBOLINFO;
- BEGIN (* GETSYMBOL *)
- DUMMY := CURRSYM;
- CURRSYM := NEXTSYM;
- NEXTSYM := DUMMY ;
- WITH NEXTSYM^ DO
- BEGIN
- SKIPSPACES(
- (* UPDATING *) CURRCHAR,
- NEXTCHAR,
- (* RETURNING *) SPACESBEFORE,
- CRSBEFORE );
- LENGTH := 0;
- IF CURRSYM^.NAME = OPENCOMMENT
- THEN
- GETCOMMENT(
- (* UPDATING *) CURRCHAR,
- NEXTCHAR,
- (* RETURNING *) NAME,
- VALUE,
- LENGTH )
- ELSE
- GETNEXTSYMBOL(
- (* UPDATING *) CURRCHAR,
- NEXTCHAR,
- (* RETURNING *) NAME,
- VALUE,
- LENGTH )
- END (* WITH *)
- END; (* GETSYMBOL *)
- PROCEDURE INT2 ( VAR TOPOFSTACK : INTEGER;
- VAR CURRLINEPOS,
- CURRMARGIN : INTEGER;
- VAR KEYWORD : KEYWORDTABLE;
- VAR DBLCHARS : DBLCHRSET;
- VAR DBLCHAR : DBLCHARTABLE;
- VAR SGLCHAR : SGLCHARTABLE;
- VAR RECORDSEEN : BOOLEAN;
- VAR CURRCHAR,
- NEXTCHAR : CHARINFO;
- VAR CURRSYM,
- NEXTSYM : SYMBOLINFO;
- VAR PPOPTION : OPTIONTABLE );
-
- BEGIN
- WITH PPOPTION [ OFSYM ] DO
- BEGIN
- OPTIONSSELECTED := [ CRSUPPRESS,
- SPACEBEFORE ];
- DINDENTSYMBOLS := [];
- GOBBLETERMINATORS := []
- END;
- WITH PPOPTION [ FORSYM ] DO
- BEGIN
- OPTIONSSELECTED := [ SPACEAFTER,
- INDENTBYTAB,
- GOBBLESYMBOLS,
- CRAFTER ];
- DINDENTSYMBOLS := [];
- GOBBLETERMINATORS := [ DOSYM ]
- END;
- WITH PPOPTION [ WHILESYM ] DO
- BEGIN
- OPTIONSSELECTED := [ SPACEAFTER,
- INDENTBYTAB,
- GOBBLESYMBOLS,
- CRAFTER ];
- DINDENTSYMBOLS := [];
- GOBBLETERMINATORS := [ DOSYM ]
- END;
- WITH PPOPTION [ WITHSYM ] DO
- BEGIN
- OPTIONSSELECTED := [ SPACEAFTER,
- INDENTBYTAB,
- GOBBLESYMBOLS,
- CRAFTER ];
- DINDENTSYMBOLS := [];
- GOBBLETERMINATORS := [ DOSYM ]
- END;
- WITH PPOPTION [ DOSYM ] DO
- BEGIN
- OPTIONSSELECTED := [ CRSUPPRESS,
- SPACEBEFORE ];
- DINDENTSYMBOLS := [];
- GOBBLETERMINATORS := []
- END;
-
- WITH PPOPTION [ IFSYM ] DO
- BEGIN
- OPTIONSSELECTED := [ SPACEAFTER,
- INDENTBYTAB,
- GOBBLESYMBOLS,
- CRAFTER ];
- DINDENTSYMBOLS := [];
- GOBBLETERMINATORS := [ THENSYM ]
- END;
- WITH PPOPTION [ THENSYM ] DO
- BEGIN
- OPTIONSSELECTED := [ INDENTBYTAB, CRAFTER ];
- DINDENTSYMBOLS := [];
- GOBBLETERMINATORS := []
- END;
- WITH PPOPTION [ ELSESYM ] DO
- BEGIN
- OPTIONSSELECTED := [ CRBEFORE,
- DINDENTONKEYS,
- DINDENT,
- INDENTBYTAB,
- CRAFTER ];
- DINDENTSYMBOLS := [ IFSYM,
- ELSESYM ];
- GOBBLETERMINATORS := []
- END;
- WITH PPOPTION [ ENDSYM ] DO
- BEGIN
- OPTIONSSELECTED := [ CRBEFORE,
- DINDENTONKEYS,
- DINDENT,
- CRAFTER ];
- DINDENTSYMBOLS := [ IFSYM,
- THENSYM,
- ELSESYM,
- FORSYM,
- WHILESYM,
- WITHSYM,
- CASEVARSYM,
- COLON,
- EQUALS ];
- GOBBLETERMINATORS := []
- END;
- WITH PPOPTION [ UNTILSYM ] DO
- BEGIN
- OPTIONSSELECTED := [ CRBEFORE,
- DINDENTONKEYS,
- DINDENT,
- SPACEAFTER,
- GOBBLESYMBOLS,
- CRAFTER ];
- DINDENTSYMBOLS := [ IFSYM,
- THENSYM,
- ELSESYM,
- FORSYM,
- WHILESYM,
- WITHSYM,
- COLON,
- EQUALS ];
- GOBBLETERMINATORS := [ ENDSYM,
- UNTILSYM,
- ELSESYM,
- SEMICOLON ];
- END;
- WITH PPOPTION [ BECOMES ] DO
- BEGIN
- OPTIONSSELECTED := [ SPACEBEFORE,
- SPACEAFTER,
- GOBBLESYMBOLS ];
- DINDENTSYMBOLS := [];
- GOBBLETERMINATORS := [ ENDSYM,
- UNTILSYM,
- ELSESYM,
- SEMICOLON ]
- END;
- WITH PPOPTION [ OPENCOMMENT ] DO
- BEGIN
- OPTIONSSELECTED := [ CRSUPPRESS ];
- DINDENTSYMBOLS := [];
- GOBBLETERMINATORS := []
- END;
- WITH PPOPTION [ CLOSECOMMENT ] DO
- BEGIN
- OPTIONSSELECTED := [ CRSUPPRESS ];
- DINDENTSYMBOLS := [];
- GOBBLETERMINATORS := []
- END;
- WITH PPOPTION [ SEMICOLON ] DO
- BEGIN
- OPTIONSSELECTED := [ CRSUPPRESS,
- DINDENTONKEYS,
- CRAFTER ];
- DINDENTSYMBOLS := [ IFSYM,
- THENSYM,
- ELSESYM,
- FORSYM,
- WHILESYM,
- WITHSYM,
- COLON,
- EQUALS ];
- GOBBLETERMINATORS := []
- END;
- WITH PPOPTION [ COLON ] DO
- BEGIN
- OPTIONSSELECTED := [ SPACEAFTER,
- INDENTTOCLP ];
- DINDENTSYMBOLS := [];
- GOBBLETERMINATORS := []
- END;
- WITH PPOPTION [ EQUALS ] DO
- BEGIN
- OPTIONSSELECTED := [ SPACEBEFORE,
- SPACEAFTER,
- INDENTTOCLP ];
- DINDENTSYMBOLS := [];
- GOBBLETERMINATORS := []
- END;
- WITH PPOPTION [ OPENPAREN ] DO
- BEGIN
- OPTIONSSELECTED := [ GOBBLESYMBOLS ];
- DINDENTSYMBOLS := [];
- GOBBLETERMINATORS := [ CLOSEPAREN ]
- END;
- WITH PPOPTION [ CLOSEPAREN ] DO
- BEGIN
- OPTIONSSELECTED := [];
- DINDENTSYMBOLS := [];
- GOBBLETERMINATORS := []
- END;
- WITH PPOPTION [ PERIOD ] DO
- BEGIN
- OPTIONSSELECTED := [ CRSUPPRESS ];
- DINDENTSYMBOLS := [];
- GOBBLETERMINATORS := []
- END;
- WITH PPOPTION [ ENDOFFILE ] DO
- BEGIN
- OPTIONSSELECTED := [];
- DINDENTSYMBOLS := [];
- GOBBLETERMINATORS := []
- END;
- WITH PPOPTION [ OTHERSYM ] DO
- BEGIN
- OPTIONSSELECTED := [];
- DINDENTSYMBOLS := [];
- GOBBLETERMINATORS := []
- END
- END; (* INITIALIZE2 *)
-
-
-
- PROCEDURE INITIALIZE( (* RETURNING *)
- VAR TOPOFSTACK : INTEGER;
- VAR CURRLINEPOS,
- CURRMARGIN : INTEGER;
- VAR KEYWORD : KEYWORDTABLE;
- VAR DBLCHARS : DBLCHRSET;
- VAR DBLCHAR : DBLCHARTABLE;
- VAR SGLCHAR : SGLCHARTABLE;
- VAR RECORDSEEN : BOOLEAN;
- VAR CURRCHAR,
- NEXTCHAR : CHARINFO;
- VAR CURRSYM,
- NEXTSYM : SYMBOLINFO;
- VAR PPOPTION : OPTIONTABLE );
- BEGIN (* INITIALIZE *)
- TOPOFSTACK := 0;
- CURRLINEPOS := 0;
- CURRMARGIN := 0;
- KEYWORD [ PROGSYM ] := 'PROGRAM ' ;
- KEYWORD [ FUNCSYM ] := 'FUNCTION ' ;
- KEYWORD [ PROCSYM ] := 'PROCEDURE ' ;
- KEYWORD [ LABELSYM ] := 'LABEL ' ;
- KEYWORD [ CONSTSYM ] := 'CONST ' ;
- KEYWORD [ TYPESYM ] := 'TYPE ' ;
- KEYWORD [ VARSYM ] := 'VAR ' ;
- KEYWORD [ BEGINSYM ] := 'BEGIN ' ;
- KEYWORD [ REPEATSYM ] := 'REPEAT ' ;
- KEYWORD [ RECORDSYM ] := 'RECORD ' ;
- KEYWORD [ CASESYM ] := 'CASE ' ;
- KEYWORD [ CASEVARSYM ] := 'CASE ' ;
- KEYWORD [ OFSYM ] := 'OF ' ;
- KEYWORD [ FORSYM ] := 'FOR ' ;
- KEYWORD [ WHILESYM ] := 'WHILE ' ;
- KEYWORD [ WITHSYM ] := 'WITH ' ;
- KEYWORD [ DOSYM ] := 'DO ' ;
- KEYWORD [ IFSYM ] := 'IF ' ;
- KEYWORD [ THENSYM ] := 'THEN ' ;
- KEYWORD [ ELSESYM ] := 'ELSE ' ;
- KEYWORD [ ENDSYM ] := 'END ' ;
- KEYWORD [ UNTILSYM ] := 'UNTIL ' ;
- DBLCHARS := [ BECOMES, OPENCOMMENT ];
- DBLCHAR [ BECOMES ] := ':=' ;
- DBLCHAR [ OPENCOMMENT ] := '(*' ;
- SGLCHAR [ SEMICOLON ] := ';' ;
- SGLCHAR [ COLON ] := ':' ;
- SGLCHAR [ EQUALS ] := '=' ;
- SGLCHAR [ OPENPAREN ] := '(' ;
- SGLCHAR [ CLOSEPAREN ] := ')' ;
- SGLCHAR [ PERIOD ] := '.' ;
- RECORDSEEN := FALSE;
- SAWCOMOPEN := FALSE;
- SAWCOMCLOSE := FALSE;
- INACOMMENT := FALSE;
- SAWQUOTEDSTRING := FALSE;
- GETCHAR(
- (* UPDATING *) NEXTCHAR,
- (* RETURNING *) CURRCHAR );
- NEW(CURRSYM);
- NEW(NEXTSYM);
- GETSYMBOL(
- (* UPDATING *) NEXTSYM,
- (* RETURNING *) CURRSYM );
- WITH PPOPTION [ PROGSYM ] DO
- BEGIN
- OPTIONSSELECTED := [ BLANKLINEBEFORE,
- SPACEAFTER ];
- DINDENTSYMBOLS := [];
- GOBBLETERMINATORS := []
- END;
- WITH PPOPTION [ FUNCSYM ] DO
- BEGIN
- OPTIONSSELECTED := [ BLANKLINEBEFORE,
- DINDENTONKEYS,
- SPACEAFTER ];
- DINDENTSYMBOLS := [ LABELSYM,
- CONSTSYM,
- TYPESYM,
- VARSYM ];
- GOBBLETERMINATORS := []
- END;
- WITH PPOPTION [ PROCSYM ] DO
- BEGIN
- OPTIONSSELECTED := [ BLANKLINEBEFORE,
- DINDENTONKEYS,
- SPACEAFTER ];
- DINDENTSYMBOLS := [ LABELSYM,
- CONSTSYM,
- TYPESYM,
- VARSYM ];
- GOBBLETERMINATORS := []
- END;
- WITH PPOPTION [ LABELSYM ] DO
- BEGIN
- OPTIONSSELECTED := [ BLANKLINEBEFORE,
- SPACEAFTER,
- INDENTTOCLP,
- CRAFTER ];
- DINDENTSYMBOLS := [];
- GOBBLETERMINATORS := []
- END;
- WITH PPOPTION [ CONSTSYM ] DO
- BEGIN
- OPTIONSSELECTED := [ BLANKLINEBEFORE,
- DINDENTONKEYS,
- SPACEAFTER,
- INDENTTOCLP,
- CRAFTER ];
- DINDENTSYMBOLS := [ LABELSYM ];
- GOBBLETERMINATORS := []
- END;
- WITH PPOPTION [ TYPESYM ] DO
- BEGIN
- OPTIONSSELECTED := [ BLANKLINEBEFORE,
- DINDENTONKEYS,
- SPACEAFTER,
- INDENTTOCLP,
- CRAFTER ];
- DINDENTSYMBOLS := [ LABELSYM,
- CONSTSYM ];
- GOBBLETERMINATORS := []
- END;
- WITH PPOPTION [ VARSYM ] DO
- BEGIN
- OPTIONSSELECTED := [ BLANKLINEBEFORE,
- DINDENTONKEYS,
- SPACEAFTER,
- INDENTTOCLP,
- CRAFTER ];
- DINDENTSYMBOLS := [ LABELSYM,
- CONSTSYM,
- TYPESYM ];
- GOBBLETERMINATORS := []
- END;
- WITH PPOPTION [ BEGINSYM ] DO
- BEGIN
- OPTIONSSELECTED := [ DINDENTONKEYS,
- INDENTBYTAB,
- CRAFTER ];
- DINDENTSYMBOLS := [ LABELSYM,
- CONSTSYM,
- TYPESYM,
- VARSYM ];
- GOBBLETERMINATORS := []
- END;
- WITH PPOPTION [ REPEATSYM ] DO
- BEGIN
- OPTIONSSELECTED := [ INDENTBYTAB,
- CRAFTER ];
- DINDENTSYMBOLS := [];
- GOBBLETERMINATORS := []
- END;
- WITH PPOPTION [ RECORDSYM ] DO
- BEGIN
- OPTIONSSELECTED := [ INDENTBYTAB,
- CRAFTER ];
- DINDENTSYMBOLS := [];
- GOBBLETERMINATORS := []
- END;
- WITH PPOPTION [ CASESYM ] DO
- BEGIN
- OPTIONSSELECTED := [ SPACEAFTER,
- INDENTBYTAB,
- GOBBLESYMBOLS,
- CRAFTER ];
- DINDENTSYMBOLS := [];
- GOBBLETERMINATORS := [ OFSYM ]
- END;
- WITH PPOPTION [ CASEVARSYM ] DO
- BEGIN
- OPTIONSSELECTED := [ SPACEAFTER,
- INDENTBYTAB,
- GOBBLESYMBOLS,
- CRAFTER ];
- DINDENTSYMBOLS := [];
- GOBBLETERMINATORS := [ OFSYM ]
- END;
- INT2 ( TOPOFSTACK, CURRLINEPOS, CURRMARGIN, KEYWORD, DBLCHARS, DBLCHAR,
- SGLCHAR, RECORDSEEN, CURRCHAR, NEXTCHAR, CURRSYM, NEXTSYM, PPOPTION );
- END;
-
- BLCHAR,
- SGLCHAR,
- RECORDSEEN,
- CURRCHAR,
- NEXTCHAR, CURRSYM, NEXTSYM, PPOPTION );
- END;
-
-