<> <> <> <> <> <> 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]; <> < 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]; 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]; }.