From 7c6451d3092406cec56dfb0a5894bca941353888 Mon Sep 17 00:00:00 2001 From: "Meredith L. Patterson" <clonearmy@gmail.com> Date: Sun, 22 Apr 2012 05:15:40 +0100 Subject: [PATCH] Figured out type signatures for combinator functions. I think, anyway. --- hammer.c | 28 ++++++++++++++++++++++++++++ hammer.h | 54 +++++++++++++++++++++++++++--------------------------- 2 files changed, 55 insertions(+), 27 deletions(-) diff --git a/hammer.c b/hammer.c index e646eb5..3e8a0ae 100644 --- a/hammer.c +++ b/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); + +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; } diff --git a/hammer.h b/hammer.h index 32e6f89..6d467ba 100644 --- a/hammer.h +++ b/hammer.h @@ -29,32 +29,32 @@ typedef struct { const GSequence *ast; } result; -result (*token(const uint8_t *s))(parse_state); -result (*ch(const uint8_t c))(parse_state); -result (*range(const uint8_t lower, const uint8_t upper))(parse_state); -result (*whitespace(/* fptr to parser */))(parse_state); -result (*action(/* fptr to parser, fptr to action */))(parse_state); -result (*join_action(/* fptr to parser */, const uint8_t *sep))(parse_state); -result (*left_factor_action(/* fptr to parser */))(parse_state); -result (*negate(/* fptr to parser */))(parse_state); -result end_p(parse_state); -result nothing_p(parse_state); -result (*sequence(/* array of fptrs! */))(parse_state); -result (*choice(/* array of fptrs */))(parse_state); -result (*butnot(/* fptr to parser1, fptr to parser2 */))(parse_state); -result (*difference(/* fptr to parser1, fptr to parser2 */))(parse_state); -result (*xor(/* fptr to parser1, fptr to parser2 */))(parse_state); -result (*repeat0(/* fptr to parser */))(parse_state); -result (*repeat1(/* fptr to parser */))(parse_state); -result (*repeatN(/* fptr to parser */, const size_t n))(parse_state); -result (*optional(/* fptr to parser */))(parse_state); -void (*expect(/* fptr to parser */))(parse_state); -result (*chain(/* fptr to item parser */, /* fptr to separator parser */, /* fptr to function */))(parse_state); -result (*chainl(/* fptr to parser */, /* fptr to separator parser */))(parse_state); -result (*list(/* fptr to parser */, /* fptr to separator parser */))(parse_state); -result epsilon_p(parse_state); -result (*semantic(/* fptr to nullary function? */))(parse_state); -result (*and(/* fptr to conditional-syntax parser */))(parse_state); -result (*not(/* fptr to conditional-syntax parser */))(parse_state); +result* (*token(const uint8_t *s))(parse_state *ps); +result* (*ch(const uint8_t c))(parse_state *ps); +result* (*range(const uint8_t lower, const uint8_t upper))(parse_state *ps); +result* (*whitespace(result *(*p1)(parse_state *ps1)))(parse_state *ps); +//result (*action(result *(*p1)(parse_state *ps1), /* fptr to action on AST */))(parse_state *ps); +result* (*join_action(result *(*p1)(parse_state *ps1), const uint8_t *sep))(parse_state *ps); +result* (*left_factor_action(result *(*p1)(parse_state *ps1)))(parse_state *ps); +result* (*negate(result *(*p1)(parse_state *ps1)))(parse_state *ps); +result* end_p(parse_state *ps); +result* nothing_p(parse_state *ps); +result* (*sequence(result *(*(*p1)(parse_state *ps1))))(parse_state *ps); +result* (*choice(result *(*(*p1)(parse_state *ps1))))(parse_state *ps); +result* (*butnot(result *(*p1)(parse_state *ps1), result *(*p2)(parse_state *ps2)))(parse_state *ps); +result* (*difference(result *(*p1)(parse_state *ps1), result *(*p2)(parse_state *ps2)))(parse_state *ps); +result* (*xor(result *(*p1)(parse_state *ps1), result *(*p2)(parse_state *ps2)))(parse_state *ps); +result* (*repeat0(result *(*p1)(parse_state *ps1)))(parse_state *ps); +result* (*repeat1(result *(*p1)(parse_state *ps1)))(parse_state *ps); +result* (*repeatN(result *(*p1)(parse_state *ps1), const size_t n))(parse_state *ps); +result* (*optional(result *(*p1)(parse_state *ps1)))(parse_state *ps); +void (*expect(result *(*p1)(parse_state *ps1)))(parse_state *ps); +result* (*chain(result *(*p1)(parse_state *ps1), result *(*p2)(parse_state *ps2), result *(*p3)(parse_state *ps3)))(parse_state *ps); +result* (*chainl(result *(*p1)(parse_state *ps1), result *(*p2)(parse_state *ps2)))(parse_state *ps); +result* (*list(result *(*p1)(parse_state *ps1), result *(*p2)(parse_state *ps2)))(parse_state *ps); +result* epsilon_p(parse_state *ps); +//result (*semantic(/* fptr to nullary function? */))(parse_state *ps); +result* (*and(result *(*p1)(parse_state *ps1)))(parse_state *ps); +result* (*not(result *(*p1)(parse_state *ps1)))(parse_state *ps); -- GitLab