* 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
*
*-------------------------------------------------------------------------
%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
* 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
*
*-------------------------------------------------------------------------
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
%option warn
%option prefix="expr_yy"
-non_newline [^\n\r]
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;
}
%%
* 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); */
}
/*
*
* 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
*
*-------------------------------------------------------------------------
ENODE_OPERATOR
} PgBenchExprType;
-struct PgBenchExpr;
typedef struct PgBenchExpr PgBenchExpr;
struct PgBenchExpr
extern int64 strtoint64(const char *str);
-#endif
+#endif /* PGBENCH_H */