-- NPGSParseTableImpl.mesa
  -- an NPGS production from NPGSScan.mesa, May 24, 1990 1:52:23 pm PDT.

DIRECTORY NPGSParseTable;

NPGSParseTableImpl: CEDAR PROGRAM
  EXPORTS NPGSParseTable
  = { OPEN NPGSParseTable;

InitScanTable: PUBLIC PROC RETURNS [ScanTableRef] = {
  tab: ScanTableRef ← NEW[ScanTable ← ALL[0]];
    -- 94 entries
  tab[77C] ← 3;
  tab[174C] ← 4;
  RETURN [tab];
  };

InitHashTable: PUBLIC PROC RETURNS [HashTableRef] = {
  null: VocabHashEntry = [0, 0];
  tab: HashTableRef ← NEW[HashTable ← ALL[null]];
    -- 30 entries
  tab[4] ← [5, 0];
  tab[11] ← [1, 0];
  tab[15] ← [2, 0];
  tab[17] ← [18, 0];
  tab[18] ← [17, 0];
  tab[19] ← [16, 0];
  tab[20] ← [15, 18];
  tab[21] ← [14, 20];
  tab[22] ← [6, 29];
  tab[23] ← [8, 0];
  tab[24] ← [9, 0];
  tab[25] ← [10, 0];
  tab[26] ← [13, 21];
  tab[27] ← [12, 26];
  tab[28] ← [11, 19];
  tab[29] ← [7, 27];
  RETURN [tab];
  };

InitIndexTable: PUBLIC PROC RETURNS [IndexTableRef] = {
  tab: IndexTableRef ← NEW[IndexTable ← [
    -- 20 entries
    0, 6, 9, 10, 11, 14, 15, 23, 31, 39,
    -- 10
    47, 54, 61, 68, 77, 88, 95, 100, 104, 107]];
  RETURN [tab];
  };

InitVocabulary: PUBLIC PROC RETURNS [VocabularyRef] = {
  i: CARDINAL ← 0;
  appText: PROC [r: REF TEXT] = {
      FOR k: NAT IN [0..r.length) DO tab[i+k] ← r[k]; ENDLOOP;
      i ← i + r.length;
      };
  tab: VocabularyRef ← NEW[Vocabulary[107]];
  -- 107 chars
  -- 0
  appText["symbolnum?|::=C||TABLE1||TABLE2||TABLE3||TABLE4||I"];
  -- 50
  appText["NPUT||CHAIN||LISTS||PRINTLR||PRINTLALR||FIRST||IDS"];
  -- 100
  appText["GOALeof"];
  tab.length ← i;
  RETURN [tab];
  };

InitProdData: PUBLIC PROC RETURNS [ProdDataRef] = {
  i: CARDINAL ← 1;
  lag: ProductionInfo ← [0, 0];
  dup: PROC = {tab[i] ← lag; i ← i + 1};
  appR: PROC [r: CARDINAL] = {lag.rule ← r; tab[i] ← lag; i ← i + 1};
  appL: PROC [lhs: CARDINAL] = {lag.lhs ← lhs; tab[i] ← lag; i ← i + 1};
  appRL: PROC [r, lhs: CARDINAL] = {tab[i] ← lag ← [r, lhs]; i ← i + 1};
  tab: ProdDataRef ← NEW[ProdData ← ALL[lag]];
    -- 38 entries
  appL[2]; appRL[1, 3]; dup[]; appRL[2, 5];
  -- 5
  appR[28]; appRL[3, 9]; appR[4]; appR[5]; appR[6];
  -- 10
  appR[7]; appR[8]; appR[9]; appRL[10, 6]; appR[11];
  -- 15
  appL[7]; appR[12]; appRL[13, 8]; appR[14]; appRL[15, 10];
  -- 20
  appR[28]; dup[]; appRL[16, 11]; appR[17]; appR[18];
  -- 25
  appR[19]; appR[20]; appR[21]; appR[22]; appRL[23, 12];
  -- 30
  appR[24]; dup[]; appR[25]; appR[26]; appR[27];
  -- 35
  appRL[28, 4]; dup[]; appL[13];  RETURN [tab];
  };

InitNStarts: PUBLIC PROC RETURNS [NStartsRef] = {
  tab: NStartsRef ← NEW[NStarts ← [
    -- 7 entries
    0, 0, 3, 0, 2, 1, 0]];
  RETURN [tab];
  };

InitNLengths: PUBLIC PROC RETURNS [NLengthsRef] = {
  tab: NLengthsRef ← NEW[NLengths ← [
    -- 7 entries
    0, 0, 1, 1, 1, 1, 1]];
  RETURN [tab];
  };

InitNSymbols: PUBLIC PROC RETURNS [NSymbolsRef] = {
  tab: NSymbolsRef ← NEW[NSymbols ← [
    -- 4 entries
    12, 11, 10, 10]];
  RETURN [tab];
  };

InitNActions: PUBLIC PROC RETURNS [NActionsRef] = {
  i: CARDINAL ← 0;
  dup: PROC = {tab[i] ← tab[i-1]; i ← i + 1};
  app0: PROC [transition: CARDINAL] = {
      tab[i] ← [[FALSE, 0], transition];
      i ← i + 1;
      };
  app1: PROC [pLength: CARDINAL, transition: CARDINAL] = {
      tab[i] ← [[FALSE, pLength], transition];
      i ← i + 1;
      };
  app1t: PROC [transition: CARDINAL] = {
      tab[i] ← [[FALSE, 1], transition];
      i ← i + 1;
      };
  app2: PROC [pLength: CARDINAL, transition: CARDINAL] = {
      tab[i] ← [[TRUE, pLength], transition];
      i ← i + 1;
      };
  null: ActionEntry ← [[FALSE, 0], 0];
  tab: NActionsRef ← NEW[NActions ← ALL[null]];
    -- 4 entries

  -- 0
  app0[17];  app0[3];  app0[21];  app0[25];
  RETURN [tab];
  };

InitNTDefaults: PUBLIC PROC RETURNS [NTDefaultsRef] = {
  i: CARDINAL ← 2;
  dup: PROC = {tab[i] ← tab[i-1]; i ← i + 1};
  app0: PROC [transition: CARDINAL] = {
      tab[i] ← [[FALSE, 0], transition];
      i ← i + 1;
      };
  app1: PROC [pLength: CARDINAL, transition: CARDINAL] = {
      tab[i] ← [[FALSE, pLength], transition];
      i ← i + 1;
      };
  app1t: PROC [transition: CARDINAL] = {
      tab[i] ← [[FALSE, 1], transition];
      i ← i + 1;
      };
  app2: PROC [pLength: CARDINAL, transition: CARDINAL] = {
      tab[i] ← [[TRUE, pLength], transition];
      i ← i + 1;
      };
  null: ActionEntry ← [[FALSE, 0], 0];
  tab: NTDefaultsRef ← NEW[NTDefaults ← ALL[null]];
    -- 14 entries

  i ← i + 1;  app0[19];  app1[3, 1];
  app0[13];  app0[4];  app0[2];  app0[24];  app1[2, 5];
  app0[9];  app0[6];  app0[11];  app0[5];
  RETURN [tab];
  };

InitTStarts: PUBLIC PROC RETURNS [TStartsRef] = {
  tab: TStartsRef ← NEW[TStarts ← [
    -- 27 entries
    0, 0, 53, 47, 35, 31, 24, 19, 22, 23,
    -- 10
    16, 30, 15, 7, 39, 40, 42, 44, 46, 2,
    -- 20
    1, 58, 59, 60, 61, 63, 64]];
  RETURN [tab];
  };

InitTLengths: PUBLIC PROC RETURNS [TLengthsRef] = {
  tab: TLengthsRef ← NEW[TLengths ← [
    -- 27 entries
    0, 1, 5, 6, 4, 4, 6, 3, 1, 1,
    -- 10
    3, 1, 1, 8, 1, 2, 2, 2, 1, 5,
    -- 20
    1, 1, 1, 1, 2, 1, 1]];
  RETURN [tab];
  };

InitTSymbols: PUBLIC PROC RETURNS [TSymbolsRef] = {
  tab: TSymbolsRef ← NEW[TSymbols ← [
    -- 65 entries
    3, 0, 1, 2, 3, 18, 0, 7, 11, 12,
    -- 10
    13, 14, 15, 16, 17, 5, 2, 6, 0, 2,
    -- 20
    6, 0, 5, 6, 1, 2, 3, 4, 6, 0,
    -- 30
    1, 1, 2, 3, 0, 2, 3, 8, 0, 1,
    -- 40
    2, 0, 5, 0, 1, 4, 5, 1, 2, 3,
    -- 50
    4, 19, 0, 2, 3, 9, 10, 0, 1, 1,
    -- 60
    5, 1, 10, 1, 1]];
  RETURN [tab];
  };

InitTActions: PUBLIC PROC RETURNS [TActionsRef] = {
  i: CARDINAL ← 0;
  dup: PROC = {tab[i] ← tab[i-1]; i ← i + 1};
  app0: PROC [transition: CARDINAL] = {
      tab[i] ← [[FALSE, 0], transition];
      i ← i + 1;
      };
  app1: PROC [pLength: CARDINAL, transition: CARDINAL] = {
      tab[i] ← [[FALSE, pLength], transition];
      i ← i + 1;
      };
  app1t: PROC [transition: CARDINAL] = {
      tab[i] ← [[FALSE, 1], transition];
      i ← i + 1;
      };
  app2: PROC [pLength: CARDINAL, transition: CARDINAL] = {
      tab[i] ← [[TRUE, pLength], transition];
      i ← i + 1;
      };
  null: ActionEntry ← [[FALSE, 0], 0];
  tab: TActionsRef ← NEW[TActions ← ALL[null]];
    -- 65 entries

  -- 0
  app0[20];  app2[0, 4];  app0[12];  app0[10];  app0[7];
  app0[8];  app2[0, 19];  app1t[13];  app1t[6];  app1t[7];
  app1t[8];  app1t[9];  app1t[10];  app1t[11];  app1t[12];
  app1[2, 22];  app1[2, 30];  app2[1, 20];  app2[1, 29];  app1[2, 31];
  -- 20
  app2[1, 21];  app2[1, 34];  app0[14];  app0[15];  app0[16];
  app0[10];  app0[7];  app1[2, 26];  app2[0, 19];  app2[3, 1];
  app0[18];  app0[12];  app0[10];  app0[7];  app2[0, 19];
  app1t[20];  app1t[21];  app1t[16];  app2[0, 19];  app0[22];
  -- 40
  app1[3, 33];  app2[2, 32];  app1[3, 24];  app2[2, 28];  app0[23];
  app1[3, 27];  app1[3, 23];  app0[16];  app0[10];  app0[7];
  app1[2, 26];  app2[2, 36];  app2[0, 19];  app1t[20];  app1t[21];
  app1t[17];  app1[4, 2];  app2[0, 19];  app1[3, 14];  app1[4, 37];
  -- 60
  app1[4, 25];  app0[26];  app1[5, 3];  app1[3, 15];  app1[3, 18];
  RETURN [tab];
  };

}.