<> <> <> DIRECTORY PrincOps: TYPE USING [zLI4, zRFSL, zSHIFT, zWFSL]; PGSTypes: DEFINITIONS = { <> <> LongDes: TYPE = LONG DESCRIPTOR FOR ARRAY OF UNSPECIFIED; LongPointer: TYPE = LONG POINTER; <> Bit: PRIVATE TYPE = [0..1]; GetBit: PROC [word: LongPointer, bit: CARDINAL] RETURNS [Bit] = MACHINE CODE {PrincOps.zLI4; PrincOps.zSHIFT; PrincOps.zRFSL}; SetBit: PROC [v: Bit, word: LongPointer, bit: CARDINAL] = MACHINE CODE {PrincOps.zLI4; PrincOps.zSHIFT; PrincOps.zWFSL}; <> <> alternateLim: CARDINAL = 31; maxProd: CARDINAL = 500; maxRhsSymbols: CARDINAL = 2*maxProd; -- empirical relation maxRule: CARDINAL = 2047; --this is the current ProdInfo/PGSTab limit pssLim: CARDINAL = 1023; -- 10 bit field in itemrec to hold production, symbol <> rhsLim: CARDINAL = 15; --this is the current PGSTab limit, change the grammar? symTabSize: CARDINAL = 350; --symbol table size tokenSize: CARDINAL = 14; SymTab: TYPE = LONG DESCRIPTOR FOR PACKED ARRAY OF CHAR; <<[0..(symTabSize+1)*tokensize)>> SymTabEntry: TYPE = RECORD [ link: [0..symTabSize], length: [0..tokenSize], used: BOOL]; SymInfo: TYPE = LONG DESCRIPTOR FOR ARRAY OF SymTabEntry; <<[0..symtabsize]>> AliasEntry: TYPE = RECORD [terminal, alias: CARDINAL]; Aliases: TYPE = LONG DESCRIPTOR FOR ARRAY OF AliasEntry; -- [0..63] TokenEntry: TYPE = RECORD [ count: [0..alternateLim], empty: BOOL, index: [0..maxProd]]; TokenInfo: TYPE = LONG DESCRIPTOR FOR ARRAY OF TokenEntry; <<(eofile..totaltokens]>> ProdEntry: TYPE = RECORD [ count: [0..rhsLim], rule: [0..maxRule], chain: BOOL, lhs: [0..symTabSize], index: [0..maxRhsSymbols]]; ProdInfo: TYPE = LONG DESCRIPTOR FOR ARRAY OF ProdEntry; <<[0..maxProd]>> RhsChar: TYPE = LONG DESCRIPTOR FOR ARRAY OF CARDINAL; <<[0..maxRhsSymbols]>> Options: TYPE = {echo, chain, lists, printLR, printLALR, first, ids}; <> StateInfoRec: TYPE = RECORD [link, nucleus, entries: CARDINAL]; StateInfo: TYPE = LONG DESCRIPTOR FOR ARRAY OF StateInfoRec; --[0,maxstatenum+1]; ItemRec: TYPE = RECORD [tag: [0..3], jf: [0..15], pss: [0..pssLim]]; Table: TYPE = LONG DESCRIPTOR FOR ARRAY OF ItemRec; --[0..maxtabentries] <> < pss is a nonterminal symbol, such an entry is followed by an entry:>> < pss is a next state number>> < pss is production number, scanreduce, jf=n[p]>> < pss is production number, reduce, jf=n[p]>> <> ChainRec: TYPE = RECORD [state, link: CARDINAL]; BackChain: TYPE= LONG DESCRIPTOR FOR ARRAY OF ChainRec; --[0..totalshifts] initially Stack: TYPE = LONG DESCRIPTOR FOR ARRAY OF CARDINAL; --[0..30) initially ChainStack: TYPE = LONG DESCRIPTOR FOR ARRAY OF CARDINAL; --[0..90) initially ContextRec: TYPE = RECORD [state, status, link: CARDINAL, item: ItemRec]; BitsInfo: TYPE = LONG DESCRIPTOR FOR ARRAY OF ContextRec; --[0..maxcontexts) BitString: TYPE = LONG DESCRIPTOR FOR ARRAY OF UNSPECIFIED; --[0..maxcontexts) FirstBits: TYPE = LONG DESCRIPTOR FOR ARRAY OF UNSPECIFIED; --[eofile+1..totaltokens] <> AttrVec: TYPE = LONG DESCRIPTOR FOR ARRAY OF CARDINAL; --[eofile+1..totaltokens] HashHeads: TYPE = ARRAY [0..60] OF CARDINAL; HashHeadsRef: TYPE = LONG POINTER TO HashHeads; <> HashTabRec: TYPE = MACHINE DEPENDENT RECORD [symPtr: [0..255], link: [0..255]]; HashTab: TYPE = LONG DESCRIPTOR FOR ARRAY OF HashTabRec; --[0..hashval] TabRec: TYPE = RECORD [symbol: CARDINAL, item: ItemRec]; TTab: TYPE = LONG DESCRIPTOR FOR ARRAY OF TabRec; --[0..tentries-1]; NTab: TYPE = LONG DESCRIPTOR FOR ARRAY OF TabRec; --[0..ntentries-1]; ColumnRec: TYPE = RECORD [link, count: CARDINAL, item: ItemRec]; Column: TYPE = LONG DESCRIPTOR FOR ARRAY OF ColumnRec; --[0..ntentries]; StateDataRec: TYPE = RECORD [tIndex, ntIndex: CARDINAL, tLink, ntLink: INTEGER]; StateData: TYPE = LONG DESCRIPTOR FOR ARRAY OF StateDataRec; --[0..slim-1]; NTDefaultRec: TYPE = RECORD [count: CARDINAL, item: ItemRec]; NTDefaults: TYPE = LONG DESCRIPTOR FOR ARRAY OF NTDefaultRec; <<[0..totaltokens-eofile+1];>> Renumber: TYPE = LONG DESCRIPTOR FOR ARRAY OF CARDINAL; --[0..slim-1] VocabIndex: TYPE = LONG DESCRIPTOR FOR ARRAY OF CARDINAL; --[0..eofile-1] <> SInfoRec: TYPE = RECORD [symPtr, link, lhsHead: CARDINAL]; SInfo: TYPE = LONG DESCRIPTOR FOR ARRAY OF SInfoRec; --[0..symTabSize+1]; PInfoRec: TYPE = RECORD [rule: [0..77777B], chain: BOOL, link, rhsPtr: CARDINAL]; PInfo: TYPE = LONG DESCRIPTOR FOR ARRAY OF PInfoRec; --[0..maxProd+1]; }.