X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=src%2Ffrontend%2Fgrammar.y;h=004a5effa1537a29473066103757cd169867c37a;hb=7dbab14d8d2113e0160a9c372b40be1ca8eea2d1;hp=f262f3e11d9ace504a2fa08dc4b3ef8bb7c9befe;hpb=e7edc6432f63f36a2508b4c426876593678c8434;p=sysdb.git diff --git a/src/frontend/grammar.y b/src/frontend/grammar.y index f262f3e..004a5ef 100644 --- a/src/frontend/grammar.y +++ b/src/frontend/grammar.y @@ -37,6 +37,7 @@ #include "utils/llist.h" #include +#include int sdb_fe_yylex(YYSTYPE *yylval, YYLTYPE *yylloc, sdb_fe_yyscan_t yyscanner); @@ -75,10 +76,11 @@ sdb_fe_yyerror(YYLTYPE *lval, sdb_fe_yyscan_t scanner, const char *msg); %token SCANNER_ERROR %token IDENTIFIER -%token LIST +%token FETCH LIST %type statements %type statement + fetch_statement list_statement expression @@ -87,6 +89,14 @@ sdb_fe_yyerror(YYLTYPE *lval, sdb_fe_yyscan_t scanner, const char *msg); statements: statements ';' statement { + /* only accept this in default parse mode */ + if (parser_mode != SDB_PARSE_DEFAULT) { + sdb_fe_yyerror(&yylloc, scanner, + YY_("syntax error, unexpected statement, " + "expecting expression")); + YYABORT; + } + if ($3) { sdb_llist_append(pt, SDB_OBJ($3)); sdb_object_deref(SDB_OBJ($3)); @@ -95,6 +105,14 @@ statements: | statement { + /* only accept this in default parse mode */ + if (parser_mode != SDB_PARSE_DEFAULT) { + sdb_fe_yyerror(&yylloc, scanner, + YY_("syntax error, unexpected statement, " + "expecting expression")); + YYABORT; + } + if ($1) { sdb_llist_append(pt, SDB_OBJ($1)); sdb_object_deref(SDB_OBJ($1)); @@ -119,6 +137,8 @@ statements: ; statement: + fetch_statement + | list_statement | /* empty */ @@ -127,6 +147,16 @@ statement: } ; +fetch_statement: + FETCH IDENTIFIER + { + $$ = SDB_CONN_NODE(sdb_object_create_dT(/* name = */ NULL, + conn_fetch_t, conn_fetch_destroy)); + CONN_FETCH($$)->name = strdup($2); + $$->cmd = CONNECTION_FETCH; + } + ; + list_statement: LIST {