PGSTypes: DEFINITIONS = { 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 = REF SymTabSeq; --[0..(symTabSize+1)*tokensize) SymTabSeq: TYPE = RECORD[PACKED SEQUENCE length: CARDINAL OF CHAR]; SymTabEntry: TYPE = RECORD[ link: [0..symTabSize], length: [0..tokenSize], used: BOOL]; nullSymTabEntry: SymTabEntry = [link: 0, length: 0, used: FALSE]; SymInfo: TYPE = REF SymInfoSeq; --[0..symtabsize] SymInfoSeq: TYPE = RECORD[SEQUENCE length: CARDINAL OF SymTabEntry]; AliasEntry: TYPE = RECORD[terminal, alias: CARDINAL]; nullAliasEntry: AliasEntry = [terminal: 0, alias: 0]; Aliases: TYPE = REF AliasesSeq; --[0..63] AliasesSeq: TYPE = RECORD[SEQUENCE length: CARDINAL OF AliasEntry]; TokenEntry: TYPE = RECORD[ count: [0..alternateLim], empty: BOOL, index: [0..maxProd]]; nullTokenEntry: TokenEntry = [count: 0, empty: FALSE, index: 0]; TokenInfo: TYPE = REF TokenInfoSeq; --(eofile..totaltokens] TokenInfoSeq: TYPE = RECORD[SEQUENCE length: CARDINAL OF TokenEntry]; ProdEntry: TYPE = RECORD[ count: [0..rhsLim], rule: [0..maxRule], chain: BOOL, lhs: [0..symTabSize], index: [0..maxRhsSymbols]]; nullProdEntry: ProdEntry = [count: 0, rule: 0, chain: FALSE, lhs: 0, index: 0]; ProdInfo: TYPE = REF ProdInfoSeq; --[0..maxProd] ProdInfoSeq: TYPE = RECORD[SEQUENCE length: CARDINAL OF ProdEntry]; Cardinals: TYPE = REF CardinalsSeq; CardinalsSeq: TYPE = RECORD[SEQUENCE length: CARDINAL OF CARDINAL]; RhsChar: TYPE = Cardinals; --[0..maxRhsSymbols] Options: TYPE = {echo, chain, lists, printLR, printLALR, first, ids}; StateInfoRec: TYPE = RECORD[link, nucleus, entries: CARDINAL]; nullStateInfoRec: StateInfoRec = [link: 0, nucleus: 0, entries: 0]; StateInfo: TYPE = REF StateInfoSeq; --[0,maxstatenum+1] StateInfoSeq: TYPE = RECORD[SEQUENCE length: CARDINAL OF StateInfoRec]; ItemRec: TYPE = RECORD[tag: [0..3], jf: [0..15], pss: [0..pssLim]]; nullItemRec: ItemRec = [tag: 0, jf: 0, pss: 0]; Table: TYPE = REF TableSeq; --[0..maxtabentries] TableSeq: TYPE = RECORD[SEQUENCE length: CARDINAL OF ItemRec]; ChainRec: TYPE = RECORD[state, link: CARDINAL]; nullChainRec: ChainRec = [state: 0, link: 0]; BackChain: TYPE = REF BackChainSeq; --[0..totalshifts] initially BackChainSeq: TYPE = RECORD[SEQUENCE length: CARDINAL OF ChainRec]; Stack: TYPE = Cardinals; --[0..30) initially ChainStack: TYPE = Stack; --[0..90) initially ContextRec: TYPE = RECORD[state, status, link: CARDINAL, item: ItemRec]; nullContextRec: ContextRec = [state: 0, status: 0, link: 0, item: nullItemRec]; BitsInfo: TYPE = REF BitsInfoSeq; --[0..maxcontexts) BitsInfoSeq: TYPE = RECORD[SEQUENCE length: CARDINAL OF ContextRec]; BitString: TYPE = REF BitStringSeq; --[0..maxcontexts) BitStringSeq: TYPE = RECORD[length, width: CARDINAL, seq: SEQUENCE size: CARDINAL OF WORD]; FirstBits: TYPE = BitString; --[eofile+1..totaltokens] AttrVec: TYPE = Cardinals; --[eofile+1..totaltokens] HashHeads: TYPE = ARRAY [0..60] OF CARDINAL; HashHeadsRef: TYPE = REF HashHeads; HashTabRec: TYPE = MACHINE DEPENDENT RECORD[symPtr: [0..255], link: [0..255]]; nullHashTabRec: HashTabRec = [symPtr: 0, link: 0]; HashTab: TYPE = REF HashTabSeq; --[0..hashval] HashTabSeq: TYPE = RECORD[SEQUENCE length: CARDINAL OF HashTabRec]; TabRec: TYPE = RECORD[symbol: CARDINAL, item: ItemRec]; nullTabRec: TabRec = [symbol: 0, item: nullItemRec]; Tab: TYPE = REF TabSeq; TabSeq: TYPE = RECORD[SEQUENCE length: CARDINAL OF TabRec]; TTab: TYPE = Tab; --[0..tentries-1]; NTab: TYPE = Tab; --[0..ntentries-1]; ColumnRec: TYPE = RECORD[link, count: CARDINAL, item: ItemRec]; nullColumnRec: ColumnRec = [link: 0, count: 0, item: nullItemRec]; Column: TYPE = REF ColumnSeq; --[0..ntentries]; ColumnSeq: TYPE = RECORD[SEQUENCE length: CARDINAL OF ColumnRec]; StateDataRec: TYPE = RECORD[tIndex, ntIndex: CARDINAL, tLink, ntLink: INTEGER]; nullStateDataRec: StateDataRec = [tIndex: 0, ntIndex: 0, tLink: 0, ntLink: 0]; StateData: TYPE = REF StateDataSeq; --[0..slim-1]; StateDataSeq: TYPE = RECORD[SEQUENCE length: CARDINAL OF StateDataRec]; NTDefaultRec: TYPE = RECORD[count: CARDINAL, item: ItemRec]; nullNTDefaultRec: NTDefaultRec = [count: 0, item: nullItemRec]; NTDefaults: TYPE = REF NTDefaultsSeq; --[0..totaltokens-eofile+1] NTDefaultsSeq: TYPE = RECORD[SEQUENCE length: CARDINAL OF NTDefaultRec]; Renumber: TYPE = Cardinals; --[0..slim-1] VocabIndex: TYPE = Cardinals; --[0..eofile-1] SInfoRec: TYPE = RECORD[symPtr, link, lhsHead: CARDINAL]; nullSInfoRec: SInfoRec = [symPtr: 0, link: 0, lhsHead: 0]; SInfo: TYPE = REF SInfoSeq; --[0..symTabSize+1]; SInfoSeq: TYPE = RECORD[SEQUENCE length: CARDINAL OF SInfoRec]; PInfoRec: TYPE = RECORD[rule: [0..77777B], chain: BOOL, link, rhsPtr: CARDINAL]; nullPInfoRec: PInfoRec = [rule: 0, chain: FALSE, link: 0, rhsPtr: 0]; PInfo: TYPE = REF PInfoSeq; --[0..maxProd+1]; PInfoSeq: TYPE = RECORD[SEQUENCE length: CARDINAL OF PInfoRec]; }. bPGSTypes.mesa Copyright c 1985 by Xerox Corporation. All rights reserved. Satterthwaite, October 16, 1985 5:27:53 pm PDT John Maxwell, August 8, 1983 11:15 am Doug Wyatt, March 21, 1984 10:19:55 am PST Russ Atkinson (RRA) March 19, 1985 9:55:29 am PST data structures and associated types data structtures using the following types are built by PGSScan or state numbers, PGSTab allows an 11 bit field types for LR(0) tables in PGSLALR after table is built, tag = 3 => pss is a nonterminal symbol, such an entry is followed by an entry: tag = 0 => pss is a next state number tag = 1 => pss is production number, scanreduce, jf=n[p] tag = 2 => pss is production number, reduce, jf=n[p] types for LALR(1) lookahead sets in PGSLALR types used internally by PGSLALR types used by PGSTab types used by PGSFormat (also uses SymTab, RhsChar, HashHeads, HashHeadsRef) Κ˜codešœ ™ Kšœ Οmœ1™KšœC˜CKšœ žœžœŸ˜7Kš œžœžœžœ žœžœ˜GK˜Kšœ žœžœ-˜CKšœ/˜/Kšœžœžœ Ÿ˜0š œ žœžœžœ žœžœ ˜>Kšœ™KšœN™NKšœ%™%Kšœ8™8Kšœ4™4K˜—Kšœ+™+K˜Kšœ žœžœžœ˜/Kšœ-˜-Kšœ žœžœŸ˜@Kš œžœžœžœ žœžœ ˜CK˜KšœžœŸ˜,Kšœ žœ Ÿ˜/K˜Kšœ žœžœžœ˜HKšœO˜OKšœ žœžœŸ˜4Kš œ žœžœžœ žœžœ ˜DKšœ žœžœŸ˜6Kšœžœžœžœžœžœžœžœ˜[Kšœ žœŸ˜6K˜Kšœ ™ K˜Kšœ žœŸ˜4Kš œ žœžœ žœžœ˜,Kšœžœžœ ˜#K˜Kšœ™K˜Kš œ žœžœž œžœ#˜NKšœ2˜2Kšœ žœžœ Ÿ˜.Kš œ žœžœžœ žœžœ ˜CK˜Kšœžœžœ žœ˜7Kšœ4˜4Kšœžœžœ˜Kš œžœžœžœ žœžœ ˜;KšœžœŸ˜$KšœžœŸ˜%K˜Kšœ žœžœžœ˜?KšœB˜BKšœžœžœ Ÿ˜/Kš œ žœžœžœ žœžœ ˜AK˜Kš œžœžœžœžœ˜OKšœN˜NKšœ žœžœŸ˜3Kš œžœžœžœ žœžœ˜GK˜Kšœžœžœžœ˜