Parser sync.

This commit is contained in:
Michael Meskes 2000-11-03 10:47:54 +00:00
parent 94d8bbe5fb
commit b703c127ed
3 changed files with 29 additions and 25 deletions

View 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.

View 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];
}

View 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("?"); }
;