mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-09 04:13:03 +00:00
The name "$end" is nice in the report, in particular it avoids that pointed-rules (aka items) be too long. It also helps keeping them "standard". But it is bad in error messages, we should report "end of file" (or maybe "end of input", this is debatable). So, unless the user already defined the alias for the error token herself, make it "end of file". It should even be translated if the user already translated some tokens, so that there is now no strong reason to redefine the $end token. * src/output.c (prepare_symbol_names): Issue "end of file" instead of "$end". * data/skeletons/lalr1.java (yytnamerr_): Remove the renaming hack. * build-aux/update-test: Accept files with names containing a "+", such as c++.at. * tests/actions.at, tests/c++.at, tests/conflicts.at, * tests/glr-regression.at, tests/regression.at, tests/skeletons.at: Adjust.
60 lines
1.5 KiB
C
60 lines
1.5 KiB
C
/* Prologue (directives). -*- C -*- */
|
|
|
|
/* Disable Flex features we don't need, to avoid warnings. */
|
|
%option nodefault noinput nounput noyywrap
|
|
|
|
%{
|
|
#include <errno.h> /* errno, ERANGE */
|
|
#include <limits.h> /* INT_MIN */
|
|
#include <stdlib.h> /* strtol */
|
|
|
|
#include "parse.h"
|
|
|
|
// Each time a rule is matched, advance the end cursor/position.
|
|
#define YY_USER_ACTION \
|
|
yylloc->last_column += yyleng;
|
|
|
|
// Move the first position onto the last.
|
|
#define LOCATION_STEP() \
|
|
do { \
|
|
yylloc->first_line = yylloc->last_line; \
|
|
yylloc->first_column = yylloc->last_column; \
|
|
} while (0)
|
|
%}
|
|
|
|
%%
|
|
%{
|
|
// Each time yylex is called, move the head position to the end one.
|
|
LOCATION_STEP ();
|
|
%}
|
|
/* Rules. */
|
|
|
|
"+" return TOK_PLUS;
|
|
"-" return TOK_MINUS;
|
|
"*" return TOK_STAR;
|
|
"/" return TOK_SLASH;
|
|
|
|
"(" return TOK_LPAREN;
|
|
")" return TOK_RPAREN;
|
|
|
|
/* Scan an integer. */
|
|
[0-9]+ {
|
|
errno = 0;
|
|
long n = strtol (yytext, NULL, 10);
|
|
if (! (INT_MIN <= n && n <= INT_MAX && errno != ERANGE))
|
|
yyerror (yylloc, nerrs, "integer is out of range");
|
|
yylval->TOK_NUM = (int) n;
|
|
return TOK_NUM;
|
|
}
|
|
|
|
"\n" yylloc->last_line++; yylloc->last_column = 1; return TOK_EOL;
|
|
|
|
/* Ignore white spaces. */
|
|
[ \t]+ LOCATION_STEP (); continue;
|
|
|
|
. yyerror (yylloc, nerrs, "syntax error, invalid character"); continue;
|
|
|
|
<<EOF>> return TOK_YYEOF;
|
|
%%
|
|
/* Epilogue (C code). */
|