-- file ParseInterface.mesa -- created by PGS from xx.mesa, 17-Jan-83 12:49 ParseInterface: DEFINITIONS = { Symbol: TYPE = [0..255]; TSymbol: TYPE = Symbol [0.. 78]; NTSymbol: TYPE = Symbol [0.. 62]; -- token indices for the scanner and parser tSTRING: TSymbol = 4; tNAME: TSymbol = 3; tICON: TSymbol = 2; tSEMICOLON: TSymbol = 71; tDIV: TSymbol = 36; tDIVASG: TSymbol = 41; DefaultMarker: TSymbol = FIRST[TSymbol]; EndMarker: TSymbol = LAST[TSymbol]; HashIndex: TYPE = [0..117]; VIndex: TYPE = [0..231]; VocabHashEntry: TYPE = MACHINE DEPENDENT RECORD [ symbol: [0..377B], -- symbol index (TSymbol) link: [0..377B]]; -- link to next entry (HashIndex) State: TYPE = [0..219]; NTState: TYPE = State [0..101]; TIndex: TYPE = [0..754]; NTIndex: TYPE = [0..162]; Production: TYPE = [0..190]; 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: ScanTable, hashTab: HashTable, vocabIndex: IndexTable, vocabBody: Vocabulary], parseTable: RECORD[ prodData: ProdData, nStart: NStarts, nLength: NLengths, nSymbol: NSymbols, nAction: NActions, ntDefaults: NTDefaults, tStart: TStarts, tLength: TLengths, tSymbol: TSymbols, tAction: TActions]]; TableRef: TYPE = LONG 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; }.