X-Git-Url: https://git.tokkee.org/?p=sysdb.git;a=blobdiff_plain;f=src%2Finclude%2Ffrontend%2Fparser.h;h=b451ed5b6e88504980c008a42d132d871d50838c;hp=a80969ccb14fb746ddc0a3cad3e7a9f5c7dbb481;hb=ac66c9430defd2a0e187e7b3679c8ebbfda8a4bb;hpb=ae32792b881853979265e41b49866be9ea2d6b2c diff --git a/src/include/frontend/parser.h b/src/include/frontend/parser.h index a80969c..b451ed5 100644 --- a/src/include/frontend/parser.h +++ b/src/include/frontend/parser.h @@ -28,23 +28,39 @@ #ifndef SDB_FRONTEND_PARSER_H #define SDB_FRONTEND_PARSER_H 1 +#include "core/store.h" +#include "frontend/connection.h" #include "utils/llist.h" +#include "utils/strbuf.h" #ifdef __cplusplus extern "C" { #endif +/* parser modes */ +enum { + SDB_PARSE_DEFAULT = 0, + SDB_PARSE_COND = 1 << 1, + SDB_PARSE_EXPR = 1 << 2, +}; + /* YY_EXTRA data */ typedef struct { /* list of sdb_conn_node_t objects */ sdb_llist_t *parsetree; + + /* parser mode */ + int mode; + + /* buffer for parser error messages */ + sdb_strbuf_t *errbuf; } sdb_fe_yyextra_t; /* see yyscan_t */ typedef void *sdb_fe_yyscan_t; sdb_fe_yyscan_t -sdb_fe_scanner_init(const char *str, sdb_fe_yyextra_t *yyext); +sdb_fe_scanner_init(const char *str, int len, sdb_fe_yyextra_t *yyext); void sdb_fe_scanner_destroy(sdb_fe_yyscan_t scanner); @@ -52,6 +68,24 @@ sdb_fe_scanner_destroy(sdb_fe_yyscan_t scanner); int sdb_fe_yyparse(sdb_fe_yyscan_t scanner); +sdb_store_matcher_t * +sdb_fe_parse_matcher(const char *cond, int len, sdb_strbuf_t *errbuf); + +sdb_store_expr_t * +sdb_fe_parse_expr(const char *expr, int len, sdb_strbuf_t *errbuf); + +/* + * sdb_fe_analyze: + * Analyze a parsed node, checking for semantical errors. Error messages will + * be written to the string buffer, if provided. + * + * Returns: + * - 0 if the node is semantically correct + * - a negative value else + */ +int +sdb_fe_analyze(sdb_conn_node_t *node, sdb_strbuf_t *errbuf); + #ifdef __cplusplus } /* extern "C" */ #endif