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:
Akim Demaille
2002-02-05 10:08:59 +00:00
parent 8e86444744
commit be2a1a68ef
13 changed files with 318 additions and 233 deletions

View File

@@ -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;
%%