mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-19 01:03:04 +00:00
Give a try to M4 as a back end.
* lib/readpipe.c: New, from wdiff. * src/Makefile.am (DEFS): Define PKGDATADIR, not BISON_SIMPLE and BISON_HAIRY. * src/system.h (BISON_HAIRY, BISON_SIMPLE): Remove the DOS and VMS specific values. Now it is m4 that performs the lookup. * src/parse-skel.y: Remove. * src/muscle_tab.c, src/muscle_tab.h (muscles_m4_output): New. * src/output.c (actions_output, guards_output) (token_definitions_output): No longer keeps track of the output line number, hence remove the second argument. (guards_output): Check against the guard member of a rule, not the action member. Adjust callers. (output_skeleton): Don't look for the skeleton location, let m4 do that. Create `/tmp/muscles.m4'. This is temporary, a proper temporary file will be used. Invoke `m4' on m4sugar.m4, muscles.m4, and the skeleton. (prepare): Given that for the time being changesyntax is not usable in M4, rename the muscles using `-' to `_'. Define `defines_flag', `output_parser_name' and `output_header_name'. * src/output.h (actions_output, guards_output) (token_definitions_output): Adjust prototypes. * src/scan-skel.l: Instead of scanning the skeletons, it now processes the output of m4: `__oline__' and `#output'. * data/bison.simple: Adjust to be used by M4(sugar). * tests/Makefile.am: Use check_SCRIPTS to make sure `bison' is up to date. * tests/bison.in: Use the secrete envvar `BISON_PKGDATADIR' instead of the dead `BISON_SIMPLE' and `BISON_HAIRY'. * data/m4sugar/m4sugar.m4, data/m4sugar/version.m4: New, shamelessly stolen from CVS Autoconf.
This commit is contained in:
@@ -1,6 +1,5 @@
|
||||
/* -*- C -*- */
|
||||
/* Scan Bison Skeletons.
|
||||
Copyright (C) 2001 Free Software Foundation, Inc.
|
||||
/* Scan Bison Skeletons. -*- C -*-
|
||||
Copyright (C) 2001, 2002 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of Bison, the GNU Compiler Compiler.
|
||||
|
||||
@@ -19,77 +18,26 @@
|
||||
Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
||||
02111-1307, USA. */
|
||||
|
||||
%option debug nodefault noyywrap nounput
|
||||
%option nodefault noyywrap nounput
|
||||
%option prefix="skel_" outfile="lex.yy.c"
|
||||
|
||||
/* If we enable
|
||||
|
||||
%option yylineno
|
||||
|
||||
Then we have warning: `yy_flex_realloc' defined but not used.
|
||||
Seems like a Flex bug to me: Why the heck yylineno would trigger
|
||||
the REJECT exception??? */
|
||||
|
||||
%{
|
||||
#include "system.h"
|
||||
#include "skeleton.h"
|
||||
#include "parse-skel.h"
|
||||
%}
|
||||
|
||||
%{
|
||||
/* Each time we match a string, move the end cursor to its end. */
|
||||
#define YY_USER_ACTION yylloc->last_column += yyleng;
|
||||
#include "files.h"
|
||||
int skel_lex PARAMS ((void));
|
||||
static int yylineno = 1;
|
||||
%}
|
||||
%%
|
||||
%{
|
||||
/* At each yylex invocation, mark the current position as the
|
||||
start of the next token. */
|
||||
LOCATION_STEP (*yylloc);
|
||||
%}
|
||||
/* This is an approximation, but we don't need more. */
|
||||
^"#output \""[^\"]+\"\n {
|
||||
yytext[yyleng - 2] = '\0';
|
||||
skel_out = xfopen (yytext + strlen ("#output \""), "w");
|
||||
yylineno = 1;
|
||||
}
|
||||
|
||||
"%%{line}" { return LINE; }
|
||||
"%%{skeleton-line}" { return SLINE; }
|
||||
|
||||
"%%{section}" { return SECTION; }
|
||||
|
||||
"%%{guards}" { return GUARDS; }
|
||||
"%%{actions}" { return ACTIONS; }
|
||||
"%%{tokendef}" { return TOKENS; }
|
||||
|
||||
/* Muscle. */
|
||||
"%%{"[a-zA-Z][0-9a-zA-Z_-]+"}" {
|
||||
yylval->string = xstrndup (yytext + 3, yyleng - 4);
|
||||
return MUSCLE;
|
||||
}
|
||||
|
||||
/* String. */
|
||||
"%%\"".*"\"" {
|
||||
yylval->string = xstrndup (yytext + 3, yyleng - 4);
|
||||
return STRING;
|
||||
}
|
||||
|
||||
/* End of line. */
|
||||
"\n" {
|
||||
LOCATION_LINES (*yylloc, yyleng);
|
||||
return '\n';
|
||||
}
|
||||
|
||||
/* White spaces. */
|
||||
[\t ]+ {
|
||||
yylval->string = yytext;
|
||||
return BLANKS;
|
||||
}
|
||||
|
||||
/* Plain Characters. */
|
||||
[^%\n]+ {
|
||||
yylval->string = yytext;
|
||||
return RAW;
|
||||
}
|
||||
|
||||
/* Plain Character. */
|
||||
. {
|
||||
yylval->character = *yytext;
|
||||
return CHARACTER;
|
||||
}
|
||||
"__oline__" fprintf (yyout, "%d", yylineno);
|
||||
[^_\n]+ ECHO;
|
||||
\n+ yylineno += yyleng; ECHO;
|
||||
. ECHO;
|
||||
|
||||
%%
|
||||
|
||||
Reference in New Issue
Block a user