]> granicus.if.org Git - postgresql/commitdiff
Parser sync.
authorMichael Meskes <meskes@postgresql.org>
Fri, 3 Nov 2000 10:47:54 +0000 (10:47 +0000)
committerMichael Meskes <meskes@postgresql.org>
Fri, 3 Nov 2000 10:47:54 +0000 (10:47 +0000)
src/interfaces/ecpg/ChangeLog
src/interfaces/ecpg/preproc/pgc.l
src/interfaces/ecpg/preproc/preproc.y

index cff09a8d0c42a19ebdb358365eab80835ce1fcd8..221ad7dd41d790bddfbb8924c1defbbd25864111 100644 (file)
@@ -1004,5 +1004,10 @@ Tue Oct 31 16:09:55 CET 2000
 
        - Added patch by Christof Petig <christof.petig@wtal.de> fixing some
          parser bugs.
+
+Fri Nov  3 11:34:43 CET 2000
+
+       - Synced pgc.l with scan.l.
+       - Synced gram.y and preproc.y.
        - Set ecpg version to 2.8.0. 
        - Set library version to 3.2.0.
index d6b4b28dff9018e22d6df6beb8207722a916288e..0837b9b00ec8c76bc08bb0bc5b1c3c76ba636ff2 100644 (file)
@@ -12,7 +12,7 @@
  *
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/interfaces/ecpg/preproc/pgc.l,v 1.66 2000/10/25 07:00:33 meskes Exp $
+ *       $Header: /cvsroot/pgsql/src/interfaces/ecpg/preproc/pgc.l,v 1.67 2000/11/03 10:47:54 meskes Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -21,8 +21,6 @@
 #include <limits.h>
 #include <errno.h>
 
-#include "postgres.h"
-
 #include "miscadmin.h"
 #include "nodes/parsenodes.h"
 #include "nodes/pg_list.h"
@@ -89,14 +87,14 @@ static struct _if_value {
  * We use exclusive states for quoted strings, extended comments,
  * and to eliminate parsing troubles for numeric strings.
  * Exclusive states:
- *  <xb> binary numeric string - thomas 1997-11-16
+ *  <xbit> bit string literal
  *  <xc> extended C-style comments - thomas 1997-07-12
  *  <xd> delimited identifiers (double-quoted identifiers) - thomas 1997-10-27
  *  <xh> hexadecimal numeric string - thomas 1997-11-16
  *  <xq> quoted strings - thomas 1997-07-30
  */
 
-%x xb
+%x xbit
 %x xc
 %x xd
 %x xdc
@@ -106,12 +104,12 @@ static struct _if_value {
 %x xcond
 %x xskip
 
-/* Binary number
+/* Bit string
  */
-xbstart                        [bB]{quote}
-xbstop                 {quote}
-xbinside               [^']+
-xbcat                  {quote}{whitespace_with_newline}{quote}
+xbitstart              [bB]{quote}
+xbitstop               {quote}
+xbitinside             [^']*
+xbitcat                        {quote}{whitespace_with_newline}{quote}
 
 /* Hexadecimal number
  */
@@ -192,7 +190,7 @@ typecast            "::"
  * If you change either set, adjust the character lists appearing in the
  * rule for "operator"!
  */
-self                   [,()\[\].;$\:\+\-\*\/\%\^\<\>\=\|]
+self                   [,()\[\].;$\:\+\-\*\/\%\^\<\>\=]
 op_chars               [\~\!\@\#\^\&\|\`\?\$\+\-\*\/\%\<\>\=]
 operator               {op_chars}+
 
@@ -313,30 +311,29 @@ cppline                   {space}*#(.*\\{line_end})*.*
 
 <xc><<EOF>>            { mmerror(ET_ERROR, "Unterminated /* comment"); }
 
-<SQL>{xbstart}         {
-                                       BEGIN(xb);
+<SQL>{xbitstart}               {
+                                       BEGIN(xbit);
                                        startlit();
                                }
-<xb>{xbstop}   {
+<xbit>{xbitstop}               {
                                        char* endptr;
 
                                        BEGIN(SQL);
-                                       errno = 0;
-                                       yylval.ival = strtol(literalbuf, &endptr, 2);
-                                       if (*endptr != '\0' || errno == ERANGE)
-                                               mmerror(ET_ERROR, "Bad binary integer input!");
-                                       return ICONST;
+                                       if (literalbuf[strspn(literalbuf, "01") + 1] != '\0')
+                                               mmerror(ET_ERROR, "invalid bit string input.");
+                                       yylval.str = literalbuf;
+                                       return BITCONST;
                                }
  
 <xh>{xhinside} |
-<xb>{xbinside} {
+<xbit>{xbitinside}     {
                                        addlit(yytext, yyleng);
                                }
 <xh>{xhcat}            |
-<xb>{xbcat}            {
+<xbit>{xbitcat}                {
                                        /* ignore */
                                }
-<xb><<EOF>>            { mmerror(ET_ERROR, "Unterminated binary integer"); }
+<xbit><<EOF>>          { mmerror(ET_ERROR, "Unterminated bit string"); }
 
 <SQL>{xhstart}         {
                                        BEGIN(xh);
@@ -490,7 +487,7 @@ cppline                     {space}*#(.*\\{line_end})*.*
                                                 * that the "self" rule would have.
                                                 */
                                                if (nchars == 1 &&
-                                                       strchr(",()[].;$:+-*/%^<>=|", yytext[0]))
+                                                       strchr(",()[].;$:+-*/%^<>=", yytext[0]))
                                                        return yytext[0];
                                        }
 
index 1a0beba3e69c2c4ded49aebf2a9aac4d1559452a..ded00a63ef1b5a3e64476dea92a9d096a7526bb2 100644 (file)
@@ -242,7 +242,7 @@ make_name(void)
 %token                 UNIONJOIN
                 
 /* Special keywords, not in the query language - see the "lex" file */
-%token <str>    IDENT SCONST Op CSTRING CVARIABLE CPP_LINE IP
+%token <str>    IDENT SCONST Op CSTRING CVARIABLE CPP_LINE IP BITCONST
 %token <ival>   ICONST PARAM
 %token <dval>   FCONST
 
@@ -281,7 +281,7 @@ make_name(void)
 %type  <str>   CreateAsElement OptCreateAs CreateAsList CreateAsStmt
 %type  <str>   OptUnder key_reference comment_text ConstraintDeferrabilitySpec
 %type  <str>    key_match ColLabel SpecialRuleRelation ColId columnDef
-%type  <str>    ColConstraint ColConstraintElem drop_type
+%type  <str>    ColConstraint ColConstraintElem drop_type Bitconst
 %type  <str>    OptTableElementList OptTableElement TableConstraint
 %type  <str>    ConstraintElem key_actions ColQualList TokenId DropSchemaStmt
 %type  <str>    target_list target_el update_target_list alias_clause
@@ -3790,6 +3790,7 @@ ParamNo:  PARAM opt_indirection
 
 Iconst:  ICONST                                 { $$ = make_name();};
 Fconst:  FCONST                                 { $$ = make_name();};
+Bitconst:  BITCONST                             { $$ = make_name();};
 Sconst:  SCONST                                 {
                                                        $$ = (char *)mm_alloc(strlen($1) + 3);
                                                        $$[0]='\'';
@@ -3825,6 +3826,7 @@ AllConst: Sconst          { $$ = $1; }
 PosAllConst:   Sconst          { $$ = $1; }
                | Fconst        { $$ = $1; }
                | Iconst        { $$ = $1; }
+               | Bitconst      { $$ = $1; }
                | civar         { $$ = make_str("?"); }
                ;