#include #include #include #include #include "apfl.h" static bool repl_source_reader(void *context, char *buf, size_t *len, bool need) { (void)context; printf(need ? "... " : "> "); fflush(stdout); size_t maxlen = *len; if (fgets(buf, maxlen, stdin) == NULL) { if (feof(stdin)) { *len = 0; return true; } else { return false; } } *len = strlen(buf); return true; } int main(int argc, const char **argv) { (void)argc; (void)argv; int rv = 0; apfl_tokenizer_ptr tokenizer = NULL; if (!(tokenizer = apfl_tokenizer_new(repl_source_reader, NULL))) { fprintf(stderr, "Failed initializing tokenizer\n"); goto exit; } while (true) { struct apfl_error err; struct apfl_token token; switch (apfl_tokenizer_next(tokenizer, false)) { case APFL_PARSE_OK: token = apfl_tokenizer_get_token(tokenizer); apfl_token_print(token, stdout); apfl_token_deinit(&token); break; case APFL_PARSE_EOF: goto exit; case APFL_PARSE_ERROR: err = apfl_tokenizer_get_error(tokenizer); apfl_error_print(err, stderr); if (APFL_ERROR_IS_FATAL(err)) { rv = 1; goto exit; } break; } } exit: apfl_tokenizer_destroy(tokenizer); return rv; }