-- file PGSConDefs.mesa
-- last modified by Satterthwaite, September 16, 1982 10:14 am
DIRECTORY
Environment: TYPE USING [bitsPerWord, charsPerWord, wordsPerPage],
PGSTypes: TYPE USING [
Aliases, LongDes, LongPointer, Options, ProdInfo, RhsChar, SymTab, SymInfo, TokenInfo,
alternateLim, maxProd, maxRhsSymbols, maxRule, pssLim, rhsLim, symTabSize, tokenSize,
GetBit, SetBit],
Stream: TYPE USING [Handle],
Strings: TYPE USING [String],
TimeStamp: TYPE USING [Stamp];
PGSConDefs: DEFINITIONS IMPORTS PGSTypes = {
-- machine parameters
cpw: CARDINAL = Environment.charsPerWord;
pageSize: CARDINAL = Environment.wordsPerPage;
wordLength: CARDINAL = Environment.bitsPerWord;
maxCharCode: CARDINAL = LAST[CHAR]-FIRST[CHAR];
-- common compile time constants
outbufLim: CARDINAL = 90;
--PGSScan compile time constants
alternateLim: CARDINAL = PGSTypes.alternateLim;
maxProd: CARDINAL = PGSTypes.maxProd;
maxRhsSymbols: CARDINAL = PGSTypes.maxRhsSymbols;
maxRule: CARDINAL = PGSTypes.maxRule;
pssLim: CARDINAL = PGSTypes.pssLim;
rhsLim: CARDINAL = PGSTypes.rhsLim;
symTabSize: CARDINAL = PGSTypes.symTabSize;
tokenSize: CARDINAL = PGSTypes.tokenSize;
wordsForToken: CARDINAL = (tokenSize+cpw-1)/cpw;
ControlZ: CHAR = '\032; -- ↑Z, Bravo escape character
query: CHAR = '?; -- marker character in PGSformat
--PGSLALR constants
maxStateNum: CARDINAL = 400;
stateExt: CARDINAL = 100;
maxTabEntries: CARDINAL = 7000;
tabExt: CARDINAL = 1000;
maxContexts: CARDINAL = 960;
--PGSTab constants
defaultMarker: CARDINAL = 0;
-- structures built and exported by PGSControl, used by PGSFormat and PGSBcd
pgsVersion: VAR TimeStamp.Stamp;
sourceVersion: VAR TimeStamp.Stamp;
sourceName: VAR Strings.String;
objectVersion: VAR TimeStamp.Stamp;
-- structures built by PGSScan, exported by PGSControl, used by PGSLALR and PGSTab
warningsLogged: VAR BOOL;
eofile: VAR CARDINAL; -- last terminal
totalTokens: VAR CARDINAL; -- size of grammar vocabulary
numprod: VAR CARDINAL; -- number of productions
numrules: VAR CARDINAL; -- number of rules
nextAlias: VAR CARDINAL; -- number of aliased terminal symbols
flags: VAR ARRAY PGSTypes.Options OF BOOL;
symtab: VAR PGSTypes.SymTab;
syminfo: VAR PGSTypes.SymInfo;
aliases: VAR PGSTypes.Aliases;
tokeninfo: VAR PGSTypes.TokenInfo;
prodinfo: VAR PGSTypes.ProdInfo;
rhschar: VAR PGSTypes.RhsChar;
-- structures built by PGSLALR, exported by PGSControl, used by PGSTab
slim, tentries, ntentries: VAR CARDINAL;
-- structures built by PGSLALR, exported by PGSControl, used by PGSControl and PGSLALR
bitstrsize: VAR CARDINAL;
-- procedures
LongPointer: TYPE = PGSTypes.LongPointer;
LongDes: TYPE = PGSTypes.LongDes;
-- storage management, exported by PGSControl
AcquireZone: PROC RETURNS [UNCOUNTED ZONE];
ReleaseZone: PROC [UNCOUNTED ZONE] = INLINE {};
MakeArray: PROC [length, width: CARDINAL] RETURNS [LongDes];
Expand: PROC [des: LongDes, width, ext: CARDINAL] RETURNS [LongDes];
FreeArray: PROC [des: LongDes];
-- stream input/output, exported by PGSControl
seterrstream: PROC;
setoutstream: PROC [dotstring: Strings.String];
resetoutstream: PROC;
closeoutstream: PROC;
cleanupstreams: PROC;
inchar: PROC RETURNS [c: CHAR, end: BOOL];
outchar: PROC [c: CHAR, n: INTEGER];
outeol: PROC [n: CARDINAL];
outnum: PROC [val: INTEGER, cols: CARDINAL, signChar: CHAR←'-];
outstring: PROC [string: Strings.String];
outtab: PROC;
outtime: PROC;
openwordstream: PROC [scratch: BOOL ← TRUE];
closewordstream: PROC;
inword: PROC RETURNS [CARDINAL];
outword: PROC [n: CARDINAL];
outblock: PROC [address: LongPointer, words: CARDINAL];
-- bit manipulation, exported by PGSControl
FindBit: PROC [num: CARDINAL, source: LongPointer] RETURNS [BOOL] =
INLINE {RETURN [PGSTypes.GetBit[source+num/wordLength, num MOD wordLength] # 0]};
InsertBit: PROC [num: CARDINAL, sink: LongPointer] =
INLINE {PGSTypes.SetBit[1, sink + num/wordLength, num MOD wordLength]};
orCount: VAR CARDINAL;
OrBits: PROC [source, sink: LongPointer];
-- errors, exported by PGSControl
PGSFail: ERROR;
-- implemented by PGSScan
OutToken: PROC [symbol: CARDINAL] RETURNS [CARDINAL];
CheckOut: PROC;
-- implemented by PGSLALR
LALRGen: PROC RETURNS [BOOL];
-- implemented by PGSTab
TabGen: PROC [prefix, suffix: PROC] RETURNS [BOOL];
OutModule: PROC [typename, modfname: Strings.String, long: BOOL ← FALSE];
-- implemented by PGSFormat
Format: PROC [table, type, export: Strings.String];
PrintGrammar: PROC;
-- implemented by PGSBcd
WriteBcdHeader: PROC [
outStream: Stream.Handle,
tableId, binaryId: Strings.String, -- file being written
interfaceId, fileId: Strings.String, -- interface being exported
altoCode: BOOL ← FALSE];
FixupBcdHeader: PROC;
-- implemented by PGSSymbols
WriteSymbols: PROC [s: Stream.Handle, moduleId: Strings.String];
-- implemented by PGSInterface
AcquireTable: PROC RETURNS [LONG POINTER];
ReleaseTable: PROC;
}.