help with bison - Mailing list pgsql-hackers

From Neil Conway
Subject help with bison
Date
Msg-id 20020410212853.1d44f0ea.nconway@klamath.dyndns.org
Whole thread Raw
Responses Re: help with bison
Re: help with bison
Re: help with bison
Re: help with bison
Re: help with bison
List pgsql-hackers
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;
+                 }
+         ;  /*****************************************************************************  *


pgsql-hackers by date:

Previous
From: Bruce Momjian
Date:
Subject: Re: RFC: Restructuring pg_aggregate
Next
From: "Christopher Kings-Lynne"
Date:
Subject: Odd error during vacuum