Re: parser dilemma - Mailing list pgsql-hackers
From | Andrew Dunstan |
---|---|
Subject | Re: parser dilemma |
Date | |
Msg-id | 46287930.8040502@dunslane.net Whole thread Raw |
In response to | Re: parser dilemma (Zoltan Boszormenyi <zb@cybertec.at>) |
Responses |
Re: parser dilemma
|
List | pgsql-hackers |
Zoltan Boszormenyi wrote: > Martijn van Oosterhout írta: >> On Thu, Apr 19, 2007 at 11:19:40AM +0200, Zoltan Boszormenyi wrote: >> >>>> The problem comes from cases like >>>> >>>> colname coltype DEFAULT 5! GENERATED ... >>>> >>>> Since b_expr allows postfix operators, it takes one more token of >>>> lookahead than we have to tell if the default expression is "5!" >>>> or "5!GENERATED ...". >>>> >> >> ISTM that as long as: >> >> colname coltype DEFAULT (5!) GENERATED ... >> >> works I don't see why it would be a problem to require the parentheses >> in this case. Postfis operators are not going to be that common here I >> think. >> >> Have a nice day, >> > > You mean like this one? > ------------------------------------------------------------------------ > *** gram.y.old 2007-04-20 09:23:16.000000000 +0200 > --- gram.y 2007-04-20 09:25:34.000000000 +0200 > *************** > *** 7550,7557 **** > { $$ = (Node *) makeA_Expr(AEXPR_OP, > $2, $1, $3, @2); } > | qual_Op > b_expr %prec Op > { $$ = (Node *) makeA_Expr(AEXPR_OP, > $1, NULL, $2, @1); } > ! | b_expr > qual_Op %prec POSTFIXOP > ! { $$ = (Node *) makeA_Expr(AEXPR_OP, > $2, $1, NULL, @2); } > | b_expr IS DISTINCT FROM b_expr > %prec IS > { > $$ = (Node *) > makeSimpleA_Expr(AEXPR_DISTINCT, "=", $1, $5, @2); > --- 7550,7557 ---- > { $$ = (Node *) makeA_Expr(AEXPR_OP, > $2, $1, $3, @2); } > | qual_Op > b_expr %prec Op > { $$ = (Node *) makeA_Expr(AEXPR_OP, > $1, NULL, $2, @1); } > ! | '(' b_expr qual_Op > ')' %prec POSTFIXOP > ! { $$ = (Node *) makeA_Expr(AEXPR_OP, > $3, $2, NULL, @3); } > | b_expr IS DISTINCT FROM b_expr > %prec IS > { > $$ = (Node *) > makeSimpleA_Expr(AEXPR_DISTINCT, "=", $1, $5, @2); > ------------------------------------------------------------------------ > > This change alone brings 13 reduce/reduce conflicts. > > No - that's not what you do. All you need to do is remove those 2 lines from the b_expr rules. The postfix rule will still be in a_expr and the parenthesized bit is taken care of in the ( a_expr ) rule for c_expr. cheers andrew
pgsql-hackers by date: