void parser_print_error(parser_info *pinfo, const char *where) { fprintf(stderr, "Parser: error #%d in %s; ", pinfo->error, where); if (pinfo->cur_lex != NULL) print_lex(stderr, pinfo->cur_lex); else fprintf(stderr, "\n"); }
int main(int argc, char *argv[]){ int t; yyin = fopen(argv[1], "r"); t = yylex(); while(t){ print_lex(t); t = yylex(); } fclose(yyin); return 0; }
void parser_print_action(parser_info *pinfo, const char *where, int leaving) { if (leaving) fprintf(stderr, "Parser: leaving from %s; ", where); else fprintf(stderr, "Parser: entering to %s; ", where); if (pinfo->cur_lex != NULL) print_lex(stderr, pinfo->cur_lex); else fprintf(stderr, "\n"); }
int main() { lexer_info linfo; init_lexer(&linfo); do { lexeme *lex = get_lex(&linfo); print_lex(stdout, lex); if (lex->type == LEX_EOFILE) return 0; destroy_lex(lex); if (linfo.state == ST_ERROR) { fprintf(stderr, "(>_<)\n"); continue; } } while (1); }
void parser_get_lex(parser_info *pinfo) { if (pinfo->cur_lex != NULL) { if (pinfo->save_str) free(pinfo->cur_lex); else destroy_lex(pinfo->cur_lex); } pinfo->save_str = 0; pinfo->cur_lex = get_lex(pinfo->linfo); #ifdef PARSER_DEBUG fprintf(stderr, "Get lex: "); print_lex(stderr, pinfo->cur_lex); #endif if (pinfo->cur_lex->type == LEX_ERROR) /* Error 1 */ pinfo->error = 1; else pinfo->error = 0; /* Error 0: all right */ }