-- 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;

  }.