aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--contrib/pgbench/exprparse.y4
-rw-r--r--contrib/pgbench/exprscan.l25
-rw-r--r--contrib/pgbench/pgbench.h5
3 files changed, 19 insertions, 15 deletions
diff --git a/contrib/pgbench/exprparse.y b/contrib/pgbench/exprparse.y
index 243c6b9c38d..e68631e3e61 100644
--- a/contrib/pgbench/exprparse.y
+++ b/contrib/pgbench/exprparse.y
@@ -4,7 +4,7 @@
* exprparse.y
* bison grammar for a simple expression syntax
*
- * Portions Copyright (c) 1996-2014, PostgreSQL Global Development Group
+ * Portions Copyright (c) 1996-2015, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California
*
*-------------------------------------------------------------------------
@@ -36,9 +36,11 @@ static PgBenchExpr *make_op(char operator, PgBenchExpr *lexpr,
%type <expr> expr
%type <ival> INTEGER
%type <str> VARIABLE
+
%token INTEGER VARIABLE
%token CHAR_ERROR /* never used, will raise a syntax error */
+/* Precedence: lowest to highest */
%left '+' '-'
%left '*' '/' '%'
%right UMINUS
diff --git a/contrib/pgbench/exprscan.l b/contrib/pgbench/exprscan.l
index 4c9229cd9cf..6e3331d908e 100644
--- a/contrib/pgbench/exprscan.l
+++ b/contrib/pgbench/exprscan.l
@@ -4,7 +4,7 @@
* exprscan.l
* a lexical scanner for a simple expression syntax
*
- * Portions Copyright (c) 1996-2014, PostgreSQL Global Development Group
+ * Portions Copyright (c) 1996-2015, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California
*
*-------------------------------------------------------------------------
@@ -17,10 +17,6 @@ static int yyline = 0, yycol = 0;
static YY_BUFFER_STATE scanbufhandle;
static char *scanbuf;
static int scanbuflen;
-
-/* flex 2.5.4 doesn't bother with a decl for this */
-int expr_yylex(void);
-
%}
%option 8bit
@@ -32,7 +28,6 @@ int expr_yylex(void);
%option warn
%option prefix="expr_yy"
-non_newline [^\n\r]
space [ \t\r\f]
%%
@@ -44,15 +39,24 @@ space [ \t\r\f]
"%" { yycol += yyleng; return '%'; }
"(" { yycol += yyleng; return '('; }
")" { yycol += yyleng; return ')'; }
-:[a-zA-Z0-9_]+ { yycol += yyleng; yylval.str = pg_strdup(yytext + 1); return VARIABLE; }
-[0-9]+ { yycol += yyleng; yylval.ival = strtoint64(yytext); return INTEGER; }
+
+:[a-zA-Z0-9_]+ {
+ yycol += yyleng;
+ yylval.str = pg_strdup(yytext + 1);
+ return VARIABLE;
+ }
+[0-9]+ {
+ yycol += yyleng;
+ yylval.ival = strtoint64(yytext);
+ return INTEGER;
+ }
[\n] { yycol = 0; yyline++; }
-{space} { yycol += yyleng; /* ignore */ }
+{space}+ { yycol += yyleng; /* ignore */ }
. {
yycol += yyleng;
- fprintf(stderr, "unexpected character '%s'\n", yytext);
+ fprintf(stderr, "unexpected character \"%s\"\n", yytext);
return CHAR_ERROR;
}
%%
@@ -64,7 +68,6 @@ yyerror(const char *message)
* so the interesting location information is the column number */
fprintf(stderr, "%s at column %d\n", message, yycol);
/* go on to raise the error from pgbench with more information */
- /* exit(1); */
}
/*
diff --git a/contrib/pgbench/pgbench.h b/contrib/pgbench/pgbench.h
index 128bf110d77..0396e551f24 100644
--- a/contrib/pgbench/pgbench.h
+++ b/contrib/pgbench/pgbench.h
@@ -2,7 +2,7 @@
*
* pgbench.h
*
- * Portions Copyright (c) 1996-2014, PostgreSQL Global Development Group
+ * Portions Copyright (c) 1996-2015, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California
*
*-------------------------------------------------------------------------
@@ -18,7 +18,6 @@ typedef enum PgBenchExprType
ENODE_OPERATOR
} PgBenchExprType;
-struct PgBenchExpr;
typedef struct PgBenchExpr PgBenchExpr;
struct PgBenchExpr
@@ -53,4 +52,4 @@ extern void expr_scanner_finish(void);
extern int64 strtoint64(const char *str);
-#endif
+#endif /* PGBENCH_H */