-- 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];
};
}.