


The standard library Lr_Parser api defines part of the yacc parser-generator suite.
The Lr_Parser api source code is in src/app/yacc/lib/base.api.
The above information is manually maintained and may contain errors.
api {
package stream : api {
Stream X;
streamify : (Void -> X) -> Stream(X );
cons : (X , Stream(X )) -> Stream(X );
get : Stream(X ) -> (X , Stream(X ));
};;
package lr_table : api {
Pairlist (X, Y) = EMPTY | PAIR (X , Y , Pairlist((X, Y) ));
State = STATE Int;
Terminal = TERM Int;
Nonterminal = NONTERM Int;
Action = ACCEPT | ERROR | REDUCE Int | SHIFT State;
Table ;
state_count : Table -> Int;
rule_count : Table -> Int;
describe_goto : Table -> State -> Pairlist((Nonterminal, State) );
action : Table -> (State , Terminal) -> Action;
goto : Table -> (State , Nonterminal) -> State;
initial_state : Table -> State;
describe_actions : Table
-> State -> (Pairlist((Terminal, Action) ) , Action);
exception GOTO (State , Nonterminal);
make_lr_table : {actions:Rw_Vector(((Pairlist((Terminal, Action) ) , Action)) ),
gotos:Rw_Vector(Pairlist((Nonterminal, State) ) ),
initial_state:State, rule_count:Int,
state_count:Int}
-> Table;
};;
package token : api {
package lr_table : api {
Pairlist (X, Y) = EMPTY | PAIR (X , Y , Pairlist((X, Y) ));
State = STATE Int;
Terminal = TERM Int;
Nonterminal = NONTERM Int;
Action = ACCEPT | ERROR | REDUCE Int | SHIFT State;
Table ;
state_count : Table -> Int;
rule_count : Table -> Int;
describe_goto : Table -> State -> Pairlist((Nonterminal, State) );
action : Table -> (State , Terminal) -> Action;
goto : Table -> (State , Nonterminal) -> State;
initial_state : Table -> State;
describe_actions : Table
-> State -> (Pairlist((Terminal, Action) ) , Action);
exception GOTO (State , Nonterminal);
make_lr_table : {actions:Rw_Vector(((Pairlist((Terminal, Action) ) , Action)) ),
gotos:Rw_Vector(Pairlist((Nonterminal, State) ) ),
initial_state:State, rule_count:Int,
state_count:Int}
-> Table;
};;
Token (X, Y)
= TOKEN (lr_table::Terminal , ((X , Y , Y)));
same_token : (Token((X, Y) ) , Token((X, Y) )) -> Bool;
};;
exception PARSE_ERROR;
parse : {arg:X,
error_recovery:{error:(String , Z , Z) -> Void,
errtermvalue:lr_table::Terminal -> Y,
is_keyword:lr_table::Terminal -> Bool,
no_shift:lr_table::Terminal -> Bool,
preferred_change:List(
((List(lr_table::Terminal ) , List(lr_table::Terminal )))
),
show_terminal:lr_table::Terminal -> String,
terms:List(lr_table::Terminal )},
lexer:stream::Stream(token::Token((Y, Z) ) ), lookahead:Int,
saction:(Int , Z , List(((lr_table::State , ((Y , Z , Z)))) )
, X)
-> (lr_table::Nonterminal , ((Y , Z , Z))
, List(((lr_table::State , ((Y , Z , Z)))) )),
table:lr_table::Table, void:Y}
-> (Y , stream::Stream(token::Token((Y, Z) ) ));
sharing token::lr_table = lr_table
};


