-- file ParseTable.mesa -- created by PGS from sakurapass1t.mesa, 22-Feb-82 15:23 ParseTable: DEFINITIONS = { Symbol: TYPE = [0..255]; TSymbol: TYPE = Symbol [0..163]; NTSymbol: TYPE = Symbol [0..153]; -- token indices for the scanner and parser tokenID: TSymbol = 1; tokenNUM: TSymbol = 2; tokenLNUM: TSymbol = 3; tokenFLNUM: TSymbol = 4; tokenSTR: TSymbol = 5; tokenLSTR: TSymbol = 6; tokenCHAR: TSymbol = 7; tokenATOM: TSymbol = 8; tokenMINUS: TSymbol = 23; tokenDOT: TSymbol = 27; tokenDOTS: TSymbol = 12; tokenEQUAL: TSymbol = 15; tokenARROW: TSymbol = 13; tokenLESS: TSymbol = 17; tokenLE: TSymbol = 19; tokenGREATER: TSymbol = 18; tokenGE: TSymbol = 20; InitialSymbol: TSymbol = 27; tokenRARROW: TSymbol = 33; tokenDIV: TSymbol = 25; tokenPAR: TSymbol = 31; tokenBAR: TSymbol = 30; tokenNDET: TSymbol = 32; DefaultMarker: TSymbol = FIRST[TSymbol]; EndMarker: TSymbol = LAST[TSymbol]; HashIndex: TYPE = [0..245]; VIndex: TYPE = [0..751]; VocabHashEntry: TYPE = MACHINE DEPENDENT RECORD [ symbol: [0..377b], -- symbol index (TSymbol) link: [0..377b]]; -- link to next entry (HashIndex) State: TYPE = [0..438]; NTState: TYPE = State [0..214]; TIndex: TYPE = [0..1504]; NTIndex: TYPE = [0..320]; Production: TYPE = [0..428]; ActionTag: TYPE = MACHINE DEPENDENT RECORD [ reduce: BOOLEAN, -- TRUE iff reduce entry pLength: [0..17b]]; -- number of symbols in production rhs ActionEntry: TYPE = MACHINE DEPENDENT RECORD [ tag: ActionTag, -- [FALSE,0] if a shift entry transition: [0..3777b]]; -- production number / next state ProductionInfo: TYPE = MACHINE DEPENDENT RECORD [ rule: [0..377b], -- reduction rule lhs: Symbol]; -- production lhs symbol (NTSymbol) ScanTable: TYPE = ARRAY CHARACTER [40c..177c] OF TSymbol; HashTable: TYPE = ARRAY HashIndex OF VocabHashEntry; IndexTable: TYPE = ARRAY TSymbol OF CARDINAL; Vocabulary: TYPE = RECORD [ length, maxlength: CARDINAL, text: PACKED ARRAY VIndex OF CHARACTER]; ProdData: TYPE = ARRAY Production OF ProductionInfo; NStarts: TYPE = ARRAY NTState OF NTIndex; NLengths: TYPE = ARRAY NTState OF CARDINAL; NSymbols: TYPE = ARRAY NTIndex OF NTSymbol; NActions: TYPE = ARRAY NTIndex OF ActionEntry; NTDefaults: TYPE = ARRAY NTSymbol OF ActionEntry; TStarts: TYPE = ARRAY State OF TIndex; TLengths: TYPE = ARRAY State OF CARDINAL; TSymbols: TYPE = ARRAY TIndex OF TSymbol; TActions: TYPE = ARRAY TIndex OF ActionEntry; InitialState: State = 1; FinalState: State = 0; Table: TYPE = MACHINE DEPENDENT RECORD [ scanTable: RECORD [ scanTab: TableRef RELATIVE POINTER TO ScanTable, hashTab: TableRef RELATIVE POINTER TO HashTable, vocabIndex: TableRef RELATIVE POINTER TO IndexTable, vocabBody: TableRef RELATIVE POINTER TO Vocabulary], parseTable: RECORD [ prodData: TableRef RELATIVE POINTER TO ProdData, nStart: TableRef RELATIVE POINTER TO NStarts, nLength: TableRef RELATIVE POINTER TO NLengths, nSymbol: TableRef RELATIVE POINTER TO NSymbols, nAction: TableRef RELATIVE POINTER TO NActions, ntDefaults: TableRef RELATIVE POINTER TO NTDefaults, tStart: TableRef RELATIVE POINTER TO TStarts, tLength: TableRef RELATIVE POINTER TO TLengths, tSymbol: TableRef RELATIVE POINTER TO TSymbols, tAction: TableRef RELATIVE POINTER TO TActions]]; TableRef: TYPE = LONG BASE POINTER TO Table; ScanTableRef: TYPE = LONG POINTER TO ScanTable; HashTableRef: TYPE = LONG POINTER TO HashTable; IndexTableRef: TYPE = LONG POINTER TO IndexTable; VocabularyRef: TYPE = LONG POINTER TO Vocabulary; ProdDataRef: TYPE = LONG POINTER TO ProdData; NStartsRef: TYPE = LONG POINTER TO NStarts; NLengthsRef: TYPE = LONG POINTER TO NLengths; NSymbolsRef: TYPE = LONG POINTER TO NSymbols; NActionsRef: TYPE = LONG POINTER TO NActions; NTDefaultsRef: TYPE = LONG POINTER TO NTDefaults; TStartsRef: TYPE = LONG POINTER TO TStarts; TLengthsRef: TYPE = LONG POINTER TO TLengths; TSymbolsRef: TYPE = LONG POINTER TO TSymbols; TActionsRef: TYPE = LONG POINTER TO TActions; }.