M2S:
CEDAR
DEFINITIONS =
BEGIN
IdBufLen: CARDINAL = 8000;
Symbol: TYPE =
{ null,
times, slash, div, rem, mod, and,
plus, minus, or,
eql, neq, lss, leq, gtr, geq, in,
arrow, period, comma, colon, ellipsis, rparen, rbrak, rbrace,
of, then, do, to, by,
lparen, lbrak, lbrace, not, becomes, number, string, ident,
semicolon, bar, end, else, elsif, until,
if, while, repeat, loop, with, exit, return, case, for,
array, pointer, record, set,
begin, code, const, type, var, forward, procedure, module,
definition, implementation, export, qualified, from, import, eof };
NumTyp: TYPE = { cardint, longint, char, real, longreal };
numtyp: VAR NumTyp;
intval: VAR LONG INTEGER;
dblval: VAR LONG INTEGER;
realval: VAR REAL;
scanerr: VAR BOOL;
source: VAR IO.STREAM;
sourcepos: VAR LONG CARDINAL;
log: VAR IO.STREAM;
CharArray: TYPE = PACKED ARRAY [0..IdBufLen) OF CHAR;
IdBuf: VAR REF CharArray; --identifier buffer
InitScanner: PROC;
Diff: PROC [i, j: CARDINAL] RETURNS [INTEGER];
Enter: PROC [name: REF TEXT] RETURNS [CARDINAL];
KeepId: PROC;
GetSym: PROC;