index b942248b6a175d15d68d5f2ca2d378d89c2eeabe..766570157e426cfdab440db1b10be8ac958d8147 100644 (file)
#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 {
+ /* parser accepts any command statement */
+ SDB_PARSE_DEFAULT = 0,
+
+ /* parser accepts any conditional statement */
+ SDB_PARSE_COND = 1 << 1,
+
+ /* parser accepts any arithmetic expression */
+ SDB_PARSE_ARITH = 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_scanner_init(const char *str, int len, sdb_fe_yyextra_t *yyext);
void
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