Re: help with bison - Mailing list pgsql-hackers

From Christopher Kings-Lynne
Subject Re: help with bison
Date
Msg-id GNELIHDDFBOCMGBFGEFOCEBFCCAA.chriskl@familyhealth.com.au
Whole thread Raw
In response to help with bison  (Neil Conway <nconway@klamath.dyndns.org>)
List pgsql-hackers
I don't see in this patch that you've added your new keywords to any of the
lists of reserved words towards the bottom of gram.y.  Have a look down and
see the lists.  You need to add the keywords to the first list in the file
that doesn't give a shift/reduce error.  (ie. make the words the least
reserved as possible.)

Also, make sure you've put them in keywords.c as well.

Chris

> -----Original Message-----
> From: pgsql-hackers-owner@postgresql.org
> [mailto:pgsql-hackers-owner@postgresql.org]On Behalf Of Neil Conway
> Sent: Thursday, 11 April 2002 9:29 AM
> To: PostgreSQL Hackers
> Subject: [HACKERS] help with bison
>
>
> Hi all,
>
> I'm working on a fairly large patch (cleaning up Karel Zak's
> PREPARE/EXECUTE work), and I'm having some problems with bison (I'm
> a yacc newbie). In fact, my grammar currently has an obscene
> 20 shift/reduce and 4 reduce/reduce conflicts!
>
> Would someone to be kind enough to let me know what I'm doing wrong,
> and what I'll need to change? (Unfortunately, bison isn't very
> helpful: it doesn't provide line-numbers when it warns me about
> the # of conflicts). The patch for gram.y is below.
>
> Thanks in advance,
>
> Neil
>
> --
> Neil Conway <neilconway@rogers.com>
> PGP Key ID: DB3C29FC
>
> Index: gram.y
> ===================================================================
> RCS file: /var/lib/cvs/pgsql/src/backend/parser/gram.y,v
> retrieving revision 2.299
> diff -c -r2.299 gram.y
> *** gram.y    1 Apr 2002 04:35:38 -0000    2.299
> --- gram.y    11 Apr 2002 01:26:21 -0000
> ***************
> *** 133,144 ****
>           ClosePortalStmt, ClusterStmt, CommentStmt,
> ConstraintsSetStmt,
>           CopyStmt, CreateAsStmt, CreateDomainStmt,
> CreateGroupStmt, CreatePLangStmt,
>           CreateSchemaStmt, CreateSeqStmt, CreateStmt, CreateTrigStmt,
> !         CreateUserStmt, CreatedbStmt, CursorStmt,
> DefineStmt, DeleteStmt,
> !         DropGroupStmt, DropPLangStmt, DropSchemaStmt,
> DropStmt, DropTrigStmt,
> !         DropUserStmt, DropdbStmt, ExplainStmt, FetchStmt,
>           GrantStmt, IndexStmt, InsertStmt, ListenStmt,
> LoadStmt, LockStmt,
> !         NotifyStmt, OptimizableStmt, ProcedureStmt, ReindexStmt,
> !         RemoveAggrStmt, RemoveFuncStmt, RemoveOperStmt,
>           RenameStmt, RevokeStmt, RuleActionStmt,
> RuleActionStmtOrEmpty,
>           RuleStmt, SelectStmt, TransactionStmt, TruncateStmt,
>           UnlistenStmt, UpdateStmt, VacuumStmt, VariableResetStmt,
> --- 133,145 ----
>           ClosePortalStmt, ClusterStmt, CommentStmt,
> ConstraintsSetStmt,
>           CopyStmt, CreateAsStmt, CreateDomainStmt,
> CreateGroupStmt, CreatePLangStmt,
>           CreateSchemaStmt, CreateSeqStmt, CreateStmt, CreateTrigStmt,
> !         CreateUserStmt, CreatedbStmt, CursorStmt,
> DeallocatePrepareStmt,
> !         DefineStmt, DeleteStmt, DropGroupStmt,
> !         DropPLangStmt, DropSchemaStmt, DropStmt, DropTrigStmt,
> !         DropUserStmt, DropdbStmt, ExecuteStmt, ExplainStmt,
> FetchStmt,
>           GrantStmt, IndexStmt, InsertStmt, ListenStmt,
> LoadStmt, LockStmt,
> !         NotifyStmt, OptimizableStmt, ProcedureStmt,
> PrepareStmt, prepare_query,
> !         ReindexStmt, RemoveAggrStmt, RemoveFuncStmt, RemoveOperStmt,
>           RenameStmt, RevokeStmt, RuleActionStmt,
> RuleActionStmtOrEmpty,
>           RuleStmt, SelectStmt, TransactionStmt, TruncateStmt,
>           UnlistenStmt, UpdateStmt, VacuumStmt, VariableResetStmt,
> ***************
> *** 204,210 ****
>           any_name, any_name_list, expr_list, dotted_name, attrs,
>           target_list, update_target_list, insert_column_list,
>           def_list, opt_indirection, group_clause, TriggerFuncArgs,
> !         select_limit, opt_select_limit
>
>   %type <range>    into_clause, OptTempTableName
>
> --- 205,214 ----
>           any_name, any_name_list, expr_list, dotted_name, attrs,
>           target_list, update_target_list, insert_column_list,
>           def_list, opt_indirection, group_clause, TriggerFuncArgs,
> !         select_limit, opt_select_limit, types_list,
> !         types_prepare_clause, execute_using
> !
> ! %type <ival>    prepare_store
>
>   %type <range>    into_clause, OptTempTableName
>
> ***************
> *** 319,325 ****
>           COALESCE, COLLATE, COLUMN, COMMIT,
>           CONSTRAINT, CONSTRAINTS, CREATE, CROSS, CURRENT_DATE,
>           CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CURSOR,
> !         DAY_P, DEC, DECIMAL, DECLARE, DEFAULT, DELETE, DESC,
>           DISTINCT, DOUBLE, DROP,
>           ELSE, ENCRYPTED, END_TRANS, ESCAPE, EXCEPT,
> EXECUTE, EXISTS, EXTRACT,
>           FALSE_P, FETCH, FLOAT, FOR, FOREIGN, FROM, FULL,
> --- 323,329 ----
>           COALESCE, COLLATE, COLUMN, COMMIT,
>           CONSTRAINT, CONSTRAINTS, CREATE, CROSS, CURRENT_DATE,
>           CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CURSOR,
> !         DAY_P, DEALLOCATE, DEC, DECIMAL, DECLARE, DEFAULT,
> DELETE, DESC,
>           DISTINCT, DOUBLE, DROP,
>           ELSE, ENCRYPTED, END_TRANS, ESCAPE, EXCEPT,
> EXECUTE, EXISTS, EXTRACT,
>           FALSE_P, FETCH, FLOAT, FOR, FOREIGN, FROM, FULL,
> ***************
> *** 329,335 ****
>           MATCH, MINUTE_P, MONTH_P, NAMES,
>           NATIONAL, NATURAL, NCHAR, NEXT, NO, NOT, NULLIF,
> NULL_P, NUMERIC,
>           OF, OLD, ON, ONLY, OPTION, OR, ORDER, OUTER_P, OVERLAPS,
> !         PARTIAL, POSITION, PRECISION, PRIMARY, PRIOR,
> PRIVILEGES, PROCEDURE, PUBLIC,
>           READ, REFERENCES, RELATIVE, REVOKE, RIGHT, ROLLBACK,
>           SCHEMA, SCROLL, SECOND_P, SELECT, SESSION,
> SESSION_USER, SET, SOME, SUBSTRING,
>           TABLE, TEMPORARY, THEN, TIME, TIMESTAMP,
> --- 333,339 ----
>           MATCH, MINUTE_P, MONTH_P, NAMES,
>           NATIONAL, NATURAL, NCHAR, NEXT, NO, NOT, NULLIF,
> NULL_P, NUMERIC,
>           OF, OLD, ON, ONLY, OPTION, OR, ORDER, OUTER_P, OVERLAPS,
> !         PARTIAL, POSITION, PRECISION, PREPARE, PRIMARY,
> PRIOR, PRIVILEGES, PROCEDURE, PUBLIC,
>           READ, REFERENCES, RELATIVE, REVOKE, RIGHT, ROLLBACK,
>           SCHEMA, SCROLL, SECOND_P, SELECT, SESSION,
> SESSION_USER, SET, SOME, SUBSTRING,
>           TABLE, TEMPORARY, THEN, TIME, TIMESTAMP,
> ***************
> *** 363,372 ****
>           DATABASE, DELIMITERS, DO,
>           EACH, ENCODING, EXCLUSIVE, EXPLAIN,
>           FORCE, FORWARD, FREEZE, FUNCTION, HANDLER,
> !         ILIKE, INCREMENT, INDEX, INHERITS, INSTEAD, ISNULL,
>           LANCOMPILER, LIMIT, LISTEN, LOAD, LOCATION, LOCK_P,
>           MAXVALUE, MINVALUE, MODE, MOVE,
> !         NEW, NOCREATEDB, NOCREATEUSER, NONE, NOTHING,
> NOTIFY, NOTNULL,
>           OFFSET, OIDS, OPERATOR, OWNER, PASSWORD, PROCEDURAL,
>           REINDEX, RENAME, RESET, RETURNS, ROW, RULE,
>           SEQUENCE, SETOF, SHARE, SHOW, START, STATEMENT,
> --- 367,376 ----
>           DATABASE, DELIMITERS, DO,
>           EACH, ENCODING, EXCLUSIVE, EXPLAIN,
>           FORCE, FORWARD, FREEZE, FUNCTION, HANDLER,
> !         ILIKE, INCREMENT, INDEX, INHERITS, INSTEAD, ISNULL,
> INTERNAL,
>           LANCOMPILER, LIMIT, LISTEN, LOAD, LOCATION, LOCK_P,
>           MAXVALUE, MINVALUE, MODE, MOVE,
> !         NEW, NOCREATEDB, NOCREATEUSER, NONE, NOSHARE,
> NOTHING, NOTIFY, NOTNULL,
>           OFFSET, OIDS, OPERATOR, OWNER, PASSWORD, PROCEDURAL,
>           REINDEX, RENAME, RESET, RETURNS, ROW, RULE,
>           SEQUENCE, SETOF, SHARE, SHOW, START, STATEMENT,
> ***************
> *** 460,465 ****
> --- 464,470 ----
>           | CreateTrigStmt
>           | CreateUserStmt
>           | ClusterStmt
> +         | DeallocatePrepareStmt
>           | DefineStmt
>           | DropStmt
>           | DropSchemaStmt
> ***************
> *** 469,474 ****
> --- 474,480 ----
>           | DropPLangStmt
>           | DropTrigStmt
>           | DropUserStmt
> +         | ExecuteStmt
>           | ExplainStmt
>           | FetchStmt
>           | GrantStmt
> ***************
> *** 477,482 ****
> --- 483,489 ----
>           | UnlistenStmt
>           | LockStmt
>           | NotifyStmt
> +         | PrepareStmt
>           | ProcedureStmt
>           | ReindexStmt
>           | RemoveAggrStmt
> ***************
> *** 3489,3494 ****
> --- 3496,3594 ----
>           | DeleteStmt                    /*
> by default all are $$=$1 */
>           ;
>
> +
> /*****************************************************************
> ************
> +  *
> +  *                PREPARE STATEMENTS
> +  *
> +
> ******************************************************************
> ***********/
> + PrepareStmt:  PREPARE name AS prepare_query
> types_prepare_clause prepare_store
> +                   {
> +                     PrepareStmt *n =
> makeNode(PrepareStmt);
> +                     n->name = $2;
> +                     n->query = (Query *) $4;
> +                     n->types = (List *) $5;
> +                     n->store = $6;
> +                     $$ = (Node *) n;
> +                 }
> +         ;
> +
> + prepare_query:  SelectStmt
> +         | UpdateStmt
> +         | InsertStmt
> +         | DeleteStmt
> +         ;
> +
> + types_list:  SimpleTypename
> +                 { $$ = makeList1($1); }
> +         | types_list ',' SimpleTypename
> +                 { $$ = lappend($1, $3); }
> +         ;
> +
> + types_prepare_clause:  USING types_list        { $$ = $2; }
> +         | /*EMPTY*/
>     { $$ = NIL; }
> +         ;
> +
> + prepare_store: NOSHARE        { $$ = 1; }
> +         | GLOBAL            { $$ = 2; }
> +         | SHARE                { $$ = 0; }    /*
> default */
> +         | /* EMPTY */        { $$ = 0; }
> +         ;
> +
> +
> /*****************************************************************
> ************
> +  *
> +  *                EXECUTE STATEMENTS
> +  *
> +
> ******************************************************************
> ***********/
> + ExecuteStmt: EXECUTE name into_clause USING execute_using prepare_store
> +                 {
> +                     ExecuteStmt *n =
> makeNode(ExecuteStmt);
> +                     n->name = $2;
> +                     n->into = $3;
> +                     n->using = $5;
> +                     n->store = $6;
> +                     $$ = (Node *) n;
>
> +                 }
> +         ;
> +
> + execute_using: a_expr
> +                 { $$ = makeList1($1); }
> +         | execute_using ',' a_expr
> +                 { $$ = lappend($1, $3); }
> +         ;
> +
> +
> /*****************************************************************
> ************
> +  *
> +  *                DEALLOCATE PREPARE STATEMENTS
> +  *
> +
> ******************************************************************
> ***********/
> + DeallocatePrepareStmt: DEALLOCATE PREPARE ALL
> +                 {
> +                     DeallocatePrepareStmt *n =
> makeNode(DeallocatePrepareStmt);
> +                     n->name = NULL;
> +                     n->store = 0;
> +                     n->all = TRUE;
> +                     n->internal = FALSE;
> +                     $$ = (Node *) n;
> +                 }
> +         | DEALLOCATE PREPARE ALL INTERNAL
> +                 {
> +                     DeallocatePrepareStmt *n =
> makeNode(DeallocatePrepareStmt);
> +                     n->name = NULL;
> +                     n->store = 0;
> +                     n->all = FALSE;
> +                     n->internal = TRUE;
> +                     $$ = (Node *) n;
> +                 }
> +         | DEALLOCATE PREPARE name prepare_store
> +                 {
> +                     DeallocatePrepareStmt *n =
> makeNode(DeallocatePrepareStmt);
> +                     n->name = $3;
> +                     n->store = $4;
> +                     n->all = FALSE;
> +                     n->internal = FALSE;
> +                     $$ = (Node *) n;
> +                 }
> +         ;
>
>
> /*****************************************************************
> ************
>    *
>
> ---------------------------(end of broadcast)---------------------------
> TIP 5: Have you checked our extensive FAQ?
>
> http://www.postgresql.org/users-lounge/docs/faq.html
>



pgsql-hackers by date:

Previous
From: Tom Lane
Date:
Subject: Re: Odd error during vacuum
Next
From: Bear Giles
Date:
Subject: Re: help with bison