OneCasabaParserPrivate.mesa December 17, 1985 2:38:10 pm PST
Copyright Ó 1987 by Xerox Corporation. All rights reserved.
Sturgis, April 2, 1986 3:12:59 pm PST
Bill Jackson (bj) January 27, 1987 10:15:28 pm PST
DIRECTORY
IO USING [TokenKind],
OneCasabaParser USING [State],
Rope USING [ROPE];
OneCasabaParserPrivate: CEDAR DEFINITIONS ~ {
ParserTable: TYPE = REF ParserTableBody;
ParserTableBody: TYPE = RECORD [
unAnalyzedSymbols: SymbolCell ← NIL,
nSymbols: CARDINAL ← 0,
unAnalyzedTokens: TokenCell ← NIL,
nTokens: CARDINAL ← 0,
unAnalyzedActions: ActionCell ← NIL,
nActions: CARDINAL ← 0,
startState: OneCasabaParser.State ← 0,
symbolTable: SymbolTable ← NIL,
tokenTable: TokenTable ← NIL,
actionTable: ActionTable ← NIL
];
SymbolTable: TYPE = REF SymbolTableBody;
SymbolTableBody: TYPE = RECORD [
symbols: SEQUENCE nSlots: CARDINAL OF SymbolCell
];
SymbolCell: TYPE = REF SymbolCellBody;
SymbolCellBody: TYPE = RECORD [
name: Rope.ROPE,
code: CARDINAL,
next: SymbolCell
];
TokenTable: TYPE = REF TokenTableBody;
TokenTableBody: TYPE = RECORD [
idToken: TokenCell,
tokens: SEQUENCE nSlots: CARDINAL OF TokenCell
];
TokenCell: TYPE = REF TokenCellBody;
TokenCellBody: TYPE = RECORD [
name: Rope.ROPE,
symbolCode: CARDINAL,
kind: IO.TokenKind,
spelling: Rope.ROPE,
case: TokenCase,
next: TokenCell
];
TokenCase: TYPE = {unique, generic};
ActionTable: TYPE = REF ActionTableBody;
ActionTableBody: TYPE = RECORD [
actions: SEQUENCE nSlots: CARDINAL OF ActionCell
];
ActionCell: TYPE = REF ActionCellBody; -- not the most compact representation
ActionCellBody: TYPE = RECORD [
state: OneCasabaParser.State,
terminal: CARDINAL, -- symbol code
action: Action,
nextState: OneCasabaParser.State, -- for shifts
ruleNumber: CARDINAL, -- for reductions
leftSide: CARDINAL, -- symbol code for left side non terminal
ruleSize: CARDINAL, -- number of right side symbols
next: ActionCell
];
Action: TYPE = {shift, reduce, accept};
}...