syntax error

Started by Daniel Kalchevover 27 years ago2 messages
#1Daniel Kalchev
daniel@digsys.bg

Sorry for sending those separately.

The current snapshot has the following error (under BSD/OS 3.1 and 4.0):

gmake[3]: Entering directory `/var/src/local/pgsql/src/interfaces/ecpg/preproc'
gcc2 -I../../../include -I../../../backend -O2 -m486 -pipe -I../include
-DMAJOR_VERSION=2 -DMINOR_VERSION=4 -DPATCHLEVEL=1
-DINCLUDE_PATH=\"/usr/local/pgsql/include\" -c y.tab.c -o y.tab.o
preproc.y: In function `yyparse':
preproc.y:1562: syntax error before `}'
gmake[3]: *** [y.tab.o] Error 1

Indeed, at line 1562 of preproc.y it is missing an ';'

Daniel

PS: well, this time I waited the compile to complete.

#2Michael Meskes
meskes@usa.net
In reply to: Daniel Kalchev (#1)
1 attachment(s)
Re: [HACKERS] syntax error

On Thu, Sep 17, 1998 at 07:54:32PM +0300, Daniel Kalchev wrote:

The current snapshot has the following error (under BSD/OS 3.1 and 4.0):
...

Thanks. I fixed it in my source. Here's my actual patch. It gets bigger.
Could anyone please apply this to the archive?

Michael

--
Dr. Michael Meskes | Th.-Heuss-Str. 61, D-41812 Erkelenz | Go SF49ers!
Senior-Consultant | business: Michael.Meskes@mummert.de | Go Rhein Fire!
Mummert+Partner | private: Michael.Meskes@usa.net | Use Debian
Unternehmensberatung AG | Michael.Meskes@gmx.net | GNU/Linux!

Attachments:

patchtext/plain; charset=iso-8859-1Download
diff -rcN ecpg/ChangeLog ecpg.mm/ChangeLog
*** ecpg/ChangeLog	Sat Aug 29 08:19:34 1998
--- ecpg.mm/ChangeLog	Thu Sep 17 19:23:47 1998
***************
*** 311,313 ****
--- 311,339 ----
  	- Removed one line of code that AIX complains about since it was not
  	  needed anyway
  	- Set library version to 2.6.1
+ 
+ Mon Aug 31 09:40:04 CEST 1998
+ 
+ 	- Minor patch to Makefile
+ 	- Put pgc.l in sync with scan.l
+ 
+ Tue Sep  1 11:31:05 CEST 1998
+ 
+ 	- Fixed another bug in preproc.y
+ 
+ Thu Sep  3 12:21:16 CEST 1998
+ 
+ 	- Sync preproc.y with gram.y
+ 
+ Mon Sep 14 09:21:02 CEST 1998
+ 
+ 	- Sync preproc.y with gram.y yet again
+ 
+ Thu Sep 17 08:55:33 CEST 1998
+ 
+ 	- Synced preproc.y and gram.y one more time
+ 
+ Thu Sep 17 19:23:24 CEST 1998
+ 
+ 	- Added missing ´;´ in preproc.y
+ 	- Set version to 2.4.2
diff -rcN ecpg/preproc/Makefile ecpg.mm/preproc/Makefile
*** ecpg/preproc/Makefile	Tue Aug 25 19:11:38 1998
--- ecpg.mm/preproc/Makefile	Mon Sep 14 09:20:32 1998
***************
*** 3,9 ****
  
  MAJOR_VERSION=2
  MINOR_VERSION=4
! PATCHLEVEL=1
  
  CFLAGS+=-I../include -DMAJOR_VERSION=$(MAJOR_VERSION) \
  	-DMINOR_VERSION=$(MINOR_VERSION) -DPATCHLEVEL=$(PATCHLEVEL) \
--- 3,9 ----
  
  MAJOR_VERSION=2
  MINOR_VERSION=4
! PATCHLEVEL=2
  
  CFLAGS+=-I../include -DMAJOR_VERSION=$(MAJOR_VERSION) \
  	-DMINOR_VERSION=$(MINOR_VERSION) -DPATCHLEVEL=$(PATCHLEVEL) \
***************
*** 26,31 ****
--- 26,35 ----
  # Rule that really do something.
  ecpg: $(OBJ)
  	$(CC) -o ecpg $(OBJ) $(LEXLIB)
+ 
+ pgc.c: pgc.l
+ 	$(LEX) $<
+ 	mv lex.yy.c pgc.c
  
  y.tab.h y.tab.c: preproc.y
  	$(YACC) $(YFLAGS) $<
diff -rcN ecpg/preproc/keywords.c ecpg.mm/preproc/keywords.c
*** ecpg/preproc/keywords.c	Tue Sep  1 06:46:11 1998
--- ecpg.mm/preproc/keywords.c	Mon Sep 14 09:22:28 1998
***************
*** 150,155 ****
--- 150,156 ----
  	{"notnull", NOTNULL},
  	{"null", NULL_P},
  	{"numeric", NUMERIC},
+ 	{"of", OF},
  	{"oids", OIDS},
  	{"on", ON},
  	{"operator", OPERATOR},
diff -rcN ecpg/preproc/pgc.l ecpg.mm/preproc/pgc.l
*** ecpg/preproc/pgc.l	Tue Sep  1 06:46:11 1998
--- ecpg.mm/preproc/pgc.l	Tue Sep  1 11:28:18 1998
***************
*** 340,345 ****
--- 340,348 ----
  						if (isascii((unsigned char)yytext[i]) && isupper(yytext[i]))
  							yytext[i] = tolower(yytext[i]);
  
+ 					if (i >= NAMEDATALEN)
+ 						yytext[NAMEDATALEN-1] = '\0';
+ 
  					keyword = ScanKeywordLookup((char*)yytext);
  					if (keyword != NULL) {
  						return keyword->value;
***************
*** 477,482 ****
--- 480,488 ----
  					for(i = 0; yytext[i]; i++)
  						if (isascii((unsigned char)yytext[i]) && isupper(yytext[i]))
  							yytext[i] = tolower(yytext[i]);
+ 
+ 					if (i >= NAMEDATALEN)
+ 						yytext[NAMEDATALEN-1] = '\0';
  
  					keyword = ScanKeywordLookup((char*)yytext);
  					if (keyword != NULL) {
diff -rcN ecpg/preproc/preproc.y ecpg.mm/preproc/preproc.y
*** ecpg/preproc/preproc.y	Tue Sep  1 06:46:14 1998
--- ecpg.mm/preproc/preproc.y	Thu Sep 17 19:23:09 1998
***************
*** 528,534 ****
  %token		TYPECAST
  
  /* Keywords (in SQL92 reserved words) */
! %token  ACTION, ADD, ALL, ALTER, AND, ANY AS, ASC,
                  BEGIN_TRANS, BETWEEN, BOTH, BY,
                  CASCADE, CAST, CHAR, CHARACTER, CHECK, CLOSE, COLLATE, COLUMN, COMMIT, 
                  CONSTRAINT, CREATE, CROSS, CURRENT, CURRENT_DATE, CURRENT_TIME, 
--- 528,534 ----
  %token		TYPECAST
  
  /* Keywords (in SQL92 reserved words) */
! %token  ABSOLUTE, ACTION, ADD, ALL, ALTER, AND, ANY AS, ASC,
                  BEGIN_TRANS, BETWEEN, BOTH, BY,
                  CASCADE, CAST, CHAR, CHARACTER, CHECK, CLOSE, COLLATE, COLUMN, COMMIT, 
                  CONSTRAINT, CREATE, CROSS, CURRENT, CURRENT_DATE, CURRENT_TIME, 
***************
*** 537,550 ****
                  END_TRANS, EXECUTE, EXISTS, EXTRACT,
                  FETCH, FLOAT, FOR, FOREIGN, FROM, FULL,
                  GRANT, GROUP, HAVING, HOUR_P,
!                 IN, INNER_P, INSERT, INTERVAL, INTO, IS,
                  JOIN, KEY, LANGUAGE, LEADING, LEFT, LIKE, LOCAL,
                  MATCH, MINUTE_P, MONTH_P, NAMES,
!                 NATIONAL, NATURAL, NCHAR, NO, NOT, NOTIFY, NULL_P, NUMERIC,
!                 ON, OPTION, OR, ORDER, OUTER_P,
!                 PARTIAL, POSITION, PRECISION, PRIMARY, PRIVILEGES, PROCEDURE, PUBLIC,
!                 REFERENCES, REVOKE, RIGHT, ROLLBACK,
!                 SECOND_P, SELECT, SET, SUBSTRING,
                  TABLE, TIME, TIMESTAMP, TIMEZONE_HOUR, TIMEZONE_MINUTE,
  		TO, TRAILING, TRANSACTION, TRIM,
                  UNION, UNIQUE, UPDATE, USER, USING,
--- 537,550 ----
                  END_TRANS, EXECUTE, EXISTS, EXTRACT,
                  FETCH, FLOAT, FOR, FOREIGN, FROM, FULL,
                  GRANT, GROUP, HAVING, HOUR_P,
!                 IN, INNER_P, INSENSITIVE, INSERT, INTERVAL, INTO, IS,
                  JOIN, KEY, LANGUAGE, LEADING, LEFT, LIKE, LOCAL,
                  MATCH, MINUTE_P, MONTH_P, NAMES,
!                 NATIONAL, NATURAL, NCHAR, NEXT, NO, NOT, NOTIFY, NULL_P, NUMERIC,
!                 OF, ON, ONLY, OPTION, OR, ORDER, OUTER_P,
!                 PARTIAL, POSITION, PRECISION, PRIMARY, PRIOR, PRIVILEGES, PROCEDURE, PUBLIC,
!                 READ, REFERENCES, RELATIVE, REVOKE, RIGHT, ROLLBACK,
!                 SCROLL, SECOND_P, SELECT, SET, SUBSTRING,
                  TABLE, TIME, TIMESTAMP, TIMEZONE_HOUR, TIMEZONE_MINUTE,
  		TO, TRAILING, TRANSACTION, TRIM,
                  UNION, UNIQUE, UPDATE, USER, USING,
***************
*** 620,626 ****
  %type  <str> 	ColId default_expr ColQualifier columnDef ColQualList
  %type  <str>    ColConstraint ColConstraintElem default_list NumericOnly FloatOnly
  %type  <str>    OptTableElementList OptTableElement TableConstraint
! %type  <str>    ConstraintElem key_actions constraint_list
  %type  <str>    res_target_list res_target_el res_target_list2
  %type  <str>    res_target_el2 opt_id relation_name database_name
  %type  <str>    access_method attr_name class index_name name func_name
--- 620,626 ----
  %type  <str> 	ColId default_expr ColQualifier columnDef ColQualList
  %type  <str>    ColConstraint ColConstraintElem default_list NumericOnly FloatOnly
  %type  <str>    OptTableElementList OptTableElement TableConstraint
! %type  <str>    ConstraintElem key_actions constraint_list ColPrimaryKey
  %type  <str>    res_target_list res_target_el res_target_list2
  %type  <str>    res_target_el2 opt_id relation_name database_name
  %type  <str>    access_method attr_name class index_name name func_name
***************
*** 667,672 ****
--- 667,673 ----
  %type  <str>    ViewStmt LoadStmt CreatedbStmt opt_database1 opt_database2 location
  %type  <str>    DestroydbStmt ClusterStmt grantee RevokeStmt encoding
  %type  <str>	GrantStmt privileges operation_commalist operation
+ %type  <str>	cursor_clause, opt_cursor, opt_readonly, opt_of
  
  %type  <str>	ECPGWhenever ECPGConnect connection_target ECPGOpen open_opts
  %type  <str>	indicator ECPGExecute ecpg_expr dotext
***************
*** 1083,1091 ****
  				{
  					$$ = cat3_str($1, $2, $3);
  				}
! 	| ColId SERIAL
  		{
! 			$$ = make2_str($1, make1_str(" serial"));
  		}
  		;
  
--- 1084,1092 ----
  				{
  					$$ = cat3_str($1, $2, $3);
  				}
! 	| ColId SERIAL ColPrimaryKey
  		{
! 			$$ = make3_str($1, make1_str(" serial "), $3);
  		}
  		;
  
***************
*** 1097,1102 ****
--- 1098,1113 ----
  			| ColConstraint		{ $$ = $1; }
  		;
  
+ ColPrimaryKey:  PRIMARY KEY
+                 {
+ 			$$ = make1_str("primary key");
+                 }
+               | /*EMPTY*/
+ 		{
+ 			$$ = make1_str("");
+ 		}
+                 ;
+ 
  ColConstraint:
  		CONSTRAINT name ColConstraintElem
  				{
***************
*** 1106,1115 ****
--- 1117,1145 ----
  				{ $$ = $1; }
  		;
  
+ /* The column constraint WITH NULL gives a shift/reduce error
+  * because it requires yacc to look more than one token ahead to
+  * resolve WITH TIME ZONE and WITH NULL.
+  * So, leave it out of the syntax for now.
+                        | WITH NULL_P
+                                {
+                                        $$ = NULL;
+                                }
+  * - thomas 1998-09-12
+  *
+  * DEFAULT NULL is already the default for Postgres.
+  * Bue define it here and carry it forward into the system
+  * to make it explicit.
+  * - thomas 1998-09-13
+  */
  ColConstraintElem:  CHECK '(' constraint_expr ')'
  				{
  					$$ = make3_str(make1_str("check("), $3, make1_str(")"));
  				}
+ 			| DEFAULT NULL_P
+ 				{
+ 					$$ = make1_str("default null");
+ 				}
  			| DEFAULT default_expr
  				{
  					$$ = cat2_str(make1_str("default"), $2);
***************
*** 1143,1152 ****
  				}
  		;
  
  default_expr:  AexprConst
  				{	$$ = $1; }
- 			| NULL_P
- 				{	$$ = make1_str("null"); }
  			| '-' default_expr %prec UMINUS
  				{	$$ = cat2_str(make1_str("-"), $2); }
  			| default_expr '+' default_expr
--- 1173,1188 ----
  				}
  		;
  
+ /* The Postgres default column value is NULL.
+  * Rather than carrying DEFAULT NULL forward as a clause,
+  * let's just have it be a no-op.
+                         | NULL_P
+ 				{	$$ = make1_str("null"); }
+  * - thomas 1998-09-13
+  */
+ 
  default_expr:  AexprConst
  				{	$$ = $1; }
  			| '-' default_expr %prec UMINUS
  				{	$$ = cat2_str(make1_str("-"), $2); }
  			| default_expr '+' default_expr
***************
*** 1559,1565 ****
  		;
  
  TriggerFuncArgs:  TriggerFuncArg
! 				{ $$ = $1 }
  			| TriggerFuncArgs ',' TriggerFuncArg
  				{ $$ = cat3_str($1, make1_str(","), $3); }
  			| /*EMPTY*/
--- 1595,1601 ----
  		;
  
  TriggerFuncArgs:  TriggerFuncArg
! 				{ $$ = $1; }
  			| TriggerFuncArgs ',' TriggerFuncArg
  				{ $$ = cat3_str($1, make1_str(","), $3); }
  			| /*EMPTY*/
***************
*** 1667,1678 ****
  /*****************************************************************************
   *
   *		QUERY:
!  *			fetch/move [forward | backward] [number | all ] [ in <portalname> ]
   *
   *****************************************************************************/
  
  FetchStmt:	FETCH opt_direction fetch_how_many opt_portal_name INTO into_list
  				{
  					$$ = cat4_str(make1_str("fetch"), $2, $3, $4);
  				}
  		|	MOVE opt_direction fetch_how_many opt_portal_name
--- 1703,1719 ----
  /*****************************************************************************
   *
   *		QUERY:
!  *                     fetch/move [forward | backward] [ # | all ] [ in <portalname> ]
!  *                     fetch [ forward | backward | absolute | relative ]
!  *                           [ # | all | next | prior ] [ [ in | from ] <portalname> ]
   *
   *****************************************************************************/
  
  FetchStmt:	FETCH opt_direction fetch_how_many opt_portal_name INTO into_list
  				{
+ 					if (strncmp($2, "relative", strlen("relative")) == 0 && atol($3) == 0L)
+ 						yyerror("FETCH/RELATIVE at current position is not supported");
+ 
  					$$ = cat4_str(make1_str("fetch"), $2, $3, $4);
  				}
  		|	MOVE opt_direction fetch_how_many opt_portal_name
***************
*** 1683,1700 ****
  
  opt_direction:	FORWARD		{ $$ = make1_str("forward"); }
  		| BACKWARD	{ $$ = make1_str("backward"); }
  		| /*EMPTY*/	{ $$ = make1_str(""); /* default */ }
  		;
  
! fetch_how_many:  Iconst
! 			   { $$ = $1;
! 				 if (atol($1) <= 0) yyerror("Please specify nonnegative count for fetch"); }
  		| ALL		{ $$ = make1_str("all"); }
  		| /*EMPTY*/	{ $$ = make1_str(""); /*default*/ }
  		;
  
  opt_portal_name:  IN name		{ $$ = cat2_str(make1_str("in"), $2); }
! 		| name			{ $$ = cat2_str(make1_str("in"), $1); }
  		| /*EMPTY*/		{ $$ = make1_str(""); }
  		;
  
--- 1724,1749 ----
  
  opt_direction:	FORWARD		{ $$ = make1_str("forward"); }
  		| BACKWARD	{ $$ = make1_str("backward"); }
+ 		| RELATIVE      { $$ = make1_str("relative"); }
+                 | ABSOLUTE
+  				{
+ 					fprintf(stderr, "FETCH/ABSOLUTE not supported, using RELATIVE");
+ 					$$ = make1_str("absolute");
+ 				}
  		| /*EMPTY*/	{ $$ = make1_str(""); /* default */ }
  		;
  
! fetch_how_many:   Iconst        { $$ = $1; }
! 		| '-' Iconst    { $$ = make2_str(make1_str("-"), $2); }
  		| ALL		{ $$ = make1_str("all"); }
+ 		| NEXT		{ $$ = make1_str("next"); }
+ 		| PRIOR		{ $$ = make1_str("prior"); }
  		| /*EMPTY*/	{ $$ = make1_str(""); /*default*/ }
  		;
  
  opt_portal_name:  IN name		{ $$ = cat2_str(make1_str("in"), $2); }
! 		| FROM name		{ $$ = cat2_str(make1_str("from"), $2); }
! /*		| name			{ $$ = cat2_str(make1_str("in"), $1); */
  		| /*EMPTY*/		{ $$ = make1_str(""); }
  		;
  
***************
*** 2328,2333 ****
--- 2377,2386 ----
  				{
  					$$ = make3_str(make1_str("values("), $3, make1_str(")"));
  				}
+ 		| DEFAULT VALUES
+ 				{
+ 					$$ = make1_str("default values");
+ 				}
  		| SELECT opt_unique res_target_list2
  			 from_clause where_clause
  			 group_clause having_clause
***************
*** 2404,2414 ****
   *				CURSOR STATEMENTS
   *
   *****************************************************************************/
! CursorStmt:  DECLARE name opt_binary CURSOR FOR
   			 SELECT opt_unique res_target_list2
  			 from_clause where_clause
  			 group_clause having_clause
  			 union_clause sort_clause
  				{
  					struct cursor *ptr, *this;
  	
--- 2457,2468 ----
   *				CURSOR STATEMENTS
   *
   *****************************************************************************/
! CursorStmt:  DECLARE name opt_cursor CURSOR FOR
   			 SELECT opt_unique res_target_list2
  			 from_clause where_clause
  			 group_clause having_clause
  			 union_clause sort_clause
+ 			 cursor_clause
  				{
  					struct cursor *ptr, *this;
  	
***************
*** 2438,2444 ****
--- 2492,2517 ----
  				}
  		;
  
+ opt_cursor:  BINARY             { $$ = make1_str("binary"); }
+                | INSENSITIVE	{ $$ = make1_str("insensitive"); }
+                | SCROLL         { $$ = make1_str("scroll"); }
+                | INSENSITIVE SCROLL	{ $$ = make1_str("insensitive scroll"); }
+                | /*EMPTY*/      { $$ = make1_str(""); }
+                ;
+ 
+ cursor_clause:  FOR opt_readonly	{ $$ = cat2_str(make1_str("for"), $2); }
+                | /*EMPTY*/              { $$ = make1_str(""); }
+ 
+                ;
+ 
+ opt_readonly:  READ ONLY		{ $$ = make1_str("read only"); }
+                | UPDATE opt_of
+                        {
+                                yyerror("DECLARE/UPDATE not supported; Cursors must be READ ONLY.");
+                        }
+                ;
  
+ opt_of:  OF columnList { $$ = make2_str(make1_str("of"), $2); }
  
  /*****************************************************************************
   *
***************
*** 3776,3781 ****
--- 3849,3855 ----
   */
  ColId:  ident							{ $$ = $1; }
  		| datetime						{ $$ = $1; }
+ 		| ABSOLUTE						{ $$ = make1_str("absolute"); }
  		| ACTION						{ $$ = make1_str("action"); }
  		| CACHE							{ $$ = make1_str("cache"); }
  		| CYCLE							{ $$ = make1_str("cycle"); }
***************
*** 3787,3804 ****
  		| FUNCTION						{ $$ = make1_str("function"); }
  		| INCREMENT						{ $$ = make1_str("increment"); }
  		| INDEX							{ $$ = make1_str("index"); }
  		| KEY							{ $$ = make1_str("key"); }
  		| LANGUAGE						{ $$ = make1_str("language"); }
  		| LOCATION						{ $$ = make1_str("location"); }
  		| MATCH							{ $$ = make1_str("match"); }
  		| MAXVALUE						{ $$ = make1_str("maxvalue"); }
  		| MINVALUE						{ $$ = make1_str("minvalue"); }
  		| OPERATOR						{ $$ = make1_str("operator"); }
  		| OPTION						{ $$ = make1_str("option"); }
  		| PASSWORD						{ $$ = make1_str("password"); }
! 		| PRIVILEGES					{ $$ = make1_str("privileges"); }
  		| RECIPE						{ $$ = make1_str("recipe"); }
  		| ROW							{ $$ = make1_str("row"); }
  		| SERIAL						{ $$ = make1_str("serial"); }
  		| START							{ $$ = make1_str("start"); }
  		| STATEMENT						{ $$ = make1_str("statement"); }
--- 3861,3886 ----
  		| FUNCTION						{ $$ = make1_str("function"); }
  		| INCREMENT						{ $$ = make1_str("increment"); }
  		| INDEX							{ $$ = make1_str("index"); }
+ 		| INSENSITIVE						{ $$ = make1_str("insensitive"); }
  		| KEY							{ $$ = make1_str("key"); }
  		| LANGUAGE						{ $$ = make1_str("language"); }
  		| LOCATION						{ $$ = make1_str("location"); }
  		| MATCH							{ $$ = make1_str("match"); }
  		| MAXVALUE						{ $$ = make1_str("maxvalue"); }
  		| MINVALUE						{ $$ = make1_str("minvalue"); }
+ 		| NEXT							{ $$ = make1_str("next"); }
+ 		| OF							{ $$ = make1_str("of"); }
+ 		| ONLY							{ $$ = make1_str("only"); }
  		| OPERATOR						{ $$ = make1_str("operator"); }
  		| OPTION						{ $$ = make1_str("option"); }
  		| PASSWORD						{ $$ = make1_str("password"); }
! 		| PRIOR							{ $$ = make1_str("prior"); }
! 		| PRIVILEGES						{ $$ = make1_str("privileges"); }
! 		| READ							{ $$ = make1_str("read"); }
  		| RECIPE						{ $$ = make1_str("recipe"); }
+ 		| RELATIVE						{ $$ = make1_str("relative"); }
  		| ROW							{ $$ = make1_str("row"); }
+ 		| SCROLL						{ $$ = make1_str("scroll"); }
  		| SERIAL						{ $$ = make1_str("serial"); }
  		| START							{ $$ = make1_str("start"); }
  		| STATEMENT						{ $$ = make1_str("statement"); }
***************
*** 4006,4012 ****
                                 switch(dimension)
                                 {
                                    case 0:
!                                       strcpy("[]", dim);
                                        break;
                                    case 1:
                                        *dim = '\0';
--- 4088,4094 ----
                                 switch(dimension)
                                 {
                                    case 0:
!                                       strcpy(dim, "[]");
                                        break;
                                    case 1:
                                        *dim = '\0';