Figured out type signatures for combinator functions. I think, anyway.
This commit is contained in:
parent
8ec43ffed4
commit
7c6451d309
2 changed files with 55 additions and 27 deletions
28
hammer.c
28
hammer.c
|
|
@ -35,3 +35,31 @@ const result* get_cached(parse_state *ps, const size_t pid); /* {
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
int put_cached(parse_state *ps, const size_t pid, result cached);
|
int put_cached(parse_state *ps, const size_t pid, result cached);
|
||||||
|
|
||||||
|
result* (*token(const uint8_t *s))(parse_state *ps) { return NULL; }
|
||||||
|
result* (*ch(const uint8_t c))(parse_state *ps) { return NULL; }
|
||||||
|
result* (*range(const uint8_t lower, const uint8_t upper))(parse_state *ps) { return NULL; }
|
||||||
|
result* (*whitespace(result *(*p1)(parse_state *ps1)))(parse_state *ps) { return NULL; }
|
||||||
|
//result (*action(result *(*p1)(parse_state *ps1), /* fptr to action on AST */))(parse_state *ps) { return NULL; }
|
||||||
|
result* (*join_action(result *(*p1)(parse_state *ps1), const uint8_t *sep))(parse_state *ps) { return NULL; }
|
||||||
|
result* (*left_factor_action(result *(*p1)(parse_state *ps1)))(parse_state *ps) { return NULL; }
|
||||||
|
result* (*negate(result *(*p1)(parse_state *ps1)))(parse_state *ps) { return NULL; }
|
||||||
|
result* end_p(parse_state *ps) { return NULL; }
|
||||||
|
result* nothing_p(parse_state *ps) { return NULL; }
|
||||||
|
result* (*sequence(result *(*(*p1)(parse_state *ps1))))(parse_state *ps) { return NULL; }
|
||||||
|
result* (*choice(result *(*(*p1)(parse_state *ps1))))(parse_state *ps) { return NULL; }
|
||||||
|
result* (*butnot(result *(*p1)(parse_state *ps1), result *(*p2)(parse_state *ps2)))(parse_state *ps) { return NULL; }
|
||||||
|
result* (*difference(result *(*p1)(parse_state *ps1), result *(*p2)(parse_state *ps2)))(parse_state *ps) { return NULL; }
|
||||||
|
result* (*xor(result *(*p1)(parse_state *ps1), result *(*p2)(parse_state *ps2)))(parse_state *ps) { return NULL; }
|
||||||
|
result* (*repeat0(result *(*p1)(parse_state *ps1)))(parse_state *ps) { return NULL; }
|
||||||
|
result* (*repeat1(result *(*p1)(parse_state *ps1)))(parse_state *ps) { return NULL; }
|
||||||
|
result* (*repeatN(result *(*p1)(parse_state *ps1), const size_t n))(parse_state *ps) { return NULL; }
|
||||||
|
result* (*optional(result *(*p1)(parse_state *ps1)))(parse_state *ps) { return NULL; }
|
||||||
|
void (*expect(result *(*p1)(parse_state *ps1)))(parse_state *ps) { return NULL; }
|
||||||
|
result* (*chain(result *(*p1)(parse_state *ps1), result *(*p2)(parse_state *ps2), result *(*p3)(parse_state *ps3)))(parse_state *ps) { return NULL; }
|
||||||
|
result* (*chainl(result *(*p1)(parse_state *ps1), result *(*p2)(parse_state *ps2)))(parse_state *ps) { return NULL; }
|
||||||
|
result* (*list(result *(*p1)(parse_state *ps1), result *(*p2)(parse_state *ps2)))(parse_state *ps) { return NULL; }
|
||||||
|
result* epsilon_p(parse_state *ps) { return NULL; }
|
||||||
|
//result (*semantic(/* fptr to nullary function? */))(parse_state *ps) { return NULL; }
|
||||||
|
result* (*and(result *(*p1)(parse_state *ps1)))(parse_state *ps) { return NULL; }
|
||||||
|
result* (*not(result *(*p1)(parse_state *ps1)))(parse_state *ps) { return NULL; }
|
||||||
|
|
|
||||||
54
hammer.h
54
hammer.h
|
|
@ -29,32 +29,32 @@ typedef struct {
|
||||||
const GSequence *ast;
|
const GSequence *ast;
|
||||||
} result;
|
} result;
|
||||||
|
|
||||||
result (*token(const uint8_t *s))(parse_state);
|
result* (*token(const uint8_t *s))(parse_state *ps);
|
||||||
result (*ch(const uint8_t c))(parse_state);
|
result* (*ch(const uint8_t c))(parse_state *ps);
|
||||||
result (*range(const uint8_t lower, const uint8_t upper))(parse_state);
|
result* (*range(const uint8_t lower, const uint8_t upper))(parse_state *ps);
|
||||||
result (*whitespace(/* fptr to parser */))(parse_state);
|
result* (*whitespace(result *(*p1)(parse_state *ps1)))(parse_state *ps);
|
||||||
result (*action(/* fptr to parser, fptr to action */))(parse_state);
|
//result (*action(result *(*p1)(parse_state *ps1), /* fptr to action on AST */))(parse_state *ps);
|
||||||
result (*join_action(/* fptr to parser */, const uint8_t *sep))(parse_state);
|
result* (*join_action(result *(*p1)(parse_state *ps1), const uint8_t *sep))(parse_state *ps);
|
||||||
result (*left_factor_action(/* fptr to parser */))(parse_state);
|
result* (*left_factor_action(result *(*p1)(parse_state *ps1)))(parse_state *ps);
|
||||||
result (*negate(/* fptr to parser */))(parse_state);
|
result* (*negate(result *(*p1)(parse_state *ps1)))(parse_state *ps);
|
||||||
result end_p(parse_state);
|
result* end_p(parse_state *ps);
|
||||||
result nothing_p(parse_state);
|
result* nothing_p(parse_state *ps);
|
||||||
result (*sequence(/* array of fptrs! */))(parse_state);
|
result* (*sequence(result *(*(*p1)(parse_state *ps1))))(parse_state *ps);
|
||||||
result (*choice(/* array of fptrs */))(parse_state);
|
result* (*choice(result *(*(*p1)(parse_state *ps1))))(parse_state *ps);
|
||||||
result (*butnot(/* fptr to parser1, fptr to parser2 */))(parse_state);
|
result* (*butnot(result *(*p1)(parse_state *ps1), result *(*p2)(parse_state *ps2)))(parse_state *ps);
|
||||||
result (*difference(/* fptr to parser1, fptr to parser2 */))(parse_state);
|
result* (*difference(result *(*p1)(parse_state *ps1), result *(*p2)(parse_state *ps2)))(parse_state *ps);
|
||||||
result (*xor(/* fptr to parser1, fptr to parser2 */))(parse_state);
|
result* (*xor(result *(*p1)(parse_state *ps1), result *(*p2)(parse_state *ps2)))(parse_state *ps);
|
||||||
result (*repeat0(/* fptr to parser */))(parse_state);
|
result* (*repeat0(result *(*p1)(parse_state *ps1)))(parse_state *ps);
|
||||||
result (*repeat1(/* fptr to parser */))(parse_state);
|
result* (*repeat1(result *(*p1)(parse_state *ps1)))(parse_state *ps);
|
||||||
result (*repeatN(/* fptr to parser */, const size_t n))(parse_state);
|
result* (*repeatN(result *(*p1)(parse_state *ps1), const size_t n))(parse_state *ps);
|
||||||
result (*optional(/* fptr to parser */))(parse_state);
|
result* (*optional(result *(*p1)(parse_state *ps1)))(parse_state *ps);
|
||||||
void (*expect(/* fptr to parser */))(parse_state);
|
void (*expect(result *(*p1)(parse_state *ps1)))(parse_state *ps);
|
||||||
result (*chain(/* fptr to item parser */, /* fptr to separator parser */, /* fptr to function */))(parse_state);
|
result* (*chain(result *(*p1)(parse_state *ps1), result *(*p2)(parse_state *ps2), result *(*p3)(parse_state *ps3)))(parse_state *ps);
|
||||||
result (*chainl(/* fptr to parser */, /* fptr to separator parser */))(parse_state);
|
result* (*chainl(result *(*p1)(parse_state *ps1), result *(*p2)(parse_state *ps2)))(parse_state *ps);
|
||||||
result (*list(/* fptr to parser */, /* fptr to separator parser */))(parse_state);
|
result* (*list(result *(*p1)(parse_state *ps1), result *(*p2)(parse_state *ps2)))(parse_state *ps);
|
||||||
result epsilon_p(parse_state);
|
result* epsilon_p(parse_state *ps);
|
||||||
result (*semantic(/* fptr to nullary function? */))(parse_state);
|
//result (*semantic(/* fptr to nullary function? */))(parse_state *ps);
|
||||||
result (*and(/* fptr to conditional-syntax parser */))(parse_state);
|
result* (*and(result *(*p1)(parse_state *ps1)))(parse_state *ps);
|
||||||
result (*not(/* fptr to conditional-syntax parser */))(parse_state);
|
result* (*not(result *(*p1)(parse_state *ps1)))(parse_state *ps);
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue