diff --git a/src/hammer.c b/src/hammer.c index 3526b25..ced2c3c 100644 --- a/src/hammer.c +++ b/src/hammer.c @@ -254,7 +254,23 @@ const parser_t* choice(const parser_t* p_array[]) { return ret; } -const parser_t* butnot(const parser_t* p1, const parser_t* p2) { return NULL; } +typedef struct { + const parser_t *p1; + const parser_t *p2; +} two_parsers_t; + + +static parse_result_t parse_butnot(void *env, parse_state_t *state) { + two_parsers_t *parsers = (two_parsers_t*)env; + input_stream_t tmp_state = state->input_stream; + +} + +const parser_t* butnot(const parser_t* p1, const parser_t* p2) { + two_parsers_t *env = g_new(two_parsers_t, 1); + env->p1 = p1; env->p2 = p2; +} + const parser_t* difference(const parser_t* p1, const parser_t* p2) { return NULL; } const parser_t* xor(const parser_t* p1, const parser_t* p2) { return NULL; } const parser_t* repeat0(const parser_t* p) { return NULL; } diff --git a/src/hammer.h b/src/hammer.h index f2e46ad..040007d 100644 --- a/src/hammer.h +++ b/src/hammer.h @@ -115,7 +115,10 @@ const parser_t* nothing_p(); /* Given an array of parsers, p_array, apply each parser in order. The parse succeeds only if all parsers succeed. */ const parser_t* sequence(const parser_t* p_array[]); + +/* Given an array of parsers, p_array, apply each parser in order. The first parser to succeed is the result; if no parsers succeed, the parse fails. */ const parser_t* choice(const parser_t* p_array[]); + const parser_t* butnot(const parser_t* p1, const parser_t* p2); const parser_t* difference(const parser_t* p1, const parser_t* p2); const parser_t* xor(const parser_t* p1, const parser_t* p2);