-- file MTParseTable.mesa -- created by PGS from MTEvalImpl.mesa, April 2, 1987 5:42:11 pm PST ParseTable: DEFINITIONS = { Symbol: TYPE = [0..255]; TSymbol: TYPE = Symbol[0.. 19]; NTSymbol: TYPE = Symbol[0.. 19]; -- token indices for the scanner and parser nameDummy: TSymbol = 1; atomTok: TSymbol = 2; qStringTok: TSymbol = 3; dLitTok: TSymbol = 4; dotTok: TSymbol = 5; commaTok: TSymbol = 6; colonTok: TSymbol = 7; semiTok: TSymbol = 8; atSignTok: TSymbol = 9; lBracketTok: TSymbol = 10; rBracketTok: TSymbol = 11; errorTok: TSymbol = 13; EOLTok: TSymbol = 12; dateDummy: TSymbol = 14; ampmTok: TSymbol = 15; dayTok: TSymbol = 16; monthTok: TSymbol = 17; zoneTok: TSymbol = 18; defaultMarker: TSymbol = TSymbol.FIRST; endMarker: TSymbol = TSymbol.LAST; HashIndex: TYPE = [0.. 29]; VIndex: TYPE = [0.. 80]; VocabHashEntry: TYPE = MACHINE DEPENDENT RECORD [ symbol(0: 0..7): TSymbol, -- symbol index link(0: 8..15): HashIndex]; -- link to next entry State: TYPE = [0.. 50]; NTState: TYPE = State[0.. 19]; TIndex: TYPE = [0.. 91]; NTIndex: TYPE = [0.. 21]; Production: TYPE = [0.. 48]; ActionTag: TYPE = MACHINE DEPENDENT RECORD [ reduce(0: 0..0): BOOL, -- TRUE iff reduce entry pLength(0: 1..4): [0..15]]; -- number of symbols in production rhs ActionEntry: TYPE = MACHINE DEPENDENT RECORD [ tag(0: 0..4): ActionTag, -- [FALSE,0] if a shift entry transition(0: 5..15): [0..2047]]; -- production number / next state ProductionInfo: TYPE = MACHINE DEPENDENT RECORD [ rule(0: 0..7): [0..256), -- reduction rule lhs(0: 8..15): NTSymbol]; -- production lhs symbol ScanTable: TYPE = ARRAY CHAR['\040..'\177] OF TSymbol; HashTable: TYPE = ARRAY HashIndex OF VocabHashEntry; IndexTable: TYPE = ARRAY TSymbol OF CARDINAL; Vocabulary: TYPE = MACHINE DEPENDENT RECORD [ length(0), maxlength(1): CARDINAL, text(2): PACKED ARRAY VIndex OF CHAR]; 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; }.