recover method
int
recover(
- int marker_token,
- int error_token
)
Implementation
int recover(int marker_token, int error_token) {
if (stateStack.isEmpty) reallocateStacks();
//
//
//
tokens.reset();
tokStream.reset();
tokens.add(tokStream.getPrevious(tokStream.peek()));
var restart_token =
(marker_token != 0 ? marker_token : tokStream.getToken()),
old_action_size = 0;
stateStackTop = 0;
stateStack[stateStackTop] = START_STATE;
do {
action.reset(old_action_size);
if (!fixError(restart_token, error_token)) {
throw BadParseException(error_token);
}
//
// if the parser needs to stop processing,
// it may do so here.
//
if (monitor != null && monitor!.isCancelled()) break;
//
// At this stage, we have a recovery configuration. See how
// far we can go with it.
//
restart_token = error_token;
tokStream.reset(error_token);
old_action_size =
action.size(); // save the old size in case we encounter a new error
error_token = parser.backtrackParse(stateStack, stateStackTop, action, 0);
tokStream.reset(tokStream.getNext(restart_token));
} while (error_token != 0); // no error found
return restart_token;
}