Improve handling of semicolons ending statements.
This commit is contained in:
parent
231e1e70d8
commit
4371756f16
@ -10,7 +10,7 @@
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 1.22 1996/12/17 01:53:29 momjian Exp $
|
* $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 1.23 1996/12/20 20:33:12 momjian Exp $
|
||||||
*
|
*
|
||||||
* HISTORY
|
* HISTORY
|
||||||
* AUTHOR DATE MAJOR EVENT
|
* AUTHOR DATE MAJOR EVENT
|
||||||
@ -98,7 +98,8 @@ static Node *makeA_Expr(int oper, char *opname, Node *lexpr, Node *rexpr);
|
|||||||
AppendStmt *astmt;
|
AppendStmt *astmt;
|
||||||
}
|
}
|
||||||
|
|
||||||
%type <node> stmt, AddAttrStmt, ClosePortalStmt,
|
%type <node> stmt,
|
||||||
|
AddAttrStmt, ClosePortalStmt,
|
||||||
CopyStmt, CreateStmt, DefineStmt, DestroyStmt,
|
CopyStmt, CreateStmt, DefineStmt, DestroyStmt,
|
||||||
ExtendStmt, FetchStmt, GrantStmt,
|
ExtendStmt, FetchStmt, GrantStmt,
|
||||||
IndexStmt, MoveStmt, ListenStmt, OptimizableStmt,
|
IndexStmt, MoveStmt, ListenStmt, OptimizableStmt,
|
||||||
@ -121,10 +122,12 @@ static Node *makeA_Expr(int oper, char *opname, Node *lexpr, Node *rexpr);
|
|||||||
%type <str> privileges, operation_commalist, grantee
|
%type <str> privileges, operation_commalist, grantee
|
||||||
%type <chr> operation
|
%type <chr> operation
|
||||||
|
|
||||||
%type <list> stmtblock, relation_name_list, OptTableElementList,
|
%type <list> stmtblock, stmtmulti,
|
||||||
|
relation_name_list, OptTableElementList,
|
||||||
tableElementList, OptInherit, definition,
|
tableElementList, OptInherit, definition,
|
||||||
opt_with, def_args, def_name_list, func_argtypes,
|
opt_with, def_args, def_name_list, func_argtypes,
|
||||||
oper_argtypes, OptStmtList, OptStmtBlock, opt_column_list, columnList,
|
oper_argtypes, OptStmtList, OptStmtBlock, OptStmtMulti,
|
||||||
|
opt_column_list, columnList,
|
||||||
sort_clause, sortby_list, index_params,
|
sort_clause, sortby_list, index_params,
|
||||||
name_list, from_clause, from_list, opt_array_bounds, nest_array_bounds,
|
name_list, from_clause, from_list, opt_array_bounds, nest_array_bounds,
|
||||||
expr_list, attrs, res_target_list, res_target_list2,
|
expr_list, attrs, res_target_list, res_target_list2,
|
||||||
@ -210,7 +213,8 @@ static Node *makeA_Expr(int oper, char *opname, Node *lexpr, Node *rexpr);
|
|||||||
%left '+' '-'
|
%left '+' '-'
|
||||||
%left '*' '/'
|
%left '*' '/'
|
||||||
%left '|' /* this is the relation union op, not logical or */
|
%left '|' /* this is the relation union op, not logical or */
|
||||||
%right ';' ':' /* Unary Operators */
|
%right ':' /* Unary Operators */
|
||||||
|
%left ';' /* end of statement or natural log */
|
||||||
%nonassoc '<' '>'
|
%nonassoc '<' '>'
|
||||||
%right UMINUS
|
%right UMINUS
|
||||||
%left '.'
|
%left '.'
|
||||||
@ -219,14 +223,20 @@ static Node *makeA_Expr(int oper, char *opname, Node *lexpr, Node *rexpr);
|
|||||||
%nonassoc REDUCE
|
%nonassoc REDUCE
|
||||||
%%
|
%%
|
||||||
|
|
||||||
stmtblock: stmt ';' stmtblock
|
stmtblock: stmtmulti
|
||||||
{ parsetree = lcons($1, parsetree); }
|
{ parsetree = $1; }
|
||||||
| stmt ';'
|
|
||||||
{ parsetree = lcons($1, NIL); }
|
|
||||||
| stmt
|
| stmt
|
||||||
{ parsetree = lcons($1,NIL); }
|
{ parsetree = lcons($1,NIL); }
|
||||||
;
|
;
|
||||||
|
|
||||||
|
stmtmulti: stmtmulti stmt ';'
|
||||||
|
{ $$ = lappend($1, $2); }
|
||||||
|
| stmtmulti stmt
|
||||||
|
{ $$ = lappend($1, $2); }
|
||||||
|
| stmt ';'
|
||||||
|
{ $$ = lcons($1,NIL); }
|
||||||
|
;
|
||||||
|
|
||||||
stmt : AddAttrStmt
|
stmt : AddAttrStmt
|
||||||
| ClosePortalStmt
|
| ClosePortalStmt
|
||||||
| CopyStmt
|
| CopyStmt
|
||||||
@ -949,12 +959,18 @@ OptStmtList: NOTHING { $$ = NIL; }
|
|||||||
| '[' OptStmtBlock ']' { $$ = $2; }
|
| '[' OptStmtBlock ']' { $$ = $2; }
|
||||||
;
|
;
|
||||||
|
|
||||||
OptStmtBlock: OptimizableStmt
|
OptStmtBlock: OptStmtMulti
|
||||||
|
{ $$ = $1; }
|
||||||
|
| OptimizableStmt
|
||||||
{ $$ = lcons($1, NIL); }
|
{ $$ = lcons($1, NIL); }
|
||||||
|
;
|
||||||
|
|
||||||
|
OptStmtMulti: OptStmtMulti OptimizableStmt ';'
|
||||||
|
{ $$ = lappend($1, $2); }
|
||||||
|
| OptStmtMulti OptimizableStmt
|
||||||
|
{ $$ = lappend($1, $2); }
|
||||||
| OptimizableStmt ';'
|
| OptimizableStmt ';'
|
||||||
{ $$ = lcons($1, NIL); }
|
{ $$ = lcons($1, NIL); }
|
||||||
| OptStmtBlock OptimizableStmt
|
|
||||||
{ $$ = lappend($1, $2); }
|
|
||||||
;
|
;
|
||||||
|
|
||||||
event_object: relation_name '.' attr_name
|
event_object: relation_name '.' attr_name
|
||||||
|
Loading…
x
Reference in New Issue
Block a user