diff options
author | David Phillips <david@sighup.nz> | 2018-08-06 01:01:37 +1200 |
---|---|---|
committer | David Phillips <david@sighup.nz> | 2018-08-06 01:01:37 +1200 |
commit | 71dc99170a8dbc126f762f42500567a438420a21 (patch) | |
tree | 7a3ba311a41af7691a59eb946db93f90da74d377 /parse.c | |
parent | 5b891011de8beaf22a854a184d9739ab63fcd7d2 (diff) | |
download | hence-71dc99170a8dbc126f762f42500567a438420a21.tar.xz |
Pad out parser with calls to stubs
Diffstat (limited to 'parse.c')
-rw-r--r-- | parse.c | 31 |
1 files changed, 25 insertions, 6 deletions
@@ -76,10 +76,31 @@ kerchunk() { /** Parsers ******************************************************************/ int +parse_bop(char *ident) { + char *l = NULL; + char *r = NULL; + + EXPECT_CRITICAL(TOK_IDENT); + l = cursor->value; + kerchunk(); + + EXPECT_CRITICAL(TOK_IDENT); + r = cursor->value; + kerchunk(); + + return gate_add(cursor->type, ident, l, r); +} + +int parse_expr(void) { - /* FIXME write wrapper to exit on fail */ + char *ident = NULL; + EXPECT_AND_DISCARD_CRITICAL(TOK_EXPR); - EXPECT_AND_DISCARD_CRITICAL(TOK_IDENT); /* FIXME do something, don't discard */ + + EXPECT_CRITICAL(TOK_IDENT); + ident = cursor->value; + kerchunk(); + EXPECT_AND_DISCARD_CRITICAL(TOK_COLON); switch(cursor->type) { @@ -90,8 +111,7 @@ parse_expr(void) { case TOK_NOR: /* fallthrough */ case TOK_NAND: kerchunk(); - EXPECT_AND_DISCARD_CRITICAL(TOK_IDENT); /* FIXME don't discard */ - EXPECT_AND_DISCARD_CRITICAL(TOK_IDENT); /* FIXME don't discard */ + parse_bop(ident); break; case TOK_NOT: kerchunk(); @@ -133,8 +153,7 @@ parse(const char *fname, FILE *f, struct token *t) { case TOK_INPUT: kerchunk(); expect(TOK_IDENT); - emit("Debug: input is named %s\n", cursor->value); - /* FIXME do something */ + gate_input_add(cursor->value); kerchunk(); break; case TOK_EXPR: |