void push_parse_state(interp_core_type *interp, FILE *fin) { scanner_stack_type *scanner=alloc_scanner(); yylex_init_extra(interp, &(scanner->scanner)); yyset_in(fin, scanner->scanner); scanner->previous=interp->scanner; interp->scanner=scanner; }
int main() { cont_p cont; cont_p caller_cont; object_p scanner, output; init_symbol_table(); init_wellknown_objects(); init_global_env(); init_cont_list(); fill_initial_env(); scanner = alloc_scanner(stdin); output = alloc_output_stream(stdout); if (setjmp(error_occured) != 0) { // reset continuation list continuation_list->next = continuation_list->first; } // initial continuation caller_cont = cont_list_obtain(continuation_list); caller_cont->args_locals[0] = output; caller_cont->next = finish; cont = cont_list_obtain(continuation_list); cont->caller = caller_cont; cont->args_locals[0] = scanner; cont->args_locals[1] = output; cont->next = repl; trampoline(cont); return 0; }
void create_parser(interp_core_type *interp) { interp->scanner=alloc_scanner(); yylex_init_extra(interp, &(peek_scanner)); }