Improve handling of semicolons ending statements.

This commit is contained in:
Bruce Momjian 1996-12-20 20:33:12 +00:00
parent 231e1e70d8
commit 4371756f16
1 changed files with 31 additions and 15 deletions

View File

@ -10,7 +10,7 @@
*
*
* 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
* AUTHOR DATE MAJOR EVENT
@ -98,7 +98,8 @@ static Node *makeA_Expr(int oper, char *opname, Node *lexpr, Node *rexpr);
AppendStmt *astmt;
}
%type <node> stmt, AddAttrStmt, ClosePortalStmt,
%type <node> stmt,
AddAttrStmt, ClosePortalStmt,
CopyStmt, CreateStmt, DefineStmt, DestroyStmt,
ExtendStmt, FetchStmt, GrantStmt,
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 <chr> operation
%type <list> stmtblock, relation_name_list, OptTableElementList,
%type <list> stmtblock, stmtmulti,
relation_name_list, OptTableElementList,
tableElementList, OptInherit, definition,
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,
name_list, from_clause, from_list, opt_array_bounds, nest_array_bounds,
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 '|' /* this is the relation union op, not logical or */
%right ';' ':' /* Unary Operators */
%right ':' /* Unary Operators */
%left ';' /* end of statement or natural log */
%nonassoc '<' '>'
%right UMINUS
%left '.'
@ -219,12 +223,18 @@ static Node *makeA_Expr(int oper, char *opname, Node *lexpr, Node *rexpr);
%nonassoc REDUCE
%%
stmtblock: stmt ';' stmtblock
{ parsetree = lcons($1, parsetree); }
| stmt ';'
{ parsetree = lcons($1, NIL); }
| stmt
{ parsetree = lcons($1, NIL); }
stmtblock: stmtmulti
{ parsetree = $1; }
| stmt
{ parsetree = lcons($1,NIL); }
;
stmtmulti: stmtmulti stmt ';'
{ $$ = lappend($1, $2); }
| stmtmulti stmt
{ $$ = lappend($1, $2); }
| stmt ';'
{ $$ = lcons($1,NIL); }
;
stmt : AddAttrStmt
@ -949,14 +959,20 @@ OptStmtList: NOTHING { $$ = NIL; }
| '[' OptStmtBlock ']' { $$ = $2; }
;
OptStmtBlock: OptimizableStmt
OptStmtBlock: OptStmtMulti
{ $$ = $1; }
| OptimizableStmt
{ $$ = lcons($1, NIL); }
;
OptStmtMulti: OptStmtMulti OptimizableStmt ';'
{ $$ = lappend($1, $2); }
| OptStmtMulti OptimizableStmt
{ $$ = lappend($1, $2); }
| OptimizableStmt ';'
{ $$ = lcons($1, NIL); }
| OptStmtBlock OptimizableStmt
{ $$ = lappend($1, $2); }
;
event_object: relation_name '.' attr_name
{
$$ = makeNode(Attr);