parseSS calls machine/8 using:
machine([0],ZLSS,[],[],accept,[],SS,_)The parameters are:
| Index | Parameter | Input/Output | Value | Description |
|---|---|---|---|---|
| 1 | Control Stack | Input | [0] |
List encodes stack. Begin at state 0. |
| 2 | Input | Input | Output of parsePF |
List of (zero-level) constituents. |
| 3 | Structure Stack | Input | [] |
List encodes stack. Each element is a constituent. |
| 4 | Environment Stack | Input | [] |
List encodes stack. Used for local storage during LR parsing. |
| 5 | Control Stack | Output | accept |
Not a stack anymore. Just the end state. |
| 6 | Input | Output | [] |
Input consumed. |
| 7 | Structure Stack | Output | Parse | Not a stack anymore. Just a single constituent. |
| 8 | Environment Stack | Output | _ |
Don't care. |
Definition of machine/8:
machine(accept, [] ,[SS],_, accept,[],SS, _ ) :- !.
machine([State|CS],[I|Is],SS, ES,CS2, I2,SS2,ES2) :-
ss0Cat(I,C),
glrMachineHook, % platform-specific
action(State,C,[State|CS],[I|Is],SS,ES,CS1,I1,SS1,ES1,_, _Action),
machine(CS1,I1,SS1,ES1,CS2,I2,SS2,ES2).
% need to deal with the endmarker $ as a special category
ss0Cat(I,C) :- cat(I,C), !.
ss0Cat('$','$').
Non-determinism in the machine is expressed in the predicate
action/12.
References: Constituent Structure