<<>> <> <> <> <> <> <> <> DIRECTORY IO USING [STREAM], NPGSTypes, Rope USING [ROPE], TimeStamp: TYPE USING [Stamp]; NPGSConDefs: CEDAR DEFINITIONS = { <> cpw: NAT = BYTES[WORD]; wordLength: NAT = BITS[WORD]; maxSymbolIndex: NAT = 255; <> outbufLim: NAT = 90; <> alternateLim: CARDINAL = NPGSTypes.alternateLim; maxProd: CARDINAL = NPGSTypes.maxProd; maxRhsSymbols: CARDINAL = NPGSTypes.maxRhsSymbols; maxRule: CARDINAL = NPGSTypes.maxRule; pssLim: CARDINAL = NPGSTypes.pssLim; rhsLim: CARDINAL = NPGSTypes.rhsLim; symTabSize: CARDINAL = NPGSTypes.symTabSize; tokenSize: CARDINAL = NPGSTypes.tokenSize; wordsForToken: CARDINAL = (NPGSTypes.tokenSize+cpw-1)/cpw; query: CHAR = '?; -- marker character in NPGSformat <> maxStateNum: CARDINAL = 400; stateExt: CARDINAL = 100; maxTabEntries: CARDINAL = 7000; tabExt: CARDINAL = 1000; maxContexts: CARDINAL = 960; <> defaultMarker: CARDINAL = 0; <> sourceVersion: VAR TimeStamp.Stamp; sourceName: VAR Rope.ROPE; <> warningsLogged: VAR BOOL; eofMark: 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 NPGSTypes.Options OF BOOL; symTab: VAR NPGSTypes.SymTab; symInfo: VAR NPGSTypes.SymInfo; aliases: VAR NPGSTypes.Aliases; tokenInfo: VAR NPGSTypes.TokenInfo; prodInfo: VAR NPGSTypes.ProdInfo; rhsChar: VAR NPGSTypes.RhsChar; <> sLim, tEntries, ntEntries: VAR CARDINAL; <> bitstrSize: VAR CARDINAL; <> <> <<>> MakeSymTab: PROC[length: CARDINAL] RETURNS[new: NPGSTypes.SymTab]; MakeSymInfo: PROC[length: CARDINAL] RETURNS[new: NPGSTypes.SymInfo]; MakeAliases: PROC[length: CARDINAL] RETURNS[new: NPGSTypes.Aliases]; MakeTokenInfo: PROC[length: CARDINAL] RETURNS[new: NPGSTypes.TokenInfo]; MakeProdInfo: PROC[length: CARDINAL] RETURNS[new: NPGSTypes.ProdInfo]; MakeRhsChar: PROC[length: CARDINAL] RETURNS[new: NPGSTypes.RhsChar]; MakeStateInfo: PROC[length: CARDINAL] RETURNS[new: NPGSTypes.StateInfo]; MakeTable: PROC[length: CARDINAL] RETURNS[new: NPGSTypes.Table]; MakeBackChain: PROC[length: CARDINAL] RETURNS[new: NPGSTypes.BackChain]; MakeStack: PROC[length: CARDINAL] RETURNS[new: NPGSTypes.Stack]; MakeBitsInfo: PROC[length: CARDINAL] RETURNS[new: NPGSTypes.BitsInfo]; MakeBitString: PROC[length, width: CARDINAL] RETURNS[new: NPGSTypes.BitString]; MakeAttrVec: PROC[length: CARDINAL] RETURNS[new: NPGSTypes.AttrVec]; MakeHashTab: PROC[length: CARDINAL] RETURNS[new: NPGSTypes.HashTab]; MakeTab: PROC[length: CARDINAL] RETURNS[new: NPGSTypes.Tab]; MakeColumn: PROC[length: CARDINAL] RETURNS[new: NPGSTypes.Column]; MakeStateData: PROC[length: CARDINAL] RETURNS[new: NPGSTypes.StateData]; MakeNTDefaults: PROC[length: CARDINAL] RETURNS[new: NPGSTypes.NTDefaults]; MakeRenumber: PROC[length: CARDINAL] RETURNS[new: NPGSTypes.Renumber]; MakeVocabIndex: PROC[length: CARDINAL] RETURNS[new: NPGSTypes.VocabIndex]; MakeSInfo: PROC[length: CARDINAL] RETURNS[new: NPGSTypes.SInfo]; MakePInfo: PROC[length: CARDINAL] RETURNS[new: NPGSTypes.PInfo]; MakeTokenSeq: PROC [length: CARDINAL] RETURNS [new: NPGSTypes.TokensUsed]; MakeErrSeq: PROC [length: CARDINAL] RETURNS [new: NPGSTypes.ErrorMsg]; <<>> ExpandSymTab: PROC[old: NPGSTypes.SymTab, ext: CARDINAL] RETURNS[new: NPGSTypes.SymTab]; ExpandSymInfo: PROC[old: NPGSTypes.SymInfo, ext: CARDINAL] RETURNS[new: NPGSTypes.SymInfo]; ExpandAliases: PROC[old: NPGSTypes.Aliases, ext: CARDINAL] RETURNS[new: NPGSTypes.Aliases]; ExpandProdInfo: PROC[old: NPGSTypes.ProdInfo, ext: CARDINAL] RETURNS[new: NPGSTypes.ProdInfo]; ExpandRhsChar: PROC[old: NPGSTypes.RhsChar, ext: CARDINAL] RETURNS[new: NPGSTypes.RhsChar]; ExpandStateInfo: PROC[old: NPGSTypes.StateInfo, ext: CARDINAL] RETURNS[new: NPGSTypes.StateInfo]; ExpandStack: PROC[old: NPGSTypes.Stack, ext: CARDINAL] RETURNS[new: NPGSTypes.Stack]; ExpandBitsInfo: PROC[old: NPGSTypes.BitsInfo, ext: CARDINAL] RETURNS[new: NPGSTypes.BitsInfo]; ExpandBitString: PROC[old: NPGSTypes.BitString, ext: CARDINAL] RETURNS[new: NPGSTypes.BitString]; ExpandSInfo: PROC[old: NPGSTypes.SInfo, ext: CARDINAL] RETURNS[new: NPGSTypes.SInfo]; ExpandPInfo: PROC[old: NPGSTypes.PInfo, ext: CARDINAL] RETURNS[new: NPGSTypes.PInfo]; <<>> <> seterrstream: PROC; setoutstream: PROC[dotstring: Rope.ROPE]; resetoutstream: PROC; closeoutstream: PROC; cleanupstreams: PROC; inchar: PROC RETURNS[c: CHAR, end: BOOL]; getindex: PROC RETURNS[CARDINAL]; setindex: PROC[index: CARDINAL]; outchar: PROC[c: CHAR, n: INTEGER]; outeol: PROC[n: INTEGER]; outnum: PROC[val: INTEGER, cols: NAT, signChar: CHAR_'-]; outstring: PROC[string: Rope.ROPE]; outtab: PROC; outtime: PROC; openwordstream: PROC[scratch: BOOL _ TRUE]; closewordstream: PROC; inword: PROC RETURNS[CARDINAL]; outword: PROC[n: CARDINAL]; sourceStream: IO.STREAM; errStream: IO.STREAM; tabStream: IO.STREAM; defsRoot: Rope.ROPE; implRoot: Rope.ROPE; typeName: Rope.ROPE; modName: Rope.ROPE; <> BitsPtr: PRIVATE TYPE ~ LONG POINTER TO RawBits; RawBits: PRIVATE TYPE = RECORD [PACKED SEQUENCE COMPUTED CARDINAL OF BOOL]; FindBit: PROC [source: NPGSTypes.BitString, index, bit: CARDINAL] RETURNS [BOOL] ~ TRUSTED INLINE { RETURN[LOOPHOLE[@source[index*source.width], BitsPtr][bit]]; }; InsertBit: PROC [sink: NPGSTypes.BitString, index, bit: CARDINAL] ~ TRUSTED INLINE { LOOPHOLE[@sink[index*sink.width], BitsPtr][bit] _ TRUE; }; <<>> orCount: VAR CARDINAL; OrBits: PROC [source: NPGSTypes.BitString, sourceI: CARDINAL, sink: NPGSTypes.BitString, sinkI: CARDINAL]; <<>> <> NPGSFail: ERROR; <> OutToken: PROC [symbol: CARDINAL] RETURNS [CARDINAL]; CheckOut: PROC; <> LALRGen: PROC [cusp: BOOL] RETURNS[BOOL]; <> TabGen: PROC [cedar: BOOL, cusp: BOOL] RETURNS[BOOL]; OutModule: PROC [cedar: BOOL, cusp: BOOL]; <> Format: PROC RETURNS [table, type, export: Rope.ROPE]; PrintGrammar: PROC; <> CuspPreSetPriorityTokenArray: PROC [hashChain: NPGSTypes.HashChain]; CuspPreClearTokensUsedArray: PROC; CuspPreSetNextTokenUsed: PROC [token: CARDINAL]; CuspPreSetHeaderUsed: PROC [token: CARDINAL]; CuspPreSetNextErrorMsgElement: PROC [state: CARDINAL]; CuspPreRenumber: PROC [lastntstate: CARDINAL, renumber: NPGSTypes.Renumber]; CuspPreClearErrorMsgArray: PROC; CuspPreGetErrorMsg: PROC [i: CARDINAL] RETURNS [NPGSTypes.ErrorType]; }.