1
0
mirror of https://github.com/postgres/postgres.git synced 2025-11-07 19:06:32 +03:00

From: Michael Meskes <meskes@topsystem.de>

No more shift/reduce conflicts. Also all other bugs I know about are fixed.
This commit is contained in:
Marc G. Fournier
1998-02-27 12:59:33 +00:00
parent 1a6de0760d
commit 96ac738269
13 changed files with 163 additions and 88 deletions

View File

@@ -29,9 +29,7 @@ usage(char *progname)
int
main(int argc, char *const argv[])
{
char c,
out_option = 0;
int fnr;
int fnr, c, out_option = 0;
while ((c = getopt(argc, argv, "vdo:")) != EOF)
{

View File

@@ -28,11 +28,14 @@ do [dD][oO]
end [eE][nN][dD]
exec [eE][xX][eE][cC]
execute [eE][xX][eE][cC][uU][tT][eE]
fetch [fF][eE][tT][cC][hH]
found [fF][oO][uU][nN][dD]
from [fF][rR][oO][mM]
go [gG][oO]
goto [gG][oO][tT][oO]
immediate [iI][mM][mM][eE][dD][iI][aA][tT][eE]
include [iI][nN][cC][lL][uU][dD][eE]
in [iI][nN]
into [iI][nN][tT][oO]
not [nN][oO][tT]
open [oO][pP][eE][nN]
@@ -63,6 +66,7 @@ work [wW][oO][rR][kK]
<SQL>{commit} { dbg(SQL_COMMIT); return SQL_COMMIT; }
<SQL>{release} { dbg(SQL_RELEASE); return SQL_RELEASE; }
<SQL>{work} { dbg(SQL_WORK); return SQL_WORK; }
<SQL>{fetch} { dbg(SQL_FETCH); return SQL_FETCH; }
<SQL>{rollback} { dbg(SQL_ROLLBACK); return SQL_ROLLBACK; }
<SQL>{whenever} { dbg(SQL_WHENEVER); return SQL_WHENEVER; }
<SQL>{sqlerror} { dbg(SQL_SQLERROR); return SQL_SQLERROR; }
@@ -70,10 +74,12 @@ work [wW][oO][rR][kK]
<SQL>{not}{ws}{found} { dbg(SQL_NOT_FOUND); return SQL_NOT_FOUND; }
<SQL>{continue} { dbg(SQL_CONTINUE); return SQL_CONTINUE; }
<SQL>{into} { dbg(SQL_INTO); return SQL_INTO; }
<SQL>{in} { dbg(SQL_IN); return SQL_IN; }
<SQL>{goto} { dbg(SQL_GOTO); return SQL_GOTO; }
<SQL>{go}{ws}{to} { dbg(SQL_GOTO); return SQL_GOTO; }
<SQL>{stop} { dbg(SQL_STOP); return SQL_STOP; }
<SQL>{do} { dbg(SQL_DO); return SQL_DO; }
<SQL>{from} { dbg(SQL_FROM); return SQL_FROM; }
{length} { dbg(S_LENGTH); return S_LENGTH; }
@@ -144,6 +150,7 @@ struct { dbg(S_STRUCT); return S_STRUCT; }
\* { dbg(*); return('*'); }
<SQL>":" { dbg(:); return ':'; }
<SQL>"::" { dbg(SQL_CONV); return SQL_CONV; }
{ws} { ECHO; }
. { dbg(.); return S_ANYTHING; }

View File

@@ -42,10 +42,6 @@ print_action(struct when *w)
{
switch (w->code)
{
case W_CONTINUE: fprintf(yyout, "continue;");
break;
case W_BREAK: fprintf(yyout, "break;");
break;
case W_SQLPRINT: fprintf(yyout, "sqlprint();");
break;
case W_GOTO: fprintf(yyout, "goto %s;", w->str);
@@ -224,12 +220,12 @@ dump_variables(struct arguments * list)
struct when action;
}
%token <tagname> SQL_START SQL_SEMI SQL_STRING SQL_INTO
%token <tagname> SQL_START SQL_SEMI SQL_STRING SQL_INTO SQL_IN
%token <tagname> SQL_BEGIN SQL_END SQL_DECLARE SQL_SECTION SQL_INCLUDE
%token <tagname> SQL_CONNECT SQL_OPEN SQL_EXECUTE SQL_IMMEDIATE
%token <tagname> SQL_COMMIT SQL_ROLLBACK SQL_RELEASE SQL_WORK SQL_WHENEVER
%token <tagname> SQL_SQLERROR SQL_NOT_FOUND SQL_CONTINUE
%token <tagname> SQL_DO SQL_GOTO SQL_SQLPRINT SQL_STOP
%token <tagname> SQL_SQLERROR SQL_NOT_FOUND SQL_CONTINUE SQL_FROM SQL_FETCH
%token <tagname> SQL_DO SQL_GOTO SQL_SQLPRINT SQL_STOP SQL_CONV
%token <tagname> S_SYMBOL S_LENGTH S_ANYTHING S_LABEL
%token <tagname> S_VARCHAR S_VARCHAR2
@@ -241,11 +237,11 @@ dump_variables(struct arguments * list)
%type <type> type type_detailed varchar_type simple_type struct_type string_type
/* % type <type> array_type pointer_type */
%type <symbolname> symbol label
%type <tagname> maybe_storage_clause varchar_tag db_name
%type <tagname> maybe_storage_clause varchar_tag db_name cursor
%type <type_enum> simple_tag char_tag
%type <indexsize> index length
%type <action> action
%type <tagname> canything sqlanything both_anything vartext commit_release
%type <tagname> canything sqlanything both_anything vartext commit_release sqlcommand
%%
prog : statements;
@@ -262,6 +258,7 @@ statement : sqldeclaration
| sqlexecute
| sqlwhenever
| sqlstatement
| sqlfetch
| cthing
| blockstart
| blockend;
@@ -573,9 +570,30 @@ label : S_LABEL {
$<symbolname>$ = name;
}
sqlfetch: SQL_START SQL_FETCH {
reset_variables();
fprintf(yyout, "ECPGdo(__LINE__, \"fetch in ");
} cursor {
fwrite(yytext, yyleng, 1, yyout);
fwrite(" ", 1, 1, yyout);
} SQL_INTO into_list SQL_SEMI {
/* Dump */
fprintf(yyout, "\", ");
dump_variables(argsinsert);
fprintf(yyout, "ECPGt_EOIT, ");
dump_variables(argsresult);
fprintf(yyout, "ECPGt_EORT );");
whenever_action();
}
cursor: SQL_IN S_SYMBOL | S_SYMBOL;
sqlstatement : SQL_START { /* Reset stack */
reset_variables();
fprintf(yyout, "ECPGdo(__LINE__, \"");
} sqlcommand {
fwrite(yytext, yyleng, 1, yyout);
fwrite(" ", 1, 1, yyout);
} sqlstatement_words SQL_SEMI {
/* Dump */
fprintf(yyout, "\", ");
@@ -584,7 +602,10 @@ sqlstatement : SQL_START { /* Reset stack */
dump_variables(argsresult);
fprintf(yyout, "ECPGt_EORT );");
whenever_action();
};
}
/* FIXME: instead of S_SYMBOL we should list all possible commands */
sqlcommand : S_SYMBOL | SQL_DECLARE;
sqlstatement_words : sqlstatement_word
| sqlstatement_words sqlstatement_word;
@@ -594,7 +615,10 @@ sqlstatement_word : ':' symbol
add_variable(&argsinsert, find_variable($2));
fprintf(yyout, " ;; ");
}
| SQL_INTO into_list { }
| SQL_INTO into_list SQL_FROM {
fwrite(yytext, yyleng, 1, yyout);
fwrite(" ", 1, 1, yyout);
}
| sqlanything
{
fwrite(yytext, yyleng, 1, yyout);
@@ -610,7 +634,7 @@ sqlstatement_word : ':' symbol
into_list : ':' symbol {
add_variable(&argsresult, find_variable($2));
}
| into_list ',' ':' symbol {
| into_list ',' ':' symbol{
add_variable(&argsresult, find_variable($4));
};
@@ -627,10 +651,10 @@ sqlanything : both_anything;
both_anything : S_LENGTH | S_VARCHAR | S_VARCHAR2
| S_LONG | S_SHORT | S_INT | S_CHAR | S_FLOAT | S_DOUBLE | S_BOOL
| SQL_OPEN | SQL_CONNECT
| SQL_STRING
| SQL_STRING | SQL_CONV
| SQL_BEGIN | SQL_END
| SQL_DECLARE | SQL_SECTION
| SQL_INCLUDE
| SQL_DECLARE | SQL_SECTION | SQL_FETCH | SQL_FROM
| SQL_INCLUDE | SQL_IN
| S_SYMBOL | S_LABEL
| S_STATIC | S_EXTERN | S_AUTO | S_CONST | S_REGISTER | S_STRUCT
| '[' | ']' | ',' | '=' | '*' | '(' | ')'

View File

@@ -3,6 +3,7 @@
#include <stdlib.h>
#include "type.h"
#include "extern.h"
/* malloc + error check */
void *