/* parser */ %{ #include extern int yylineno; extern int do_quit; static void yyerror(const char *); static void yyerror(const char *errmsg) { fprintf(stderr, "ruleset line %d: %s.", yylineno - 1, errmsg); } int yywrap(void) { return (1); } int dbinsert(size_t key, char *data); int dbdelete(size_t key); int dbget(size_t key); %} %union { size_t number; char *string; } %token KEY %token STRING %token QUOTE INSERT DELETE GET QUIT %% ruleset: /*empty*/ | ruleset command ; command: insert | delete | get | quit ; insert: INSERT KEY STRING { dbinsert($2, $3); } ; delete: DELETE KEY { dbdelete($2); } ; get: GET KEY { dbget($2); } ; quit: QUIT { do_quit = 1; YYACCEPT; } ; %%